Im letzten Blogbeitrag wurde die bionische Spinne mit einem selbstgebauten Controller über das ESPNOW Protokoll gesteuert.
Dieses ermöglicht eine einfache Gerät-zu-Gerät-Verbindung, ohne dass eine diese mit einem Netzwerk verbunden sein müssen.
In diesem Blog verwenden wir das UDP-Internetprotokoll, um die Datenpakete zwischen den Mikrocontrollern auszutauschen. Hierfür müssen sich die Fernsteuerung und die Spinne im selben Netzwerk befinden.
Diese kleine Einschränkung hat aber auch den Vorteil, dass die Reichweite mit Repeatern und Accesspoints Ihres Heimnetzes meistens weitläufiger und flächendeckend ist und so eine Verbindung sogar über eine weitere Strecke als die Sichtweite hergestellt werden kann.
Hardware
Falls Sie den Controller bereits im Spider Controller Blog gebaut haben, können Sie den folgenden Teil überspringen und mit der Software fortfahren.
Als Joystick stehen zwei Ausführungen zur Verfügung, zum einen kann das KY-023 Modul verwendet werden. Da hier aber wieder einiges an Verkabelung notwendig wäre, empfiehlt sich das PS2 Joystick Shield, welches direkt auch auf einen Mikrocontroller mit Uno Layout gesteckt werden kann.
Da der Mikrocontroller mit dem Roboter kommunizieren muss, wird ein Mikrocontroller mit WiFi Funktionalität benötigt. Des Weiteren werden zwei ADC für je die X- und Y-Achse benötigt, deswegen muss hier ein ESP32 verwendet werden.
(Der ESP8266 verfügt nur über einen ADC-Eingang.)
Für die realisierung des Projekts benötigen Sie:
(optional) 9V Blockbatterie + Batterieclip
und natürlich ein Zusammengebautes Bionic Spider Robot Kit
Da die Analogeingänge der zwei Joystick Achsen an den GPIO 2 und 4 anliegen, welche mit dem ADC2 verbunden sind, können diese nicht gleichzeitig mit dem WLAN Modul verwendet werden. Die Anschlüsse IO 34 und IO35 (ADC1) liegen aber direkt neben diesen, dadurch kann ganz einfach die Funktionsfähigkeit über eine Drahtbrücke hergestellt werden.

Abbildung 1: Drahtbrücke zwischen den Anschlüssen
Verbinden Sie die Anschlüsse wie oben abgebildet.
Da am GPIO 2 die On-Board LED angeschlossen ist, muss hier der Pin entfernt werden, da die Verbindung ansonsten den Wert der X-Achsen Spannung beeinflussen würde.
Das gleiche gilt für den Pin D12, da dieser den Boot Vorgang stört und somit kein boot mit aufgestecktem Shield möglich wäre. An diesem Anschluss liegt der mittlere Taster des Joysticks, dieser ist dadurch nicht mehr benutzbar. Falls sie diesen trotzdem implementieren wollen, muss dieser wieder mit einem freien Anschluss verbunden werden.

Abbildung 2: Shield mit Modifikationen
Das Shield kann einfach auf den D1 R32 gesteckt werden. Achten Sie darauf, dass der kleine Schalter in der linken Ecke auf 3v3 gestellt ist, da der ESP32 sonst durch die zu hohe Spannung von 5V beschädigt werden könnte.
Software
Falls Sie das erste Mal einen ESP32/ESP8266 in der Arduino IDE programmieren, kopieren Sie folgende URLs in der Arduino IDE unter: File->Preferences->Additional boards manager URLs : https://dl.espressif.com/dl/package_esp32_index.json
http://arduino.esp8266.com/stable/package_esp8266com_index.json
und installieren Sie in der Boardverwaltung das ESP32 und ESP8266 Paket.
Für die Kommunikation werden die Datenpakete mittels UDP ausgetauscht. Bei diesem Kommunikationsprotokoll werden die Pakete einfach gesendet, ohne nachzuvollziehen, ob das Paket empfangen wurde.
Dadurch ist der Datenaustausch zwar sehr schnell, aber auch unsicher, da nicht festgestellt wird, ob der Empfänger die Daten tatsächlich empfängt.
Die Bibliothek für die UDP Kommunikation ist bereits in den umfangreichen Boardpaketen für den ESP8266 und ESP32 enthalten.
Im ESPnow Blog war für die Kommunikation die MAC-Adresse der Mikrocontroller notwendig.
Bei der Kommunikation via UDP wird nur noch die IP-Adresse des Empfängers benötigt. Diese wird bei der Verbindung mit dem Heimnetz(WLAN) automatisch über den DHCP-Server des Routers zugewiesen.
Die IP-Adresse kann entweder über die Benutzeroberfläche Ihres Routers ermittelt werden, wird aber auch zu Beginn des Empfänger-Programms am Seriellen Monitor angezeigt.
Code bionic Spider
Laden Sie den folgenden Code auf den ESP8266 des Bionic Spider Bausatzes unter Auswahl des richtigen Ports und Board in der Arduino IDE.
|
#include <ESP8266WiFi.h> |
Erklärung:
Zu Beginn werden die benötigten Bibliotheken eingebunden. Die Datei commands.h mit den Abläufen der Bewegungen finden Sie zusammen mit dem Code im Download am Ende des Abschnitts.
Im Anschluss werden die WLAN Zugangsdaten definiert und eine Variable für den empfangenen Befehl deklariert. Außerdem wird das Objekt für die UDP-Bibliothek erzeugt.
Im setup() wird der Mikrocontroller mit dem WLAN verbunden und die einzelnen Servomotoren initialisiert.
Im loop() werden die eingehenden Datenpakete vom Sender in den cmd String gespeichert. Dieser wird im Anschluss durch die if Abfragen ausgewertet und der entsprechende Befehl ausgeführt. Nach dem Ausführen des Befehls wird eine Bestätigung an den Controller zurückgesendet.
Den kompletten Code können Sie hier herunterladen.
Geben Sie im Programm Ihre WLAN Zugangsdaten anstelle der Platzhalter ein.
Nach dem Hochladen auf den Mikrocontroller öffnen Sie den Seriellen Monitor und notieren Sie die IP-Adresse, welche angezeigt wird.
Sollte diese am Anfang nicht angezeigt werden, können Sie die zwei Zeilen am Anfang im loop() für die Ausgabe nutzen.
Code Controller
|
#include <WiFi.h> |
Erklärung:
Zu Beginn werden die benötigten Bibliotheken eingebunden, Makros für die Pins der verschiedenen Buttons erstellt und die WLAN Zugangsdaten und die IP-Adresse des Empfängers deklariert. Im Anschluss werden noch die globalen Variablen für die Kalibrierung der Joystick Achsen, den zu sendenden Befehl und für die Umsetzung der Bestätigungsnachricht deklariert.
Im setup() wird der Mikrocontroller mit dem WLAN verbunden, die Joystickachsen kalibriert und die digital-Eingänge definiert.
Im loop() wird als erstes die Joystick-Position als Analogwert ausgelesen und in entsprechenden Variablen gespeichert.
Danach folgt eine Überprüfung, durch welche der Sendestatus nach einer Zeitüberschreitung von 10 Sekunden zurückgesetzt wird.
Der Auswertungsalgorithmus für die Bewegungsrichtung überprüft, ob die Werte der Achsen einen Grenzwert von 50 überschreiten, dies ist notwendig, da sowohl die Potentiometer, über welche die Position der Achsen ausgelesen wird als auch die Analog-Digital-Wandler (ADC) sich auch in der Nullposition minimal um den Nullwert bewegen (sog. driften).
Befindet sich eine Achse über dem Schwellwert, so werden die Werte des Betrags der beiden Achsen miteinander verglichen. So kann die Achse ermittelt werden, die am stärksten bewegt wurde und somit richtungsweisend ist.
Des Weiteren werden noch die Digitaleingänge ausgelesen und beim Drücken eines Tasters der entsprechende Befehl (Tastenbezeichnung) in der Variable msg gespeichert.
Zum Schluss wird der Befehl als UDP Paket an den Roboter gesendet.
Wenn der Empfänger den Befehl ausgeführt hat, sendet dieser eine Bestätigung an den Sender zurück. Wird diese empfangen, wird die Variable status wieder auf true gesetzt, wodurch ein erneutes senden möglich ist.
Das gesamte Programm können Sie hier herunterladen.
Laden Sie dieses mit den korrekten WLAN Zugangsdaten und IP-Adresse auf den ESP32 D1 R32 unter Auswahl des richtigen Ports hoch.
Fazit
In diesem Blogbeitrag haben Sie gelernt, wie der bionic Spider Roboter mittels des UDP Kommunikationsprotokoll angesteuert werden kann.
Natürlich legt dieses Projekt nur die Grundlagen für Ihre eigenen Erweiterungen und Modifikationen. Zum Beispiel können Sie, um nicht auf einen externen Router angewiesen zu sein, einen Mikrocontroller im AP-Modus betreiben.
Somit haben Sie neben dem ESP eigenen ESPnow Kommunikationsprotokoll mit UDP auch ein sehr weit verbreitetes Protokoll kennengelernt, welches in vielen Zeitkritischen Anwendung verwendet wird.
Viel Spaß beim Nachbauen :)






