Neuland betreten ist immer etwas Besonderes, auch im übertragenen Sinn der geistigen Herausforderung. Raspberry Pi Pico W, seit Juni 2023 auch mit Bluetooth-Unterstützung, ist solch eine Herausforderung. Dafür gibt es im Internet so gut wie keine Projekte mit guten Erläuterungen.
Verwendete Hardware
1 |
Raspberry Pi Pico W mit aktueller Firmware |
1 |
|
alt |
beliebiger Bausatz mit Chassis und Rädern/Motoren und |
1 |
Breadboard, Jumperkabel, Batteriekasten mit 4 AA-Batterien |
PC mit Thonny, Android Smartphone/Tablet |
|
Smartphone |
Rückblick
Nach der Lektüre der folgenden Quellen war ich in der Lage, im ersten Teil der Blog-Reihe die Anzeige des Temperatur- und Luftfeuchtigkeitssensors DHT20 mit Bluetooth LE auf mein Smartphone bzw. Tablet zu übertragen und im zweiten Teil ein Robot Car mit Bluetooth-Fernsteuerung mit einem zweiten Pico W zu realisieren.
https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html
https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf
https://docs.micropython.org/en/latest/library/bluetooth.html
https://github.com/micropython/micropython/tree/master/examples/bluetooth
Wie gern hätte ich Martin O’Hanlon von der Raspberry Pi Foundation überredet, seine Smartphone App BlueDot für Raspberry Pi mit Python (siehe Blog vom 6.Juni 2022) für den Pico W mit MicroPython zeitnah anzupassen, aber das war leider nicht möglich. Also musste ich wohl oder übel eine eigene App entwickeln, um mein Robot Car mit meinem Smartphone zu steuern. Aber wie schreibt man eine App?
Smartphone App
Blogger-Kollege Jürgen Grzesina hat das Vorgehen bereits ausführlich beschrieben und einen ESP32 über das heimische WLAN mit dem Smartphone verbunden (Link zum Blog) und später auch eine Pflanzenbewässerung realisiert (Link zum Block). Aber nach dem Öffnen der Internetseite zum MIT App Inventor war ich doch ratlos und in dem Dschungel der vielen Beispiele wollte ich mich nicht verirren.
Also den empfohlenen Klassiker „Become an App INVENTOR, The Official Guide ..” von Karen Lang und Selim Tezel gekauft und intensiv studiert, d.h. alle Beispiele und Übungen mitgemacht. Das Beispiel „Find the Gold“ in Kapitel 5 hat sofort meine Aufmerksamkeit erregt. Hier wird ein Ball durch ein Labyrinth durch Kippen des Smartphones zum Goldschatz gelenkt. Wäre der Accelerometer Sensor des Smartphone nicht als eine gute Steuerung meines Robot Cars geeignet? Ich entwickle in einem ersten Schritt eine App, in der die Bewegung des Balls auf dem Bildschirm jeweils in die Wertebereiche 0 bis 31 für die y- und x-Achse umgerechnet wird. Das waagerechte Smartphone bedeutet in dem von mir entwickelten Codesystem 16160=Stillstand, die ersten zwei Stellen für die y-Achse (vor und zurück), die nächsten zwei Stellen für die x-Achse (links/rechts). Auf diese Weise nutze ich bei der Datenübertragung den größtmöglichen Bereich für „Signed Integer“.
Dazu zwei Bildschirmfotos vom MIT App Inventor, einmal die Design-Ansicht und dann die Blöcke:
Und der Link meiner exportierten Datei ControllerBall.aia,
Leider gibt es in dem Buch keine Informationen zu Bluetooth LE. Dennoch hat mich das Buch weitergebracht und deshalb kann ich es weiterempfehlen. Den letzten fehlenden Teil an Information habe ich über eine Google Recherche und das YouTube Video von MoThunderz erhalten. Für Bluetooth LE muss man eine sogenannte „Extension“ herunterladen und in sein Projekt einbilden.
Gleich die oberste Zeile der Internetseite https://mit-cml.github.io/extensions/ liefert die gewünschte Erweiterung. Einfach BluetoothLE.aix herunterladen und dann in der Palette des App Inventors ganz links unten importieren.
Hier nun mein erster Versuch einer App zur Bluetooth-Steuerung des Robot Cars mit Raspberry Pi Pico W, zunächst die Bildschirmfotos und dann der Link zum Download.
Und hier die Links für BLE_controller_RobotCar_teil3.aia (Datei für MIT App Inventor) und BLE_controller_RobotCar_teil3.apk (Installationsdatei für Android Smartphone).
Das Programm für das Robot Car aus Teil 2 musste ich im Hauptteil an einer Stelle ändern, weil das Datenformat von der Smartphone App irgendwie den fünfstelligen Code weder als Signed Integer noch als String übertragen hat. Deshalb habe ich die eigentliche Motorsteuerung zunächst auskommentiert und nur den empfangenen Code am Bildschirm anzeigen lassen.
Tatsächlich wurde beim empfangenen Text, z.B. b'16160\x00', der eigentliche Code eingerahmt von weiteren Zeichen und konnte deshalb nicht direkt in eine Integerzahl umgewandelt werden. Die ersten zwei und die letzten vier Zeichen mussten entfernt werden. Das geschieht durch die Zeile
code = str(code)[2:-5] # necessary only for Smartphone App
Danach wird der String in eine Zahl umgewandelt, die dann in die einzelnen Fragmente für die Fahrtanweisungen zerlegt wird.
def on_rx(code): # code is what has been received
code = str(code)[2:-5] # necessary only for Smartphone App
code = int(code)
cy = int(code/1000) # digit 1 and 2
cx = int((code-1000*cy)/10) # digit 3 and 4
cb = code - 1000*cy - 10*cx # digit 5
print("cy = ",cy," cx = ",cx," cb = ",cb) # Print code fragments
motor(cy,cx) # call function motor with 2 parameters
Selbstverständlich wird das MicroPython-Beispielprogramm ble_advertising.py als Modul auf dem Pico W weiterhin benötigt. Ansonsten erhält man bei der Zeile „from ble_advertising import advertising_payload“ eine Fehlermeldung.
Hier der geringfügig gegenüber Teil 2 veränderte Code für das Robot Car zum Download.
Nach dem Testen am PC wird das Programm unter dem Namen main.py auf dem Pico W gespeichert, um die Autostart-Funktion beim Betrieb mit Batterien zu aktivieren. Dann muss der Pico W am Robot Car gestartet werden, um beim Scannen mit der App erkannt zu werden.
„There is always room for improvement” hieß es in meinem Berufsleben immer so schön. Beim Code für das Robot Car könnte man mit einer if-Abfrage zur Länge des Codes (len(code) >5) die o.g. neue Zeile optional einfügen, um beide Möglichkeiten der Steuerung (Smartphone oder zweiter Pico W wie im zweiten Teil der Blog-Reihe) zu ermöglichen. Und man kann bei der Steuerung bis zu drei Buttons mit den Wertigkeiten 1, 2 und 4 als Summand für die fünfte Stelle des Codes einfügen, um z.B. Blinklicht oder Sirene einzuschalten oder zwischen Fernsteuerung und einem autonomen Modus des Robot Cars hin- und her zuschalten.
Wenn das Video nicht angezeigt wird, überprüfen Sie bitte die Cookie-Einstellungen Ihres Browsers.
Viel Spaß bei Ihren Versuchen mit dem Raspberry Pi Pico W und Bluetooth, und probieren Sie mal den MIT App Inventor aus.
1 Kommentar
Franz W.
Hallo
hab mit dem MIT App Inventor auch schon einige Versuche gewagt. Jedoch mit den aktuellen Android Versionen ein Graus, da die Berechtigungen nicht passen. Schade.
Wann gibt es wieder Videos zu den Projekten?
Gruß F.W.