MowMate – die neue ESP32-UI für den Ardumower

Zwer2k

Member
Ich möchte hier ein Projekt vorstellen, das aus dem bisherigen ardumower-modem weiterentwickelt wurde: MowMate

MowMate ist inzwischen deutlich mehr als nur ein Modem. Ziel des Projekts ist es, eine eigenständige, direkt auf dem ESP32 laufende Benutzeroberfläche für den Ardumower bereitzustellen – ohne dass dafür zusätzliche Apps oder Tools nötig sind.

Was MowMate kann​

- vollständige Web-Oberfläche direkt vom ESP32-S3
- Responsive, lässt sich in Desktop-Browser auf mobilen Endgeräten verwenden
- Karteneditor mit Perimeter, Ausschlüssen und Dockpoints
- Routenberechnung direkt auf dem ESP32
- Import/Export von Karten
- Upload zu Sunray
- Rower steuerung per Web-UI und Bluetooth-Joysicks
- weiterhin kompatibel zur Ardumower-App von Grauonline und zu CaSSAndRA
- Dashboards für Status, GPS, Live-Map, Motor-Test und Fernsteuerung
- Umfangreiche Logging-Möglichkeiten
- MQTT, Home Assistant Discovery, Prometheus und OTA


1788477449494.png 1788477513513.png


1788477896032.png 1788477976177.png
1788478215209.png
1788478286224.png


Für GPS-Dashboards muss die Sunray-Firmware etwas angepasst werden. Bei Bedarf werde ich die Infos nachliefern

Hintergrund​

Das Projekt basiert auf dem ursprünglichen **ardumower-modem** von Tim Otto und wurde in den letzten Monaten deutlich erweitert. Weil es inzwischen nicht mehr nur eine Modem-Funktion ist, gibt es jetzt unter dem Namen **MowMate** ein eigenes Repository: ardumower-mowmate

Die bisherige Projektgeschichte bleibt dabei erhalten.

Ich habe mir selbstverständlich etwas von fleißigen Copilot helfen lassen. Der Rasen wird davon zwar nicht grüner, geht aber schneller beim Programmieren 😅.
Ich freue mich über Feedback, Ideen, Tests und natürlich auch über weitere Beiträge zum Projekt.
 
Hi @Zwer2k,

super Arbeit! Der Release kommt ja wie gerufen, heute kommt mein ESP32-S3 ;) Ich würde es gerne dann direkt mal testen, deswegen bin ich natürlich auch auf die Sunray-Anpassungen gespannt.
Nur bei dem Pinout Bild bin ich etwas verwirrt. Ich bin aktuell auf dem PCB1.3 + Due unterwegs und OTA für Sunray brauch ich erstmal nicht.
Welche Verbindungen vom ESP32-S3 zum Due sind dann nötig?

Gruß keeev
 
Hi @keeev,

bin gespannt ob es bei dir funktionier.

Noch ein Hinweis vorab:
am besten den ESP32-S3 mit 16 MB flash und 8 MB PSRAM nehmen, ist meines Wissens der größte. Kleinere habe ich nicht getestet.


Ich nutze keine Ardumower PCB sonder ein umgebauten MATRIX MOW800 mit STM32, daher hoffe ich das folgede Zusammenstellung passt.

Verdrahtung Ardumower PCB 1.3 → ESP32-S3-DevKitC-1​

Router / AT-Kommunikation​

P44 (WLAN) Stecker

PCB 1.3ESP32-S3
Pin 2GND
Pin 3 (TX1)GPIO17 (U1_TXD)
Pin 4 (RX1)GPIO18 (U1_RXD)

Hier nicht kreuzen: TX→TX, RX→RX.
Wichtig!!! Jumper JP11 soll auf 3,3V . 5V an einen GPIO können den ESP32 beschädigen.

Es kann sein, dass du Sunray config.h anpassen musst. BLE auf Serial1
#ifdef _SAM3XA_ // Arduino Due
#define WIFI Serial1
#define ROBOT Serial1
#define BLE Serial2 Serial1
#define GPS Serial3
//#define GPS Serial // only use this for .ubx logs (sendgps.py)
#elif __SAMD51__ // Adafruit Grand Central M4

Terminal (optional um Sunray Logs in MowMate sehen zu können)​

P27 (PX0/RX0) Stecker
PCB 1.3ESP32-S3
Pin 2GND
Pin 4 (TX0)GPIO15 (TERMINAL_RX)

Nur TX da nur gelesen werden soll, reicht eine Signalleitung.
Wenn es bei Firmware-Upload per USB Probleme geben sollte, liegt es an dieser Verbindung (sehr unwarscheinich).

Reset (optional um Sunray Reset aus MowMate zu trigger)​

P23 (MP-R)

PCB 1.3ESP32-S3Funktion
Pin 11 (Reset)GPIO7 (NRST)Reset

Wenn Arduino Due nicht mehr bootetliegt, es an dieser Verbindung.

Die Spannungsversorgung von dem ESP32 am besten über 5V Pin an 5V von PCB1.3, damit der eingebaute Spannungswandler des ESP verwendet wird. An 3,3V kann es schnell zu Instabilität führen, wenn die Versorgung nicht stabil genug ist.


Sunray Patch werde ich noch nachliefern, ist aber eigentlich nur für GPS-Dashboard und GoTo Funktion erforderlich.
 
Zuletzt bearbeitet:
Hi Zwer2k,

ich habe den ESP32-S3 mit 16 MB flash und 8 MB PSRAM ;-)

Erster Test leider weniger erfolgreich, die Verbindung P27 verhindert schon mal das FW Update über USB (COM-Port wird erst erkannt nachdem P27 abgezogen wurde).
Daten bekomm ich aktuell auch noch nicht nach der Anpassung BLE auf Serial1 in Sunray.

Und die NTP-synchro funktioniert bei mir auch nicht.

1788611297920.png

Gruß
keeev
 
Immerhin sihst du die UI 😅.

Hattest du zuvor schon einen ESP32 am PCB angeschlossen gehabt? Wenn ja: wie war da die PIN-Belegung?
WIFI und ROBOT auch als Serial1 konfiguriert?
Konntest du etwas unter Terminal sehen als P27 angeschlossen war?

Du kannst auch diese Variante testen:
Laut der Anleitung soll ESP32 an BLE-Pins ESP32 an PCB1.3
Dann muss aber BLE wieder auf Serial2 gestellt werden.

Hier entsprechend angepasstes Bild:
1788613769312.png



NTP-Einstellungen passen?
Keine Firewall die die Verbindung blockiert?

1788614035446.png
 
Die UI sieht auch gut aus - nochmal an Lob an dich ;)

Ich hatte davor auch einen Wemos D1 Mini32 am WLAN Port. Der Verbindung exakt wie gerade, TX ESP (GPIO17) auf RX Due (RX1) und vice versa, aber mit AzuritBer.
Hatte damals auch Serial2 und Serial1 getauscht, das hat geklappt.

Aktuelle config:
#ifdef __SAM3X8E__ // Arduino Due
#define WIFI Serial1
#define ROBOT Serial1
#define BLE Serial1
#define GPS Serial3

Ok, Problem 1 gelöst. Hatte das Encryption-PW nicht angepasst ^^ Jetzt seh ich zumindest schon mal die Spannung vom Mower.

1788616729182.png

NTP-Sync failed leider immer noch, FW und Pihole ist bereits disabled. Dürfe jedenfalls nicht blockiert sein:

1788616940367.png

Die Frage die ich mir aktuell noch stelle, wann sollte denn im Terminal etwas angezeigt werden? Oder kommt da regelmäßig was vom Due geliefert?
Jedenfalls geht der Pin vom PCB P27 RX (TX0 auf DUE) auf ESP32 GPIO15, das sollte ja passen nach der Beschreibung.

Gruß
keeev
 

Anhänge

  • 1788616713536.png
    1788616713536.png
    15,2 KB · Aufrufe: 1
  • 1788616946065.png
    1788616946065.png
    8,4 KB · Aufrufe: 1
Das ist schon mal sehr gut. Die Haupt Funktionalität sollte damit gegeben sein.
Jetzt solltest du eigentlich den Mower steuern können, Karten aufzeichnen oder von Cassandra/Ardumower-Web-App übertragen und zwischenspeichern können.

NTP ist eigentlich nur für Zeit-gesteuertes Mähen relevant. Komisch, dass es nicht funktioniert. Muss ich eventuell noch paar Log-Ausgaben einbauen.

Im Terminal sieht man alle Ausgaben die im Arduino-Terminal Fenster mit angeschlossenem USB auch sehen würdest. Wenn TX und RX angeschlossen ist, dann können auch AT Befehle an den Mäher geschickt werden. Motor Plot kann dann unter Tests auch verwendet werden.
Dazu müsste aber wie es aussieht noch Sunray config.h angepasst werden. CONSOLE muss Serial an Stelle von SerialUSB umgestellt werden.
#if defined (__arm__) && defined (__SAM3X8E__) // Arduino Due compatible
#define BOARD "Arduino Due"
#define CONSOLE SerialUSB Serial // Arduino Due: do not change (used for Due native USB serial console)
#elif __SAMD51__

Da du aber sagst, dass Verbindung mit P27 den Upload per USB blockiert, wäre eventuell besser einen anderen Seriellen Port dafür zu verwenden. Der für Buetooth BLE vorgesehene Port sollte ja frei sein, wenn du auf P44 (WLAN) geblieben bist.
Dann ESP Pin16 auf TX2 und ESP Pin15 auf RX2 legen
und in config.h entsprechend anpassen
#define CONSOLE SerialUSB Serial2

1788641155109.png

In beiden Fällen würdest du keine Ausgaben mehr am USB-Port bekommen.
 
Schande über mein Haupt...

#define CONSOLE SerialUSB hab ich glatt übersehen, jetzt funktionierts natürlich auch ;-)

Edit: NTP funktioniert jetzt auch, hatte da intern einen IP-Konflikt....
 
Zuletzt bearbeitet:
Bin gespannt über deine Erfahrungsberichte :)
Ist die Verdrahtung wie von mir am Anfang vorgeschlagen? Als sowie hier auf dem Bild oder musstest du noch etwas anpassen?

Habe heute neue Version veröffentlicht.
Zwei wichtige Änderungen:
- Ich konnte Websocket-Stabilität zwischen dem ESP und UI noch einmal verbessern
- Es sind einige MQTT Werte dazu gekommen, die jetzt auch sauber im Homeassistant angezeigt werden. Der Rover kann jetzt direkt aus HA gesteuert werden

1788905129476.png
1788905209931.png
 
Hi,
ja - habe die Verdrahtung wie vorgeschlagen ausgeführt.
Nur zusätzlich noch den PCB-RX0 auf ESP32-GPIO16 gezogen, weil ich die Eingabe über die MowMate-Console testen wollte bzw. den Motor-Test probieren wollte, das hat aber noch nicht geklappt, kann aber auch an meiner Sunray Version liegen.
 
Unwahrscheinlich, dass es an deinem Sunray liegt, eher an dem USB-Chip, der zieht Pin auf Potenzial 0/1, so dass ESP nichts senden kann.
Da deine Bluetooth Pins frei sein sollten, damit sollte es auf jeden Fall gehen.

Dann ESP Pin16 auf TX2 und ESP Pin15 auf RX2 legen
und in config.h entsprechend anpassen
#define CONSOLE SerialUSB Serial2

Anhang anzeigen 8395

In beiden Fällen würdest du keine Ausgaben mehr am USB-Port bekommen.
 
Hi,

hast wieder mal richtig gelegen. Hab jetzt statt RX0/TX0 auf Serial2 (BT) umgestellt und die config.h angepasst - läuft. DANKE!
Update über die Weboberfläche hat auch funktioniert (y)
Jetzt noch mein GPS ans laufen bekommen, dann kann ich mal ne Karte einlesen und testen.
Wie funktioniert das denn mit MowMate?

Gruß
keeev
 
Was meinst du mit GPS ans laufen bekommen? Funktioniert GPS mit Sunray? Kannst du mähen?
Wenn das bereits geht, dann sollte bis auf GPS-Reiter alles funktionieren. Für erweiterte GPS-Informationen in diesem Reiter benötigst du den Sunray-Patch. Versuche ich heute vorzubereiten.
 
Bin noch dabei mein LC29HEA zu implementieren, hab da aktuell noch Probleme mit dem Fork + SAPOS, aber ich denke das wird ne Wochenendaufgabe.
Mir ging's eigentlich nur ums Anlernen, das ist ja laut deiner Beschreibung mit dem MowMate ohne extra Software möglich 😉
Auf den Patch bin ich gespannt 👌
 
LC29HEA spannend (y). Würde mich interessieren, ob die Signalqualität besser als mit F9P ist, wenn du hier Erfahrungen gesammelt hast, kannst du gerne mitteilen. Habe nämlich Probleme durch Bäume und Gebäude auf meinem Grundstück.

Hier zwei Branches die du bei dir rein mergen kannst. Die sind für vollen Funktionsumfang von MowMate erforderlich. Ich hoffe, dass ich nichts beim extrahieren vergessen habe.
3 weitere AT Befehle. Branch: add-AT+UBX-AT+S3-AT+S4 ​
  • AT+S3 ausführliche Sensorinfos
  • AT+S4 ausführlichere GPS-Infos
  • AT+UBX uBlox Proxy
GOTO Kommando AT+R, damit kann der Rover direkt ein Punkt auf der Karte anfahren​
​
Mit LC29HEA wirst du aber hier voraussichtlich auch noch anpassen müssen
 
Mir ging's eigentlich nur ums Anlernen, das ist ja laut deiner Beschreibung mit dem MowMate ohne extra Software möglich 😉
Ja, so ist es gedacht. Es gibt verschiedene Wege eine Karte in MowMate zu bekommen.
  • Mit dem integrierten Editor die Karte aufzeichnen, anpassen und Weglinien berechnen lassen
    • Bei der Aufzeichnung kann für die Navigation am Rechner/Smartphone angelernter Bluetooth/USB Game-Cotroller verwendet werden
  • Bestehende Karte wird bei der Verwendung des MowMate als Router zwischen CaSSAndRA/Ardumower-Web-App und Sunray abgefangen und kann für spätere Verwendung gespeichert werden.
  • JSON-Import (funktioniert eventuell noch nicht ganz)
 
Das Problem ist in der taskfile, hier wird folgendes abgefragt:

VITE_ENABLE_MAP: '{{if eq .ESP_TARGET "esp32-S3"}}true{{else}}false{{end}}'
VITE_ENABLE_LIVE_MAP: '{{if eq .ESP_TARGET "esp32-S3"}}true{{else}}false{{end}}'
VITE_ENABLE_GPS_DASHBOARD: '{{if eq .ESP_TARGET "esp32-S3"}}true{{else}}false{{end}}'

Das funktioniert so scheinbar nicht., Ich habs quick&dirty alles auf true und nun sehe ich auch die Reiter Map, Live Map und GPS. Das hatte ich vorher gar nicht....
Liegt es vielleicht daran, dass du die .env file im gitignore hast?

Gruß
keeev
 
Kein Problem, seh mich als Testperson 😉
Die 1.1.0 hatte ich bereits per Web geupdated, die Reiter waren trotzdem nicht da, deswegen kam auch die Frage auf wie das Anlernen gehen soll 😅
 
Oben