WLAN-USB-KEYBOARD ADPATER mit RPI-PICO-W byNN

  • Über Infrarot kann man mit dem FLIRC ja ganz gut Tasten an einen PC senden.

    Für Windows gibt es Services die Tasten annehmen und an das System weiterleiten. zB HASS.agent

    Bislang habe ich beide Methoden genutzt, aber IR-Signale mit HomeAssistant zu erzeugen, um diese an den FLIRC zu senden ist 3x ums Eck und langsam, und der HASS.agent samt MQTT ist umständlich zu konfigurieren und verschluckt bei mir manchmal Tasten.


    Daher habe ich nach einer Möglichkeit gesucht Tastaturbefehle direkt via IP und USB an den HTPC zu senden.
    Zu meiner Verwunderung hab ich keine Produkte gefunden.

    Somit habe ich einen WLAN-USB-Keyboard-Adapter selbst erstellt, der gut funktioniert und den ihr gerne nachbauen könnt.

    (Hilfreich waren die Artikel von www.elektronik-kompendium.de)


    Hardware (Größe eines USB-Sticks):

    - Raspberry Pi Pico W um 7€

    - Gehäuse um 1,5€

    - USB-Kabel aus dem Lager


    Software (Python WebServer und HID-USB):

    - Thonny Python IDE um den PRI Pico zu programmieren

    - CircuitPython als Firmware

    - Mein Python-Programm - Ein Webserver der über http Parameter annimmt und diese via USB, als Tastatur-Kommandos, an den PC sendet.


    Anwendung:

    1) Man steckt den RPI-PicoW an einen USB-PORT des HTPC an

    2) Der RPI-Pico verbindet sich automatisch mit dem konfigurierten WLAN und als Tastatur mit dem HTPC

    3) Um Tasten zu senden ruft man entweder

    - die Webseite des WebServers auf und klickt auf die Buttons, oder

    - gibt eine URI ein (zB. http://10.0.xx.yy/key?key=CTRL+SHIFT+A), oder

    - geht über das REST-Service von HomeAssistant.


    Die virtuelle Tastatur des WebServers:

    pasted-from-clipboard.png


    Nutzung mit REST von HomeAssistant:

    2.png



    Installation:

    1) Download und installieren von Thonny

    2) Download der CircuitPython Firmware (adafruit-circuitpython-raspberry_pi_pico_w-en_US-9.2.4.uf2)

    3) Download des meines Python-Programms und der notwendigen Libs (Bitte bei mir via PM anfragen)


    4) RPI mit CircuitPython Firmware flashen (Ist ganz einfach!)

    - BootSel-Taste am RPI gedrückt halten und an USB anstecken.

    - es erscheint ein USB-Laufwerk mit zwei Dateien

    3.png

    - Firmware Datei (.uf2) via Copy-Paste in das USB-Laufwerk kopieren.

    - sobald der Kopiervorgang fertig ist startet der RPI automatisch neu. Zu Sicherheit nochmals abstecken und wieder anstecken (jetzt OHNE BootSel-Taste)

    - es erscheint wieder ein USB-Laufwerk diesmal mit mehr Files:

    4.png


    5) Meinen Programm-Code ins Root und die notwendigen Libs im Ordner "/lib" aufspielen

    5.png


    Libs:

    6.png


    6) Thonny starten

    7.png


    Rechts unten im Fenster muss "CircuitPython" stehen. Dann hat sich Thonny mit dem RPI Pico verbunden.


    7) WLAN Settings
    - Wir öffnen mit Thonny die Datei wlan.py vom "CircuitPython Device"

    Hier die Daten für SSID und Passwort deines WLANs eingeben und die Datei speichern.


    - Wir öffnen mit Thonny die Datei code_.py vom "CircuitPython Device"

    Und klicken auf "Ausführen"

    pasted-from-clipboard.png


    So testen wir, ob die WLAN-Verbindung klappt.


    8) Testen

    - Den Maus-Cursor des PCs in ein Textfeld plazieren.

    - Am Handy mit dem Browser die IP-Adresse des Webservers eingeben.

    - Es sollte die oben gezeigte virtuellen Tastatur im Browser angezeigt werden.

    - Beim Klicken auf die Buttons der virtuellen Tastatur sollte am PC die entsprechenden Zeichen, ohne große Verzögerung, geschrieben werden.


    9) Fertig stellen

    - Damit der Webserver automatisch beim Booten startet müssen wir die Datei code_.py in code.py umbenennen. (Einfach im Datei-Manager)

    - Nach dem Ab-/Anstecken sollte beim Aufruf der URL wieder die virtuelle Tastatur angezeigt werden und die Tasten-Weiterleitung funktionieren.


    10) Integration in HomeAssistant:
    im configuration.yaml folgendes ergänzen

    Code
    rest_command:
      htpc_send_key_sequence:
        url: "http://192.168.xx.yy/key?key={{ keys }}"
        method: GET

    Und so aufrufen:

    9.png


    oder in einer CustomButton-Card:

    10.png


    oder als Rest mit via Control4 und ähnliches.


    Ich hoffe dies es hilft so machen mit seinem HTPC weiter, so wie mir.

    VG

  • Ich habe es eben umgesetzt und es funktioniert soweit. Einzig die Demozeile mit den Verzögerungen "Delay1000" klappt nicht.


    Edit: Den Fehler habe ich gefunden. Der Test-Link mit der Verzögerung ist nicht komplett. Da ist nur die IP drin.


    Folgendes habe ich in webpage.py geändert.


    Von...

    Code
    <li><strong>Mit Verzögerungen:</strong> <a> http://{{IP_ADDRESS}}/key?key=a,delay1000,b,delay1000,c,delay1000,enter</a></li>

    nach...

    Code
    <li><strong>Mit Verzögerungen:</strong> <a href=/key?key=a,delay1000,b,delay1000,c,delay1000,enter>http://{{IP_ADDRESS}}/key?key=a,delay1000,b,delay1000,c,delay1000,enter</a></li>

    Damit klappt es.

  • Hier dann ein Beispiel wie man mit NodeRed Tasten senden kann.

    pasted-from-clipboard.png

  • Einzig die Demozeile mit den Verzögerungen "Delay1000" klappt nicht.

    Das ist Absicht.
    Mein Firefox-Browser wiederholt URL-Aufrufe, wenn nicht innerhalb von 1 Sekunden eine Antwort vom Server kommt. Das führt dazu, dass dann die Tasten mehrfach an den PC gesendet werden.

    Also diese URL-Zeile geht problemlos als REST-Aufruf, aber macht als WebPage-Aufruf Probleme.
    Ich müsste den WebServer auf asyncron umstellen damit dies auch im Browser geht. Da dies aber imho nicht relevant ist, habe ich das jetzt mal nicht gemacht.


    Noch zum Delay. Die Zahl hinter "delay" ist beliebig. Es sind die Millisekunden die gewartet werden soll bis der nächst Key gesendet wird.

  • Könnte man den Code noch für Sonderzeichen !"§$%&/()=?,._-#+* usw erweitern?

    ! = Shift+1 etc. (Sofern de-de Layout)


    Die Keycodes sind in keycodes.py definiert. Dort lassen sich auch weitere Codes hinzufügen.

  • Ich bin der König der Probleme heute glaube ich.


    Habe mir den verlinkten Pico bestellt und die Anweisung befolgt.

    Allerdings meldete mir Thorny immer wieder den folgenden Fehler:


    https://github.com/thonny/thonny/issues/2596


    Nach ein wenig googlen hieß es man solle Micropython neu aufspielen, was ich versucht habe.

    Jetzt startet er nur noch im BootSEL Modus, aber er rebooted nicht wenn man eine andere uf2 reinkopiert

    und wird ohne BootSEL im Windows nicht mehr erkannt.


    Hab ich den schon kaputt gemacht ? :cray:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!