ahermann86 / LX79x_WiFi

LX79x Mähroboter WiFi Erweiterung mit ESP32
10 stars 7 forks source link

Leider nicht kompatibel mit LX790.1 #6

Open 4nuky opened 2 years ago

4nuky commented 2 years ago

Hallo zusammen,

ich bin total begeistert von diesem Projekt und hab mir deshalb auch einen LX790 aus dem Baumarkt gegönnt. Es ist die Variante LX790.1.

Platine war gelötet und ich wollte zum Einbau kommen aber leider musste ich feststellen, dass der Wannenstecker nicht 14 sondern 16 Pins hat.

Alle Buttons werden direkt an das Mainboard weitergeleitet und nicht über den Bus.

Die I2C pins SDA/SCL sind zwar vorhanden aber ohne Funktion. Der Display Treiber ist ein TM1668 der über DIO/CLK/STB kommuniziert (wohl ein unidirektionales SPI).

Infos inkl. Datenblatt gibt’s auf der git Seite der Arduino Library.

Daher vermute ich dass der Code „nur“ mit dem Display Treiber „TM1650“ kompatibel ist, weil nur hier die rede von I2C ist.

Natürlich könnte man hier auch die Kommunikation in ähnlicher Weise belauschen wie Axel das für I2C umgesetzt hat, aber meine Fähigkeiten übersteigt das jedenfalls :D. Man müsste ja quasi die Library umdrehen.

Vielleicht freut sich jemand wenn der Hinweis in die Readme kommt.

PXL_20220703_152344504

the-real-orca commented 2 years ago

Ich habe auch die neue Version vom LX790 (Display Board: LX890 Tube Display V1.1) und die letzten Tage damit verbracht das Board zu analysieren Protokoll zu dekodieren. Die Buttons sind jetzt direkt ans Flachbandkabel gelegt, was die Sache etwas vereinfacht. Dafür verwendet das Display ein anderes Protokoll (SPI statt I2C) und die Belegung der Anzeige (Grids, Segmente) scheint auch komplett anders zu sein.

Ich muss mich allerdings noch in das Projekt einarbeiten und sehen wie leicht der kommunikationsspezifische Teil erweitert / ausgetauscht werden kann. Am schönsten wäre ein Projekt mit verschiedenen Konfigurationsvarianten. Wenn das zu kompliziert wird, wird’s ein Spin-Off Projekt.

Senserich commented 1 year ago

Hallo zusammen, gibt es in der Zwischenzeit eine Lösung für die neue Platine LX790.1? Es wäre sehr schade, wenn dieses schöne Projekt beim aktuellen LX790 nicht mehr zu gebrauchen wäre.

BIIINO commented 1 year ago

Guten Tag, wäre es möglich, dieses Projekt für die 16-Pin-Version des Mähers mit der LX790.1-Platine zu verwenden?

Übersetzt mit Google Übersetzer

Wlad2288 commented 1 year ago

Hallo und auch danke von meiner Seite für das tolle Project. Leider habe auch ich einen 16 poligen Stecker :( Ich wäre auch sehr dankbar, wenn das Projekt auch für neuere Modelle angepasst wird.

the-real-orca commented 1 year ago

Ich habe vor einiger Zeit begonnen LX79x_WiFi für die Version 1.1 (16 poliges Kabel) zu portieren. Die erste Testversion läuft seit dem Sommer bei mir im Garten. Der Fork ist unter: https://github.com/the-real-orca/LX79x_WiFi Wichitg: LX790_V1_1 den Branch wählen!

Die Doku ist noch nicht aktualisiert, aber mit den Bildern bzw. Protokollbeschreibung sollten es hoffentlich auch so nachvollziehbar sein.

Wlad2288 commented 1 year ago

Ich habe vor einiger Zeit begonnen LX79x_WiFi für die Version 1.1 (16 poliges Kabel) zu portieren. Die erste Testversion läuft seit dem Sommer bei mir im Garten. Der Fork ist unter: https://github.com/the-real-orca/LX79x_WiFi Wichitg: LX790_V1_1 den Branch wählen!

Die Doku ist noch nicht aktualisiert, aber mit den Bildern bzw. Protokollbeschreibung sollten es hoffentlich auch so nachvollziehbar sein.

MEGA! Vielen Dank dafür! Habe ehrlich gesagt nicht damit gerechnet - umso größer ist meine Freude :)

Habe mir gerade anhand deines Schaltplans alle Bauteile bei Reichelt bestellt. Dabei ist mir aufgefallen, dass nur noch ein Widerstand gebraucht wird - mich interessieren die Gründe hierfür.

Ich werde berichten, sobald ich alles fertig habe und es im Einsatz ist!

Besten Dank, Wlad

the-real-orca commented 1 year ago

In der HW Version 1.1 verwenden sie den TM1668 Chip. Der hat ein SPI ähnliches Protokoll. Das Reinhängen mit dem ESP ist da etwas tricky weil er nur lauschen darf und ich die eigentliche Kommunikation nicht beeinflussen möchte. Manchmal dürfte es Probleme beim sync geben und er kann dann die Paket nicht richtig decodieren. Hab aber noch nicht herausgefunden wie man das stabiler machen kann.

Die anderen Leitungen sind für die Tasten. Bei einem virtuellen Tastendruck wird die Leitung auf GND gezogen, ansonsten hängt sie am Board internen Pull-Up.

D.h. bis auf den OptoKoppler + Vorwiderstand braucht man nix mehr an zusätzlicher HW (außer den ESP natürlich :-)

Wlad2288 commented 1 year ago

Danke für die Erklärung! Wie machen sich die Sync-Probleme bemerkbar und was machst du dann in diesem Fall?

the-real-orca commented 1 year ago

Hin und wieder kommt es zu Artefakten bei der Webanzeige. Hat aber auf den normalen Betrieb keinen Einfluss.

Senserich commented 6 months ago

Wie ist eigentlich die Testphase im vergangenen Sommer verlaufen? Da die nächste Saison vor der Tür steht, überlege ich, dieses Projekt ebenfalls zu nutzen.

the-real-orca commented 6 months ago

Wie gesagt, bis auf vereinzelte Artefakte bei der Anzeige, hat alles wunderbar funktioniert.

Wlad2288 commented 5 months ago

Danke @the-real-orca! Ich komme erst jetzt dazu das Projekt umzusetzen, nachdem der ESP32 ein Jahr lang in der Schublade lag :) Leider bin ich ein absoluter Anfänger in dem Bereich und kriege folgenden Error nicht selbst gelöst:

Arduino: 1.8.19 (Mac OS X), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, None, Disabled"

/Users//Downloads/LX79x_WiFi-LX790_V1_1/LX790_ESP32/HAL_LX790_V1_1.cpp: In function 'void HAL_loop(LX790_State&)':
HAL_LX790_V1_1.cpp:155:14: error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'remained'
   if (tm1668.remained() == 0)
              ^~~~~~~~
HAL_LX790_V1_1.cpp:156:59: error: no matching function for call to 'arduino::esp32::spi::slave::Slave::queue(uint8_t [32], unsigned int)'
     tm1668.queue(spi_slave_rx_buf, sizeof spi_slave_rx_buf);
                                                           ^
In file included from /Users//Downloads/LX79x_WiFi-LX790_V1_1/LX790_ESP32/HAL_LX790_V1_1.cpp:5:
/Users//Documents/Arduino/libraries/ESP32SPISlave/ESP32SPISlave.h:342:10: note: candidate: 'bool arduino::esp32::spi::slave::Slave::queue(const uint8_t*, uint8_t*, size_t)'
     bool queue(const uint8_t* tx_buf, uint8_t* rx_buf, size_t size)
          ^~~~~
/Users//Documents/Arduino/libraries/ESP32SPISlave/ESP32SPISlave.h:342:10: note:   candidate expects 3 arguments, 2 provided
/Users//Documents/Arduino/libraries/ESP32SPISlave/ESP32SPISlave.h:356:10: note: candidate: 'bool arduino::esp32::spi::slave::Slave::queue(uint32_t, const uint8_t*, uint8_t*, size_t)'
     bool queue(
          ^~~~~
/Users//Documents/Arduino/libraries/ESP32SPISlave/ESP32SPISlave.h:356:10: note:   candidate expects 4 arguments, 2 provided
HAL_LX790_V1_1.cpp:159:17: error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'available'
   while (tm1668.available()) {
                 ^~~~~~~~~
HAL_LX790_V1_1.cpp:160:23: error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'size'
     int size = tm1668.size();
                       ^~~~
HAL_LX790_V1_1.cpp:180:12: error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'pop'
     tm1668.pop();
            ^~~
Multiple libraries were found for "WiFi.h"
 Used: /Users//Library/Arduino15/packages/esp32/hardware/esp32/2.0.15/libraries/WiFi
 Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
exit status 1
'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'remained'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Any idea?

Senserich commented 5 months ago

Bei mir leider ein ähnliches Ergebnis. Das Fehlerprotokoll ist sogar noch etwas länger. Ich verwende Windows 10 und habe die Arduino-Versionen 1.8.19 und 2.3.2 getestet. Das Resultat ist bei beiden gleich. Wahrscheinlich fehlen bei mir irgendwelche Bibliotheken. Konnte aber diesbezüglich keinen direkten Hinweis im Fehlerprotokoll finden.

Bei mir ist es das erste Arduino-Projekt und auch ich wäre für jeden Hinweis zur Problemlösung dankbar.

the-real-orca commented 5 months ago

Je nachdem welche Entwicklungsumbebung ihr verwendet, müsst ihr die Libraries manuell laden & einbinden. Ich benutze VS Code mit PlatformIO, da werden sie über platformio.ini automatisch geladen.

Das Log schaut so aus, als ob essenzielle System-Libraries nicht richtig installiert sind. Ist das ESP32 SDK richtig installiert? Ich würde vorschlagen, ihr testet einmal mit einem „Hello World“ Beispiel (z.B: LED blinken lassen) ob das System richtig installiert ist und kompilieren und Upload korrekt funktionieren. Dazu gibt es dutzende Bsp. Im Netz und auf YouTube. Wenn das läuft, ist der nächste Schritt mit dem LX79x ...

Senserich commented 5 months ago

Vielen Dank für die Antwort. In meinem Fall ist es so, daß das Programm "Blink" einwandfrei funktioniert. Auch hatte ich die ursprüngliche LX79-Version von ahermann86 bereits erfolgreich mit Arduino 1.8.19 aufgespielt. Die Benutzeroberfläche war im Browser per WLAN auch erreichbar. Allerdings habe ich erst dann mitbekommen, daß ich schon die neue Platine v1.1 besitze und diese Version nicht verwenden kann. An Bibliotheken habe ich jetzt alles Verfügbare mit dem Namen ESP installiert - leider ohne Erfolg. Werde morgen einen neuen Versuch starten.

Senserich commented 5 months ago

Ich habe nun meine beiden Arduino-Versionen deinstalliert, Windows neu gestartet und die Version 1.8.18 installiert. Zusätzliche Bibliotheken wurden erst hinzugefügt, wenn entsprechende Fehlermeldugen beim Kompilieren auftraten. Leider war das Resultat am Ende das gleiche wie vorher.

Hier die verkürzte Auflistung der für mich entscheidenden Fehlermeldungen:

Arduino: 1.8.18 (Windows 10), Board: "DOIT ESP32 DEVKIT V1, 80MHz, 921600, None, Disabled"

error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'available'
error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'size'
error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'pop'
error: 'using ESP32SPISlave = class arduino::esp32::spi::slave::Slave' {aka 'class arduino::esp32::spi::slave::Slave'} has no member named 'remained'

Die erste Zeile der Datei HAL_LX790_V1_1.cpp, in der ein Fehler angezeigt wird, lautet:

// read data via SPI
  if (tm1668.remained() == 0)
    tm1668.queue(spi_slave_rx_buf, sizeof spi_slave_rx_buf);

Das Kompilieren wurde an dieser Stelle abgebrochen (siehe auch Felerprotokoll von wlad2288). Leider bin ich nun vollkommen ratlos.

Update 17.4.2024: Habe das Ganze jetzt über Visual Studio Code (PlatformIO) laufen lassen. Leider entsprechen die Fehlermeldungen denen bei Arduino. Die Begriffe 'tm1668.available()', 'tm1668.size()' , 'tm1668.pop()' und 'tm1668.remained()' sind offensichtlich unbekannt. ESP32SPISlave ist ordnungsgemäß installiert.

Senserich commented 5 months ago

Das Problem ist gelöst. Es lag an der Bibliothek ESP32SPISlave bzw. deren neuester Version 0.6.0. Diese ist nicht mehr kompatibel mit der Datei HAL_LX790_V1_1.cpp. Anhand des Datums der Veröffentlichung und der Release-Historie der Bibliothek habe ich Version 0.3.0 installiert, und siehe da.......Projekt auf ESP32 hochgeladen - Bedienoberfläche im Browser sichtbar. Am Wochenende baue ich das Adapterkabel ein und bin schon jetzt sehr gespannt.

Wlad2288 commented 5 months ago

Das Problem ist gelöst. Es lag an der Bibliothek ESP32SPISlave bzw. deren neuester Version 0.6.0. Diese ist nicht mehr kompatibel mit der Datei HAL_LX790_V1_1.cpp. Anhand des Datums der Veröffentlichung und der Release-Historie der Bibliothek habe ich Version 0.3.0 installiert, und siehe da.......Projekt auf ESP32 hochgeladen - Bedienoberfläche im Browser sichtbar. Am Wochenende baue ich das Adapterkabel ein und bin schon jetzt sehr gespannt.

Perfekt! ... vielen Dank. Genau daran lag es.

Die Tage kommen die letzten Komponenten und dann kann ich alles einbauen und testen.

the-real-orca commented 5 months ago

Sehr gut, freut mich, dass ihr das Problem lösen konntet. Ich habe zur Zeit leider viel zu viele offene Baustellen, aber wenn ich dann wieder Zeit finde, werde ich den Code auf die aktuellen Bibliotheken nach ziehen.

Wlad2288 commented 5 months ago

@the-real-orca @ahermann86

Besten Danke euch beiden für dieses Projekt! Ich habe nun endlich alles verlötet, eingebaut und getestet. Alles hat einwandfrei auf Anhieb funktioniert - klasse!

Sogar die Einbindung in Homeassistant klappt super :)

image

Aus meiner Sicht kann das Issue geschlossen werden.

VG, Wlad

Senserich commented 5 months ago

Auch ich kann berichten, daß alles einwandfrei läuft. Allerdings wurde von mir der Ein/Aus-Schalter aus der Bedienoberfläche entfernt, um den Roboter nicht versehentlich auszuschalten. Ich bekomme ihn sonst so schnell nicht wieder an, da er ca. 200 km von meinem Zuhause seine Arbeit verrichtet. Auch von mir noch einmal vielen Dank an die Ersteller des Projekts !

jha81 commented 3 months ago

Moin,

erstmal Hut ab so etwas zu programmieren ! Ich habe auch die Version 790.1 im Roby…, leider bekomme ich das auf meinem ESP Board nicht zum laufen... Die Version 790 läuft ohne Probleme, wählt sich ins WLAN ein und ist per IP erreichbar. Lade ich jedoch jetzt die 790.1 auf das Board bekomme ich diesen Fehler im Seriellen Monitor:

17:14:54.996 -> ets Jul 29 2019 12:21:46 17:14:54.996 -> 17:14:54.996 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 17:14:54.996 -> configsip: 0, SPIWP:0xee 17:14:54.996 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 17:14:54.996 -> mode:DIO, clock div:1 17:14:54.996 -> load:0x3fff0030,len:1288 17:14:55.030 -> load:0x40078000,len:13872 17:14:55.030 -> load:0x40080400,len:4 17:14:55.030 -> ho 8 tail 4 room 4 17:14:55.030 -> load:0x40080404,len:3048 17:14:55.030 -> entry 0x40080590 17:14:55.411 -> Build date: Jun 24 2024 time: 17:03:50 17:14:55.622 -> Failed to read file, using default configuration 17:14:55.722 -> start AP.. 17:14:55.929 -> AP SSID: LX790 17:14:55.929 -> AP password: 17:14:55.929 -> AP IP address: 192.168.4.1

Im Moment stehe ich auf dem Schlauch, da ich genauso vorgegangen bin, wie mit der "alten Version", die ohne Probleme läuft... Keine Ahnung, ob ich etwas vergessen habe !? So wie ich es verstanden habe ist das Verzeichnis LX790_V1_1 herunterzuladen, Data Ordner rüberschieben, WLAN Daten anpassen und Hochladen.... Beim Kompilieren gibt es keinerlei Fehlermeldungen. Vielleicht hat ja jemand eine Idee ? Würde mich sehr über Nachricht freuen !

Danke vorab ! Jan

Wlad2288 commented 2 months ago

Hi! Laut Log hat er einen AccessPoint geöffnet. Schau mal ob du ein WLAN mit dem Namen LX790 sehen kannst. Wenn du dich damit verbindest, kannst du einstellen, mit welchem WLAN der Robi sich verbinden soll.

VG, Wlad

Wlad2288 commented 2 months ago

@the-real-orca

Ich habe das gleiche jetzt in einem zweiten Robi eingebaut. Alles, bis auf die Stopp Taste funktioniert.

Hast du eine Idee?

VG, Wlad

jha81 commented 2 months ago

Danke @ Wlad2288 !! Genau so hat es funktioniert.... einfach mit dem WLAN Verbinden und die Daten eintragen ! Super...

Nachdem ich auf der Platine ein Kabel vergessen und zwei am Optokopler vertauscht hatte, funktioniert jetzt alles !!!

Vielen Dank dafür !!!

LG Jan