Mowersteuerung mit PS4-Controller

Zwer2k

Member
Hallo Zusammen,

hab mal Tims ardumower-modem soweit erweitert, dass ein PS4-Controller damit gekoppelt und der Mower mit dem Controller gesteuert werden kann.
Die Tasten sind wie folgt zugeordnet:
  • linker Joystick -> schnelle Bewegungen (von 0 bis volle Geschwindigkeit)
  • rechter Joystick -> langsame Bewegungen (von 0 bis ca. halbe Geschwindigkeit)
  • Kreuz + R2 -> lineare Bewegungen + Drehung auf der Stelle (R2 ist die Gaspedale),
  • Dreieck -> automatisches Mähen starten,
  • Rechteck -> automatisches Mähen stoppen,
  • Kreis -> Mähmotor ein/aus,
  • Kreuz -> nächsten Mähpunkt überspringen,
  • L1 -> Mähgeschwindigkeit verringern,
  • R1 -> Mähgeschwindigkeit erhöhen
Die Steuerung funktioniert ziemlich gut und die Einrichtung ist aus meiner Sicht auch nicht zu kompliziert.
Der erweiterte Code ist zur zeit in meinem Fork enthalten https://github.com/Zwer2k/ardumower-modem/tree/ps4-controller-support ein Pull-Request ist bereits gestartet.

Die Einstellungen erfolgen in der Web-UI des Modems
1657923915578.png

Bluetooth-Steuerung über die Sunray-App muss leider deaktiviert sein, da PS4 auch Bluetooth verwendet. Per WiFi kann aber die App weiterhin verwendet werden.
Die BT MAC-Adresse von der PS4 kann mit dem sixaxispairer Tool aus dem Controller ausgelesen bzw. die Adresse von eurem ESP32 in den Controller geschrieben werden. Es gibt auch vorkompilierte Versionen im Netz.

modem_install.ino Sketch habe ich nicht angepasst, da es nur ein Fork zu Tims Repository ist. Wenn ihr den verwenden wollt, müsst ihr zusätzlich zu den WLAN-Einstellungen folgende Zeile anpassen:
Code:
#define GITHUB_REPO_URL     "https://github.com/timotto/ardumower-modem"
durch folgende ersetzen
Code:
#define GITHUB_REPO_URL     "https://github.com/Zwer2k/ardumower-modem"

Viel Spaß beim Ausprobieren.

Noch ein Hinweis: Es ist sehr wahrscheinlich, dass die nachgebauten Kontroller sich nicht verbinden lassen, dazu gibt es mehrere Issues im Github von der verwendeten Bibliothek. Bitte eure Erfahrungen dazu hier posten.
 
Zuletzt bearbeitet:
Ich habe dein Sketch ausprobiert. Da scheint noch ein Fehler in der kompilierten Version mit der Benutzeroberfläche zu sein. Ich bekomme im seriellen Monitor folgende Fehlermeldung beim booten:

Code:
20:34:23.246 -> 0.089 7 Settings::unmarshal::missing(ps4controller)
20:34:23.246 -> 0.090 7 Settings::begin::unmarshal-error

Hat sich erledigt. Ich war nicht schlau genug die Anleitung richtig zu lesen. Jetzt habe ich es hinbekommen.
 
Zuletzt bearbeitet:
Ich nochmal.

Ich habe gestern deine Version des ardumowerModems in meine Version integriert und zum Laufen bekommen. Ich habe es aber leider nicht geschafft den PS4 Controller zu koppeln. Da ich selber keine PS4 besitze und mir den Controller zum Testen ausgeliehen habe fehlt mir die Erfahrung.

Ich habe es geschafft mit dem sixaxispairer tool in der Version 0.3.1 die MAC Adresse auszulesen. Das setzen der Adresse ist nicht möglich. Gibt da auch ein issue in dem repository. Die ausgelesene Adresse habe ich im ardumowerModem eingetragen (GUI) und den Controller eingeschaltet. Dieser blinkt aber nur weiß.

Mache ich was falsch?

Gruß
 
Hallo Felix,

ich vermute, dass du Arduino-IDE oder TaskFile "compile" zum Kompilieren verwendet hast, hier ist PS4-Kontroller-Unterstütz nicht aktiviert (bzw. nicht vollständig, nur die Einstellungen in der Weboberfläche sind sichtbar). Es wird wird der build_flag ENABLE_PS4_CONTROLLER zum Kompilieren benötigt, was wiederum espressif32 >=5.0.0, von mir Gepatchte Version von ESPAsyncWebServer und PS4-esp32 Pakete benötigt. Alle Abhängigkeiten und den Build-Flag habe ich in der platformio.ini hinterlegt, bzw. in dem Task "compile-pio" (ich hätte es compile-with-ps4 nennen sollen). Du benötigst Platform-IO zum Kompilieren, einen kleinen (vermutlich zu klein) Hinweis habe ich in README.md.
Einfacher ist in Github bereitgestellte .bin oder modem_install Sketch zu verwenden.

Welchen Issue meinst du, hab keinen gesehen?

Gruß
Jurij
 
Alles gut. Habe es jetzt hinbekommen. Konnte deine Steuerung schon ausprobieren und sie ist besser als erwartet. Sehr gute Arbeit. Ich musste die ganze Zeit beim manuell steuern dämlich grinsen.
 
Ich musste die ganze Zeit beim manuell steuern dämlich grinsen.
Ging mir beim ersten ausprobieren genau so :ROFLMAO:. Ich glaube bei der Rückwärtsfahrt ist links und rechts vertauscht, kommt von der Sunray-Firmware, Korrektur ist in meinem Sunray-Pull-Request enthalten, sollte dann auch in der App besser laufen.
 
Ich habe gestern deine Version des ardumowerModems in meine Version integriert und zum Laufen bekommen.

Ich würde deine Version sehr gerne ausprobieren, da auch ich den iobroker mqtt verwende.
Kannst du bitte auch ein fertiges .bin unter ./releases zur Verfügung stellen? Ich hab Probleme beim kompilieren.
 
Hallo @Zwer2k,

ich habe heute Deine ardumower-modem.bin mit der PS4-Controllerunterstützung per modem_install sketch installiert.
Die Verbindung als Client im Netzwerk mit dem Ardumower funktioniert. Was aber bei mir auf der Konfigurationsseite nicht angezeigt wird, ist das Menü für den PS2 Controller (so wie in Deinem 1. Post). Bei mir sieht das ganze so aus:
1658591367715.png
Den Serial Monitor Output habe ich hier angehängt

Code:
17:54:40.124 -> ..............
17:54:46.637 -> Looking for latest release... v1.2.0-build.1
17:54:49.509 -> Latest release firmware download URL: https://github.com/Zwer2k/ardumower-modem/releases/download/v1.2.0-build.1/ardumower-modem.bin
17:54:49.554 -> Downloading latest release. The ESP32 will restart when complete.
17:55:33.228 -> ets Jul 29 2019 12:21:46
17:55:33.228 ->
17:55:33.228 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
17:55:33.228 -> configsip: 0, SPIWP:0xee
17:55:33.228 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
17:55:33.228 -> mode:DIO, clock div:1
17:55:33.228 -> load:0x3fff0018,len:4
17:55:33.228 -> load:0x3fff001c,len:1216
17:55:33.228 -> ho 0 tail 12 room 4
17:55:33.228 -> load:0x40078000,len:10944
17:55:33.228 -> load:0x40080400,len:6388
17:55:33.228 -> entry 0x400806b4
17:55:33.856 -> 0.090 15 Settings::begin::success
17:55:35.430 -> E (1647) system_api: Base MAC must be a unicast MAC
17:55:38.975 -> 5.230 15 WiFi::Adapter::STA::IP(192.168.1.110)

Hast Du eine Vermutung, womit das zusammenhängt, bzw. was ich falsch mache?
Ich habe die Seite auch mit unterschiedlichen Browsern (Edge, Firefox und Chrome) geöffnet, mit dem gleichen Ergebnis.
In der Arduino IDE (V1.8.19) habe ich im Boardverwalter die esp32 in Version 1.0.6 von Espressif Systems installiert.

Gruß Sven
 
Hallo Sven,
PS4-Einstellungen werden nur angezeigt, wenn Bluetooth deaktiviert ist, beides zusammen funktioniert leider nicht.

Gruß
Jurij
 
Hallo @Zwer2k,
habe meinen Fehler gefunden. Wer lesen kann ist klar im Vorteil….
Bluetooth-Steuerung über die Sunray-App muss leider deaktiviert sein, da PS4 auch Bluetooth verwendet.
Nachdem ich den Schalter Bluetooth auf Off gestellt habe, wird dann auch das Menü sichtbar.

Vielen Dank für diese tolle Arbeit.

Gruß Sven
 
Ich habe es geschafft mit dem sixaxispairer tool in der Version 0.3.1 die MAC Adresse auszulesen. Das setzen der Adresse ist nicht möglich. Gibt da auch ein issue in dem repository. Die ausgelesene Adresse habe ich im ardumowerModem eingetragen (GUI) und den Controller eingeschaltet. Dieser blinkt aber nur weiß.
Alles gut. Habe es jetzt hinbekommen.
Hallo @felixganzer,
ich habe ebenfalls keine PS4 und mir einen Controller besorgt. Habe die Adresse des Controllers ausgelesen und in der GUI eingetragen. Änderungen gespeichert, den Mäher und ESP32 neu gestartet, aber auch bei mir blinkt der Controller nur weiß. Ich habe auch die Einstellung im Modem versucht, mit der Adresse des ESP32 und diese per Tool im Controller eingetragen, Änderungen gespeichert, Neugestartet und leider das gleiche Verhalten.
Wie hast Du die Verbindung letzten Endes hinbekommen?

Gruß Sven
 
Hallo Sven,

werden die von dir durchgeführte Einstellungen in der Web-Oberfläche gespeichert? Siehst du sie noch nach einem Neustart von dem Modem? Ich glaube das war Problem von Felix, die Einstellungen wurden nicht gespeichert, sein .bin war nicht "vollständig".
Wenn das Speichern funktioniert, dann versuch mal mit "Delete all Bluetooth Pairings". Wenn auch das nichts hilft, mal Erase-Flash bei dem ESP32 durchzuführen, anschließend musst du den Modem neu flashen.
Ist dein Controller eine original PS4-Controller, hab was in den Issues von der verwendeten Bibliothek gelesen, dass es Probleme mit nicht original Kontrollern geben kann.

Edit: Noch eine Frage. War es ein gebrauchter Kontroller? Die ausgelesene MAC-Adresse ist normalerweise die MAC-Adresse von der PS4, wenn der neu war, sollte keine MAC-Adresse auslesbar sein.
 
Zuletzt bearbeitet:
Hallo @Zwer2k,
die Einstellungen werden in der Web-Oberfläche gespeichert und sind auch nach einem Neustart vorhanden.
Ein Erase-Flash habe ich mit dem "Flash Download Tools" von der Espressif Downloadseite durchgeführt. (als chiptype: ESP32 und workMode: develop ausgewählt, dann den Com-Port ausgewählt und auf ERASE geklickt). Erneut modem_install sketch hochgeladen. Nach der Installation kommt folgender Consolenoutput:
Code:
07:16:56.600 -> .............
07:17:02.625 -> Looking for latest release... v1.2.0-build.1
07:17:05.813 -> Latest release firmware download URL: https://github.com/Zwer2k/ardumower-modem/releases/download/v1.2.0-build.1/ardumower-modem.bin
07:17:05.813 -> Downloading latest release. The ESP32 will restart when complete.
07:17:49.770 -> ets Jul 29 2019 12:21:46
07:17:49.770 ->
07:17:49.770 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
07:17:49.770 -> configsip: 0, SPIWP:0xee
07:17:49.770 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
07:17:49.770 -> mode:DIO, clock div:1
07:17:49.770 -> load:0x3fff0018,len:4
07:17:49.770 -> load:0x3fff001c,len:1216
07:17:49.770 -> ho 0 tail 12 room 4
07:17:49.815 -> load:0x40078000,len:10944
07:17:49.815 -> load:0x40080400,len:6388
07:17:49.815 -> entry 0x400806b4
07:17:50.398 -> E (44) SPIFFS: mount failed, -10025
07:17:54.491 -> 4.149 7 Settings::begin::file-open-error
07:17:55.569 -> 5.235 15 WiFi::Adapter::AP::IP(192.168.4.1)
07:17:55.839 -> E (5513) system_api: Base MAC must be a unicast MAC
Die Meldung, dass das Settings-File nicht geöffnet werden kann, denke ich ist normal, da noch kein File vorhanden ist. Wenn ich mich an den AP anmelde und die Einstellungen vornehme werden diese gespeichert und sind nach einem Neustart wieder vorhanden.

Zum Controller: Es war ein noch original verpackter Controller, der einen originalen Eindruck macht. Falls es ein Replikat ist, dann ein sehr gut gemachtes.
Mit dem SixAxis Pair Tool konnte ich bei der ersten Verbindung sehen, dass noch keine MAC-Adresse hinterlegt war. Ich habe dann den Kontroller einmal versuchshalber mit meinem I-Phone gekoppelt. Darauf hin wurde die MAC-Adresse des BT-Moduls vom I-Phone in dem Tool angezeigt. Diese Adresse habe ich dann in der Web-Oberfläche eingetragen und die Einstellungen gespeichert. Den ESP32 neugestartet, die Bluetooth-Verbindung am I-Phone deaktiviert, damit der Controller dieses nicht findet. Nach dem Neustart in der Web-Oberfläche kontrolliert und die zuvor eingetragene Adresse war erhalten geblieben. Dann den Controller per PS-Taste eingeschaltet. Der Controller blinkt nur weiß und nach kurzer Zeit dar nicht mehr. (Controller ist geladen).
Ich habe auch die Einstellung mit der Mac-Adresse des ESP32-Moduls getestet. Die Adresse, die mir in der Web-Oberfläche angezeigt wird, habe ich mit dem SixAxis Pair Tool in den Controller eingetragen. Nach erneuten Neustart und Kontrolle war das Ergebnis das gleiche. Keine Verbindung möglich. Der Controller lässt sich ohne Probleme mit anderen Geräten (I-Phone, PC) koppeln.
Oder muss ich an dem Controller, nachdem die dort hinterlegte MAC-Adresse über die Web-Oberfläche eingegeben, gespeichert und der ESP32 neu gestartet wurde noch etwas an dem Controller oder Mäher machen, damit ESP32 und Controller sich miteinander verbinden (außer den Mäher über den Start-Taster einzuschalten und am Controller die PS-Taste zu drücken)?

Ich habe dann mal die Bluetooth-Verbindung in der Web-Oberfläche aktiviert ohne PIN Code, da ich in der config.h folgendes eingestellt habe:
C++:
//#define ENABLE_PASS   1        // comment out to disable password authentication
#define PASS          123456   // choose password for WiFi/BLE communication (NOTE: has to match the connection password in the App!)
Also kein Passwort erforderlich. Auch den Schalter für "ArduMower Encryption" habe ich auf Off gestellt.

Nach Neustart des ESP32 und erneuter Kontrolle der Einstellungen, kann ich aber auch in der Sunray-App unter Connect kein Bluetooth Gerät finden, welches auf den Ardumower schließen lässt. Dieses müsste doch in der Standardkonfiguration mit "Ardumower" angezeigt werden, oder?
Um auszuschließen, dass das Bluetooth-Modul defekt ist, habe ich dann den ESP32 wieder mit der Version aus Sunray bespielt. W-LAN und Bluetooth Verbindung in der Sunray-App funktionieren wie gewohnt.

Ich kann höchstens noch versuchen, mir einen originalen Controller auszuleihen, der an einer PS4 angemeldet ist.

Fällt Dir noch etwas ein, was ich einstellen / testen kann?

Bei dem ESP32-Modul handelt es sich um das ESP32-DevKitC-32UE WROOM aus dem marotronics shop.

Gruß Sven
 
Hallo Sven,

Oder muss ich an dem Controller, nachdem die dort hinterlegte MAC-Adresse über die Web-Oberfläche eingegeben, gespeichert und der ESP32 neu gestartet wurde noch etwas an dem Controller oder Mäher machen, damit ESP32 und Controller sich miteinander verbinden (außer den Mäher über den Start-Taster einzuschalten und am Controller die PS-Taste zu drücken)?
Das ist eigentlich alles. Nach dem Drücken per PS-Taste sollte sich der Kontroller nach paar mal Blinken verbinden.
Bei mir kommt die Verbindung nur dann nicht zustande, wenn zuvor mal der zweite Kontroller mit dem ESP verbunden war, dann drücke ich die Taste "Delete all Bluetooth Pairings" und es funktioniert wieder. Hab jetzt testweise den Kontroller mit meinem Notebook verbunden, danach die MAC-Adresse mit dem SixaxisPairTool ausgelesen und in die Web-Oberfläche eingetragen, auch da hat die Verbindung anschließend funktioniert.

Was du noch ausprobieren könntest:
- "Delete all Bluetooth Pairings"hast du bestimmt schon gemacht
- Den Kontroller einmal mit einer PS4 koppeln. Keine Ahnung ob das erforderlich ist.
- Den Modem auf einen anderen ESP32 flashen und ausprobieren (der ESP muss nicht an einem Ardumower angeschlossen sein)
- oder wie du sagst, mal anderen Kontroller ausleihen

Ich verwende einen ESP32-S in meinem Ardumower, selbst auf Platine gelötet. Getestet habe ich es aber auch schon mit einem ESP-WROMOM-32 Dev.-Kit (nicht von marotronics.de).

Edit: Hast du bestimmt schon gemerkt: Die ESP32-MAC-Adresse wird in der Web-Oberfläche manchmal erst dann angezeigt, wenn die Option "Use ESP32 BT MAC address" ausgewählt, Einstellungen gespeichert und die Oberfläche neu geladen wurde.
 
Zuletzt bearbeitet:
Hallo @Zwer2k,
Danke für die Unterstützung, aber bisher hat das Koppeln leider noch nicht geklappt.
Da das ganze bei Dir funktioniert, habe ich noch eine Frage zur Bluetooth Verbindung. Wenn Du bei Dir Bluetooth in der Web-Oberfläche auf On stellst, taucht das Modul dann in der Sunray unter Connect auf? Bei mir finde ich das Modul nicht.
Ich würde jetzt zur Sicherheit ein neues ESP Modul bestellen. Hast Du ein funktionstüchtiges über den Amazonas bezogen und kannst eins empfehlen?

Die W-LAN Verbindung über das Ardumower-Modem sonst läuft klasse. Schneller Karten Upload, gute Steuerung per App-Joystick ohne Aussetzer.
Einzig die Http requests per NodeRed funktionieren anscheinend nicht mehr. Weißt Du, womit das zusammen hängen kann? Ich habe noch nicht angefangen das näher zu analysieren.

Gruß Sven
 
Hallo Sven,

du kannst eventuell noch die Beispiele von der ESP32-PS4-Bibliothek ausprobieren, ob damit die Kopplung klappt.

Da das ganze bei Dir funktioniert, habe ich noch eine Frage zur Bluetooth Verbindung. Wenn Du bei Dir Bluetooth in der Web-Oberfläche auf On stellst, taucht das Modul dann in der Sunray unter Connect auf? Bei mir finde ich das Modul nicht.
Du meinst für die Steuerung des Mowers mit der App per Bluetooth? Ja das geht, hat aber weile gebraucht, musste die Android-App erst richtig beenden und den Mower habe ich auch neu gestartet, bei mir war zuvor zusätzlich Pairing aktiv, hab daher Ardumower in System-Bluetootheinstellungen löschen müssen, irgend wann ging es dann.

Hast du schon mal versucht den Kontroller mit einer PS4 zu Koppeln? Ob das eventuell etwas bringt.
Bei mir ist dieser ESP32 hier im Mower verbaut, und woher ich mein Dev.-Kit habe bin ich mir nicht sicher, ich glaube aber kaum, dass es an dem ESP liegt, ich glaube eher, dass es noch Probleme mit der Bibliothek gibt.

Die W-LAN Verbindung über das Ardumower-Modem sonst läuft klasse. Schneller Karten Upload, gute Steuerung per App-Joystick ohne Aussetzer.
Einzig die Http requests per NodeRed funktionieren anscheinend nicht mehr. Weißt Du, womit das zusammen hängen kann? Ich habe noch nicht angefangen das näher zu analysieren.
Die verbesserte WLAN-Verbindung ist meines Wissens Verdienst von Tim. Da macht es jetzt nichts mehr aus, dass Bluetooth von dem Kontroller beansprucht wird :).
Wie genau verwendest du NodeRed in Verbindung mit dem Modem?
 
Zuletzt bearbeitet:
Einzig die Http requests per NodeRed funktionieren anscheinend nicht mehr. Weißt Du, womit das zusammen hängen kann? Ich habe noch nicht angefangen das näher zu analysieren.
Das habe ich auch festgestellt. Da hat timotto auch was nebenbei kurz erwähnt, von wegen die Sunray App schickt einen falschen content type und dann pass es nicht mit der Check Summe.
Ich hatte aus einer anderen Ecke heraus versucht die Post Requests zu schicken, die unbeantwortet geblieben sind.
Original Esp32 Software -> Post request ohne Erdolg
Timotto Esp32 Software -> Post request ok

Die Lösung war einen Leerzeichen an einen AT Content dranzuhängen damit die Länge der Nachricht mit der Sunray App wieder übereinstimmt, dann hat es wieder geklappt. Ich vermute bei dir wird es ähnlich sein
 
Hallo @Zwer2k,
mein Nachbar hat eine PS4 mit original Controllern. Wir haben daraufhin zum testen einmal die Controller getauscht. Ich habe aus seinem die MAC-Adresse ausgelesen und in der Weg-Oberfläche eingetragen und der Controller konnte sich auf anhieb mit dem Mäher verbinden.
Was soll ich sagen, ich glaube ich hatte genau so ein grinsen im Gesicht wie felixganzer. Danke dafür! Der Mäher lässt sich damit wirklich gut steuern und die Reichweite ist auch um einiges besser, als bei dem PS2-Remote Controller, den ich vorher verwendet habe.
Mein Controller funktionierte an seine Playstation ebenfalls reibungslos. Ich habe daraufhin versucht, meinen (der ja jetzt die gleiche MAC-Adresse wie der original Controller meines Nachbarn hatte) mit dem Mäher zu koppeln, was wieder nicht funktionierte.
Jetzt habe ich einen alten, aber funktionstüchtigen original Controller und mein Nachbar freut sich über einen neuen aber vermutlich nicht originalen Controller für seine "reserve PS4".
Noch mals vielen Dank für die Unterstützung.

Gruß Sven
 
Finde ich super, dass es doch geklappt hat.
Hast du "Delete all Bluetooth Pairings" gedrückt bevor du deinen Kontroller wieder versucht hast? Denn das ist zwingend erforderlich, wenn zuvor ein anderer mit der selben PS4-MAC gekoppelt war.
 
Zuletzt bearbeitet:
Oben