ausprobiert

Mouse Jiggler mit
Raspberry Pi Pico-LCD-1.14 Display



Bildbox 1 (klick hier)

Mouse-Jiggler - was soll das sein? Für denjenigen, der es wünscht hier ein paar Informationen vorab. Ansonsten viel Spaß beim lesen und nachbauen des Projektes.

Hardware / Software

- Raspberry Pi Pico
- Pico-LCD-1.14 Display
- Micro USB Kabel
- Firmware CircuitPython
- Thonny IDE


Im Unterschied zu den anderen Projekten mit dem Pico-LCD-1.14 Display wird hier als Firmeware nicht mehr MicroPython sondern CircuitPython von Adafruit verwendet. Das ist bei Verwendung des Pico-LCD-1.14 Displays zwar auch nicht einfacher und Anleitungen im Netz gibt es dazu eher noch weniger, aber die von Adafruit bereitgestellten Bibliotheken ermöglichen eine viel größere Bandbreite, als unter MicroPython.

Ich werde deshalb zunächst kurz beschreiben, wie die Firmeware CircuitPython auf den Pico übertragen wird.

Los gehts

Um das Display mit dem Pico zu verbinden, haben Sie mehrere Möglichkeiten. Am einfachsten ist es, den Pico und das Display direkt, wie auf dem Headerfoto oben in der Mitte, zu verbinden. Dabei ist aber unbedingt darauf zu achten, dass die Markierung USB auf der Rückseite des Displays nach der gleichen Seite zeigt, wie der USB-Anschluss des Pico. !!Wichtig: Noch nicht am USB-Port anschließen!!
Jetzt laden Sie sich die folgende zip-Datei herunter und entpacken diese. Enthalten sind zwei uf2-Dateien. Die Datei flash_nuke.uf2 brauchen Sie nur, wenn der Pico vorher schon unter MicroPython genutzt wurde. Wenn der Pico neu ist, können sie den Schritt 1. überspringen.

1. Nehmen Sie den Pico im ausgeschalteten Zustand zur Hand und drücken die BootSel-Taste (siehe Beschriftung auf der Platinenrückseite). Die wird gehalten und der Pico erst dann (!!) über das USB-Kabel mit dem Rechner verbunden. Nach dem Verbinden des USB-Kabels kann die Taste BootSel losgelassen werden. Nun öffnet sich im Filesystem ein Explorer-Fenster mit einem neuen Massenspeicher RPI-RP2. Öffnen Sie jetzt auf dem Rechner den Download-Ordner und ziehen die flash_nuke.uf2-Datei mit der Firmware auf den Massenspeicher RPI-RP2. Dadurch wird die alte Firmeware gelöscht und nach kurzer Zeit erscheint im Datei-Explorer wieder das Laufwerk RPI-RP2.

2. Im nächsten Schritt wird die Firmeware adafruit-circuitpython-raspberry_pi_pico_de_DE_x.x.x.uf2 aus dem Datei-Explorer auf das angezeigte Laufwerk RPI-RP2 gezogen. Warten Sie bis die Firmware vollständig aufgespielt ist. Der Pico wird jetzt im Datei-Explorer als Massenspeicher 'CIRCUITPY' angezeigt. Ein Vorteil gegenüber MicroPython ist, dass der Zugriff auf den Pico über den Explorer auch später jederzeit möglich ist. D.h. er wird von Windows bei jedem Anstecken als Laufwerk erkannt.

3. Nun müssen noch der Programmcode und die Adafruit-Bibliotheken für das LCD-Display kopiert werden. Dazu downloaden Sie die Datei waveshare_jiggler.zip und entpacken diese wieder. Enthalten sind die Dateien:
waveshare_jiggler.py
init_pico_lcd_1_14.py
und der Ordner
lib
Die beiden Python-Dateien kopieren Sie ins Hauptverzeichnis des Pico. Den Inhalt des Ordners 'lib' kopieren Sie vollständig in den bereits vorhandenen Ordner 'lib' auf dem Pico (einfach mit dem Datei-Explorer). Diese Bibliotheken werden später vom LCD-Display benötigt.

4. Am Windowsrechner zur Pythonprogrammierung nutze ich die Thonny-IDE. Falls bei der ersten Benutzung von Thonny kein Board erkannt wird, muss in den Interpreter-Einstellungen die Port-Auswahl überprüft werden und ggf. auf CircuitPython (generic) eingestellt werden. Klicken Sie dazu ganz unten rechts auf den 'Button'. Das Fenster sollte jetzt so aussehen:

In der unteren Kommandozeile wird der Controler z.B. mit "Adafruit CircuitPython 7.3.3 von 2021-08-29; Raspberry Pi Pico with rp2040" angezeigt.

Jetzt öffnen Sie über das Thonny-Menü die Datei 'waveshare_jiggler.py' und können sie ausführen. Über die Button A und B am Display kann der Jiggler ein- bzw. ausgeschaltet werden.

Programmbeschreibung

Bei der Beschreibung des Programmaufbaus werde ich nicht auf alle Einzelheiten eingehen und in dem Fall einen Screenshot des Quelltextes darstellen. Wie z.B. hier von init_pico_lcd_1_14.py welches im Hauptprogramm importiert wird und das Display initialisiert.

Bild wird noch geladen

Im Hauptprogramm waveshare_jiggler.py werden zunächst die Bibliotheken importiert, die Variabe vereinbart und das Display aufgerufen.

Bild wird noch geladen



Bild wird noch geladen

Ab Zeile 40 erfolgen Textausgaben auf dem Display, welche den aktuellen Zustand beschreiben. So z.B. die Funktion loeschen_neu() (Zeile 40 -50) löscht den Text an der Displayposition y = 70 und schreibt ihn neu. Aufgerufen wird diese Funktion von den Funktionen anzeige_gestartet() (Zeile 89, 93) und anzeige_gestopt() (Zeile 107, 111). Die Funktion buttonwahl() (Zeilen 52 - 62) hat die gleiche Aufgabe, nur für die Displayposition y = 110.
Ebenso hat die Funktion display_start() (Zeile 64 - 82) nur die Aufgabe das Startbild darzustellen und zum Betätigen des Button A aufzufordern, nachdem der Pico angeschlossen wurde.


Bild wird noch geladen

Auf die Funktionen anzeige_gestartet(), anzeige_gestopt() und jiggle(on) werde ich nachfolgend im Detail eingehen.
Wenn die Taste A gedrückt wurde, startet der Mouse-Jiggler. Auf dem Display soll das entsprechend angezeigt werden. Dazu wird in der Funktion anzeige_gestartet() in den Zeilen 86 bis 89 eine (evtl.) früherer Anzeige gelöscht, indem sie mit der Hintergrundfarbe (0x0000FF - blau) überschrieben wird. Anschließend wird der Text "ist gestartet" in der Schriftfarbe (0xFFFF00) ausgegeben. Dazu wird in beiden Fällen die Funktion loeschen_neu() aufgerufen. In den Klammern werden die Werte der Variable 'text' und 'TEXT_COLOR' übergeben. Anschließend geht man analog mit der Anzeige, welcher Button gedrückt werden soll, vor. Die Funktion anzeige_gestopt() ist wieder analog aufgebaut. Nur dass erst "ist gestartet" gelöscht und durch "ist angehalten" ersetzt, sowie 'B-Button" durch "A_Button" ausgetauscht wird.
Es folgt die Funktion jiggle() mit der übergebenen Variable 'on', welche den Zustand "an" bzw. "aus" darstellt. Zur Kontrolle während der Programmierung wurden einige Printausgaben in Thonny genutzt, um das Verhalten des Programms einzuschätzen. Entscheidend sind die Schleifen in den Zeilen 124 und 136. Es werden jeweils 4 Schritte nach rechts bzw. links ausgeführt, die den Mauszeiger bewegen. Nach jedem Schritt wird geprüft, ob der 'B-Button' gedrückt wurde, denn dann soll der Vorgang abgebrochen werden. Diese Überprüfung wurde in die Scheifen gelegt, damit das Beenden zeitnah und zuverlässig erfolgt und nicht durch eine der notwendigen time.sleep(2)-Pausen 'verloren' geht. Die Pausen sorgen ja dafür, dass der Nutzer nicht die Kontrolle über den Rechner verliert und auch im eingeschalteten Zustand Aktionen möglich sind.

Zuletzt gehe ich noch auf die 'while'-Schleife ab Zeile 164 ein. Die sorgt für die ständige Wiederholung der Abfrage des A_Button. Wurde er gedrückt, bekommt die Variable 'on' den Wert 1 und der Jiggler startet. Eine zusätzliche Funktionalität wird durch die Zeilen165 bis 169 realisiert. Drückt der Nutzer den Joystick-Button am Display, wird die Tastenkombination zum Sperren des PC gesendet. Bei Windowsrechnern ist das "WINDOWS + L" und bei (einigen) Linuxrechnern "Strg + Alt + L".
Weitere verwandte Projekte:

  • Pico W RTC Uhr mit Pico-LCD-1.14 Display
  • Pico Diashow mit LCD-1.14 Display
  • Pico W Netzwerkscanner mit LCD-1.14 Display
  • Pico W als Uhr mit Neopixelring

  • Damit ist das Programm vollständig. Viel Spass und Erfolg beim Ausprobieren. Wenn Ihnen diese Anleitung gefallen hat, tragen Sie hier bitte einen Kommentar ein.



    Zurück