Raspberry Pi Pico als USB-Tastatur (mit CircuitPython)

Eine Besonderheit des Raspberry Pi Pico ist die Integration des USB. Das heißt, der Pico lässt sich sehr leicht als USB-Endgerät an einem Host-Computer anmelden. Der Pico kann dabei theoretisch jedes beliebige USB-Gerät emulieren. Für CircuitPython gibt es eine Bibliothek, die es sehr einfach macht, eine HID-Steuerung (Human Interface Device) in einen Programmcode zu integrieren. Der Raspberry Pi Pico kann dann zum Beispiel als Tastatur fungieren und das Drücken von Tasten emulieren. Das ist dann von Vorteil, wenn die auf einem Computer laufende Software sich nicht an die zu verwendende Hardware anpassen lässt. Dann geht man gerne den Umweg über eine Tastaturschnittstelle. Die Daten werden dann an ein Eingabefeld der Software übergeben. Angewendet wird dieses Prinzip zum Beispiel bei einem Barcode-Leser.

Aufbau und Bauteile

Raspberry Pi Pico mit Taster-Modul KY-004

Der GPIO15 (Pin 20) ist deshalb gewählt, damit man ein Taster-Modul vom Typ KY-004 im Steckbrett so einstecken kann, dass man keine Verbindungskabel braucht. Beim Drücken des Tasters wird der GPIO15 mit GND verbunden.

Schnell und einfach alle Bauteile zusammen bestellen

USB-Unterstützung in CircuitPython

Damit die USB-Unterstützung in CircuitPython funktioniert, muss eine Bibliothek auf dem Pico installiert sein. Im Prinzip müssen mehrere Dateien in das lib-Verzeichnis kopiert werden. Außerdem empfiehlt es sich das deutsche Tastatur-Layout gleich mit zu installieren.

Programmcode mit CircuitPython: Senden eines einzelnen Zeichens

Der folgende Programmcode ist im Prinzip eine Erweiterung von einer einfachen Taster-Auswertung. Hier wird zusätzlich der Pico als USB-Tastatur initialisiert. Anschließend wird beim Drücken des Tasters der Großbuchstabe „A“ gesendet. Wenn der Texteingabe-Cursor in einem Textfeld steht, dann wird der Buchstabe „A“ dargestellt.

# Bibliotheken laden
import time
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode

# Initialisierung der Onboard-LED
led_onboard = digitalio.DigitalInOut(board.LED)
led_onboard.direction = digitalio.Direction.OUTPUT

# Initialisierung von GPIO 15 als Eingang
btn = digitalio.DigitalInOut(board.GP15)
btn.switch_to_input(pull=digitalio.Pull.UP)

# Initialisierung als USB-Tastatur
keyboard = Keyboard(usb_hid.devices)

# Wiederholung
while True:
    if btn.value:
        led_onboard.value = False
    else:
        keyboard.send(Keycode.SHIFT, Keycode.A)
        led_onboard.value = True
        time.sleep(0.25) # Wartezeit zum Entprellen
    time.sleep(0.1)

Programmcode mit CircuitPython: Senden einer Zeichenkette

Der folgende Programmcode ermöglicht das Senden einer ganzen Zeichenkette. In diesem Programmcode wird das deutsche Tastaturlayout geladen. Das muss auf dem Pico im Verzeichnis „lib/adafruit_hid“ als Datei vorhanden sein.

# Bibliotheken laden
import time
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from keyboard_layout_win_de import KeyboardLayout as KeyboardLayout
#from adafruit_hid.keyboard_layout_us import KeyboardLayout # Default

# Initialisierung von GPIO 15 als Eingang
btn = digitalio.DigitalInOut(board.GP15)
btn.switch_to_input(pull=digitalio.Pull.UP)

# Initialisierung als USB-Tastatur
kbd = Keyboard(usb_hid.devices)
keyboard = KeyboardLayout(kbd)

# Wiederholung
while True:
    if btn.value == False:
        keyboard.write('Ich bin Dein Raspberry Pi Pico\n')
        time.sleep(0.25) # Wartezeit zum Entprellen
    time.sleep(0.1)

Erweiterung

Auf Basis beider Beispiele kommt man schnell auf die Idee, komplexere Funktionen auszulösen. Die folgende Lösung beschreibt, wie man dieses Beispiel um weitere Taster erweitert und welche Codes gesendet werden müssen, um eine bestimmte Tastenkombination auszulösen.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren