Raspberry Pi Pico als USB-Computermaus (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 Maus fungieren. Im Programmcode kann die Bewegung des Mauszeigers, das Drücken der Maustasten oder das Scrollen in einem Fenster gesteuert werden. Auf diese Weise wäre es denkbar, Software aus der Ferne zu steuern. Natürlich nur, wenn man weiß, welches Bedienelement welche Koordinaten hat. Oder man baut sich eine eigene Computer-Maus.

Aufbau und Bauteile

Raspberry Pi Pico mit Taster-Modul KY-004

Der GPIO15 (Pin 20) und GPIO7 (Pin 10) sind 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 der Taster wird der GPIO mit GND verbunden.

Programmcode für die Emulation der Maus-Tasten

Beim folgenden Programmcode werden die Maus-Tasten emuliert. Dazu hat der Aufbau zwei Taster, die hier als Maus-Tasten-Ersatz dienen.

# Bibliotheken laden
import time
import board
import keypad
import usb_hid
from adafruit_hid.mouse import Mouse

# USB-Maus initialisieren
mouse = Mouse(usb_hid.devices)

# Taster-Pins (bei Bedarf ergänzen)
BTN_PINS = ( board.GP15, board.GP7, )

# Taster initialisieren (mit Pullup-Widerstand)
buttons = keypad.Keys(BTN_PINS, value_when_pressed=False, pull=True)

# Wiederholung: Endlos-Schleife
while True:
    time.sleep(0.1)
    event = buttons.events.get()
    if event:
        if event.pressed and event.key_number == 0:
            # Linke-Maus-Taste
            print('Taster an GPIO 15')
            mouse.click(Mouse.LEFT_BUTTON)
        if event.pressed and event.key_number == 1:
            # Rechte Maus-Taste
            print('Taster an GPIO 11')
            mouse.click(Mouse.RIGHT_BUTTON)

Programmcode für die Bewegung des Maus-Rads (Scrolling)

Beim folgenden Programmcode wird das Mausrad emuliert. Manche Computer-Mäuse haben ein solches Rad zwischen der linken und rechten Maustaste sitzen. Hierbei ist zu beachten, dass ein Fenster, in dem man hoch- und runterscrollen kann, aktiv im Vordergrund sein muss.
Das Scrollen wird durch zwei Taster ermöglicht. Einer scrollt nach oben, der andere nach unten.

# Bibliotheken laden
import time
import board
import keypad
import usb_hid
from adafruit_hid.mouse import Mouse

# USB-Maus initialisieren
mouse = Mouse(usb_hid.devices)

# Taster-Pins (bei Bedarf ergänzen)
BTN_PINS = ( board.GP15, board.GP7, )

# Taster initialisieren (mit Pullup-Widerstand)
buttons = keypad.Keys(BTN_PINS, value_when_pressed=False, pull=True)

# Wiederholung: Endlos-Schleife
while True:
    time.sleep(0.1)
    event = buttons.events.get()
    if event:
        if event.pressed and event.key_number == 0:
            # Nach oben Scrollen
            print('Taster an GPIO 15')
            mouse.move(wheel=1)
        if event.pressed and event.key_number == 1:
            # Nach unten Scrollen
            print('Taster an GPIO 7')
            mouse.move(wheel=-1)

Programmcode für die Bewegung des Mauszeigers

Beim folgenden Programmcode wird der Mauszeiger bewegt. Dazu hat der Aufbau zwei Taster, mit denen der Mauszeiger in unterschiedliche Richtungen bewegt werden kann.

# Bibliotheken laden
import time
import board
import keypad
import usb_hid
from adafruit_hid.mouse import Mouse

# USB-Maus initialisieren
mouse = Mouse(usb_hid.devices)

# Taster-Pins (bei Bedarf ergänzen)
BTN_PINS = ( board.GP15, board.GP7, )

# Taster initialisieren (mit Pullup-Widerstand)
buttons = keypad.Keys(BTN_PINS, value_when_pressed=False, pull=True)

# Wiederholung: Endlos-Schleife
while True:
    time.sleep(0.1)
    event = buttons.events.get()
    if event:
        if event.pressed and event.key_number == 0:
            # Mauszeiger in Richtung links oben versetzen
            print('Taster an GPIO 15')
            mouse.move(x=-10, y=-10)
        if event.pressed and event.key_number == 1:
            # Mauszeiger in Richtung rechts unten versetzen
            print('Taster an GPIO 7')
            mouse.move(x=10, y=10)

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