RFD-FHEM / SIGNALDuino

System to capture digital signaldata and transfer them to another system
GNU General Public License v3.0
83 stars 35 forks source link

Signalduino dev-3.4plattformio auf ESP32dev -> Crash nach dem WifiConfig-Portal #130

Closed Dattel closed 4 years ago

Dattel commented 4 years ago

Moins, ich probiere mich gerade dran, mal den Signalduino auf einem ESP32 Board zu flashen. Beim ersten Boot kommt fein das Config-Portal für's WLAN. Dort kann ich auch WLAN + Password eingeben, anschließend bekomme ich einen Kernelcrash mit Reboot. Ich weiß, das ESP32 noch als buggy deklariert wird, aber vielleicht gibt's ja doch schon einen FIX hierfür.?

*WM: [3] WiFi station enable
*WM: [1] connectTimeout not set, ESP waitForConnectResult... 
*WM: [2] Connection result: WL_CONNECTED
*WM: [3] lastconxresult: WL_CONNECTED
*WM: [1] Connect to new AP [SUCCESS] 
*WM: [1] Got IP Address:
*WM: [1] 192.168.xxx.xx
*WM: [2] disconnect configportal 
*WM: [2] restoring usermode STA
*WM: [2] wifi status: WL_CONNECTED
*WM: [2] wifi mode: STA
*WM: [1] config portal exiting 
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x40082657  PS      : 0x00060430  A0      : 0x800827ad  A1      : 0x3ffb1f10  
A2      : 0x00000000  A3      : 0xc2c23102  A4      : 0xc2c23102  A5      : 0x3ffc10b8
A6      : 0x3ffc1c00  A7      : 0x00000000  A8      : 0x3ffb79c8  A9      : 0x00000001
A10     : 0x3ffc10b8  A11     : 0x00000001  A12     : 0x3f402b51  A13     : 0x3ffc1c00  
A14     : 0x4cb2a8c0  A15     : 0x00000000  SAR     : 0x00000019  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000000  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xffffffff  

Backtrace: 0x40082657:0x3ffb1f10 0x400827aa:0x3ffb1f30 0x400d3c95:0x3ffb1f50 0x400e2837:0x3ffb1fb0 0x40088c71:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5828
entry 0x400806ac

Starting config portal with SSID: NodeDuinoConfig
HomeAutoUser commented 4 years ago

Hallo @Dattel kannst du ggf Angaben zu Core / Bibliotheken Versionen machen welche in Benutzung waren? Das sieht mir auf den ersten Blick wie damals beim ESP8266 nach einem StackFehler aus. (Vermutung auf den ersten Blick)

Leider ist mein ESP32 gerade nich hier, so das ich ggf erst morgen testen kann.

Dattel commented 4 years ago

HI, danke für die schnelle Antwort... Mal sehen, ob ich zusammenbekomme, was du so brauchst :-D

Habe die Standardsection in der platformio.ini etwas angefasst und die WIFI-Lib in der DEV-Variante noch dazugepackt

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps = https://github.com/tzapu/WiFiManager.git#development
Dependency Graph
|-- <WifiManager> 2.0.3-alpha #4319a66
|   |-- <DNSServer> 1.1.0
|   |   |-- <WiFi> 1.0
|   |-- <ESPmDNS> 1.0
|   |   |-- <WiFi> 1.0
|   |-- <WebServer> 1.0
|   |   |-- <WiFi> 1.0
|   |   |-- <FS> 1.0
|   |-- <WiFi> 1.0
|-- <SimpleFIFO> 1.0.0
|-- <TimerOne> 1.0.0
|-- <bitstore> 1.1.0
|-- <WiFi> 1.0
|-- <signaldecoder> 1.1.0
|   |-- <bitstore> 1.1.0
|   |-- <fastdelegate> 1.0.0
|   |-- <output> 1.0.1
|   |   |-- <WiFi> 1.0
|-- <fastdelegate> 1.0.0
|-- <output> 1.0.1
|   |-- <WiFi> 1.0
|-- <EEPROM> 1.0.3
|-- <SPI> 1.0
|-- <ArduinoJson> 6.15.2
|-- <DNSServer> 1.1.0
|   |-- <WiFi> 1.0
|-- <FS> 1.0
Building in release mode
Dattel commented 4 years ago

Achso noch eine Bemerkung: vielleicht ist das ja ein gewollter Crash und ESP.restart() löst einfach die kernelpanik aus um den Reboot zu forcieren :-D

Auszug aus der wifi-config.h

void resetwifi() {
    wifiManager.resetSettings();
#ifdef esp8266
    ESP.reset();
#elif defined(ESP32)
    ESP.restart();
#endif

Wenn ich den ESP jetzt nochmal starte kommt folgende Ausgabe:

*WM: [1] AutoConnect 
*WM: [2] ESP32 event handler enabled
*WM: [2] Connecting as wifi client...
*WM: [3] STA static IP:
*WM: [2] setSTAConfig static ip not set, skipping 
*WM: [1] Connecting to SAVED AP: *****************
*WM: [3] Using Password: *******************
*WM: [3] WiFi station enable 
*WM: [1] connectTimeout not set, ESP waitForConnectResult...
*WM: [2] [EVENT] WIFI_REASON: 202
*WM: [2] Connection result: WL_CONNECT_FAILED
*WM: [3] lastconxresulttmp: WL_STATION_WRONG_PASSWORD
*WM: [3] lastconxresult: WL_STATION_WRONG_PASSWORD

Das WLAN und das Password sind aber definitiv korrekt. Anschließend wird einfach wieder das Config Portal hochgezogen. Vielleicht ist das ja ein Hinweis

Dattel commented 4 years ago

habe mal auf lib_deps = tzapu/WiFiManager#c3ff582 geswitched, da ich hiervon weiß, dass ich mit einem anderen Projekt und dem selben ESP32 bereits erfolgreich mit dem selben WLAN eine Verbindung aufgebaut habe. Ergebnis ist leider das selbe.

Allerdings hab ich in dem anderen Projekt nicht das ConfigPortal genutzt. Kann ich Accesspoint und PW irgendwo fest hinterlegen?

Dattel commented 4 years ago

Hab mal den ExceptionDecoder von Arduino bemüht:

Decoding stack results
0x40082657: timer_armed at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp32/esp_timer.c line 251
0x400827aa: esp_timer_stop at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/esp32/esp_timer.c line 152
0x400d3c95: setup() at src/signalesp.h line 386
0x400e2837: uw_frame_state_for at /builds/idf/crosstool-NG/.build/src/gcc-5.2.0/libgcc/unwind-pe.h line 140
0x40088c71: vPortTaskWrapper at /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/port.c line 143
Dattel commented 4 years ago

Update: Habe mal testweise esp_timer_stop(cronTimer_handle); auskommentiert - damit geht's...Scheint, als wenn das TimerHandle ungültig ist?

signalesp.h Zeile 384ff.

#ifdef ESP32
    //esp_timer_stop(cronTimer_handle);
    cronTimer_args.callback = &cronjob;
    cronTimer_args.name = "cronTimer";
    cronTimer_args.dispatch_method = ESP_TIMER_TASK;
    esp_timer_create(&cronTimer_args, &cronTimer_handle);
#elif defined(ESP8266)
sidey79 commented 4 years ago

Ja ich erinnere mich, dass ich an dem Timer Thema schon einmal dran war bezüglich esp32

Irgendwas habe ich offensichtlich falsch interpretiert wie die auf dem esp32 funktionieren :(

Dattel commented 4 years ago

Na wie gesagt, wenn ich die Zeile auskommentiere, dann ist da erstmal die Kuh vom Eis und die kernel-exception fliegt nicht mehr, ESP verbindet auch mit dem WLAN. Allerdings habe ich festgestellt, dass für den esp32 beim Thema telnet noch nicht viel passiert ist und fhem somit auch nicht connecten kann. Server.start(23) zieht nur für den esp8266 deine, aber nicht beim esp32.. Schade, dachte es würde schon soweit die Basis funktionieren.

HomeAutoUser commented 4 years ago

Es gibt zu viele Baustellen und das sprunghafte lässt manches liegen. :(

Gern nehmen wir Zuarbeit entgegen :)

Dattel commented 4 years ago

Na da sind meine c++ Kenntnisse wahrscheinlich arg zu wenig, aber ich kann Mal schauen, ob ich mich da irgendwie einarbeiten kann.

HomeAutoUser commented 4 years ago

@Dattel welchen ESP32 hast du genau? Von dieser Hardware gibt es verschiedene Hersteller oder verschiedene Boarddefinitionen. (alternative gern auch 2 Bilder von der Vorder / Hinterseite)

Dattel commented 4 years ago

Wird bei Amazonien als SP-COW ESP32S Dev-Board vertrieben

https://www.amazon.de/gp/product/B07VJ34N2Q/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1

HomeAutoUser commented 4 years ago

Interessant wäre da die Rückseite.

Ich selbst habe einen selbigen wie auf den Bildern und auf der Rückseite ist AZ-Delivery vermerkt. Dies erleichtert manchmal die genaue Konfig.

HomeAutoUser commented 4 years ago

@Dattel dein Verhalten kann ich auf jedenfall schonmal nachstellen als ersten Schritt. Nach der WIFI Einstellung kommt der Break mit erneutem AP Mode.

Dattel commented 4 years ago

Weißes Board - lediglich der Aufdruck "ESP32S" ist drauf.

Nimm mal die Zeile 385 "esp_timer_stop(cronTimer_handle);" raus.. Meines Erachtens kann das Handle hier in der Setup() Funktion nur NULL sein... Wird ja erst später initialisiert über esp_timer_create(..)

Ich suche gerade eine Möglichkeit, die Dinger zu debuggen.... Komme ich da mit einem USBasp Adapter weiter?

HomeAutoUser commented 4 years ago

Ich suche gerade eine Möglichkeit, die Dinger zu debuggen.... Komme ich da mit einem USBasp Adapter weiter?

Nutze doch einfach bsp. PlatformIO und lade dort den Code hoch mit "Upload und Monitor". Somit siehst du sofort den Code durchlaufen oder kannst dir gern Hilfsausgaben zum verstehen ergänzen. Musst nur aufpassen, das du in keiner Schleife eine Ausgabe machst smile

Ein anderer Weg ist mir sonst nicht bekannt.

Dattel commented 4 years ago

Klar geht das - nicht anders bin ich ja an die Debugausgaben und den Crashdump von oben gekommen :-P Aber mir ist das leider zu sperrig.... ich brauch ein StepInto/StepOver, wenn man schon VSCode mit der Möglichkeit zum Debuggen hat:-D

Ich denke, ich werd mir mal so ein Teil hier bestellen: https://medium.com/@manuel.bl/low-cost-esp32-in-circuit-debugging-dbbee39e508b

Dattel commented 4 years ago

So erste Erfolge... auch ohne das DebugBoard.. ESP32 läuft bei mir gerade testweise mit FHEM und einem MX-RM-5V Empfänger erfolgreich zusammen. -Telnet läuft jetzt, sollte auch mit den TelnetRestart-Events bei Wifi-Verlust funktionieren (das ist wohl der Grund, warum das vorher auskommentiert war?) -den SOS Timer habe ich korrigiert, da der ESP8266 bei den os_timer_arm Funktionen mit Millis arbeitet, esp_timer_start_periodic aber Micros verlangt -selbiges mit Millis/Micros gilt auch für den cronTimer.... -für den ESP32 hab ich mir in der Compile_config eine separate Section für die ESP32 Pins gemacht

Mal schauen, ob ich das als meinen allerersten GIT-Commit mal irgendwie submitten kann... Bin sonst noch eher altbacken mit SVN unterwegs..

HomeAutoUser commented 4 years ago

Hallo @Dattel

Das klingt doch schonmal gut.

Mal schauen, ob ich das als meinen allerersten GIT-Commit mal irgendwie submitten kann... Bin sonst noch eher altbacken mit SVN unterwegs..

Gern bin ich dir auch behilflich dabei. Ich erstelle nen Branch wo wir via issues ggf dies austauschen und dann in einem Ritt übernehmen und als „komplett“ dann in den Original branch als PR machen. Wie du magst. Kann ich ggf deine Anpassungen irgendwo schon online sehen?

Der next Step wäre dann der CC1101 ;)

Dattel commented 4 years ago

Können wir so machen.... auf das Päckchen mit dem CC1101 warte ich aber noch. Ich stehe aber gerade vor dem Problem, dass die Reichweite sehr, sehr dürftig ist und ich wohl auf 5v Versorgung für den Empfänger + Levelshifter umsteigen muss. Wie wir das nachher zusammenführen, da würde ich mich auf dich verlassen - GIT ist (bis auf PULL) Neuland - ich zieh mir da später mal paar Tutorials zu rein.

Wäre definitiv gut, wenn da mal jemand vom logischen her drüberschaut, ob das, was ich geändert habe überhaupt Sinn macht :-)

HomeAutoUser commented 4 years ago

Ich erstelle dir ein Issues (Von meinem clone) mit Verweis hier her heute Abend. Darin können wir die Änderungen austauschen, bündeln und als gesamt hier her bringen. So kürzen wir den Faden hier ab und fügen das wesentliche zurück. Das beschert besseren Überblick und bei einem PR sieht man die Änderungen dann alle in einem Zusammenhang. Das macht es leichter @sidey79 dann alles einzuschätzen bzw. abzunicken.

HomeAutoUser commented 4 years ago

@Dattel, alles was die Codeänderungen angeht, kannst du via C&P oder Textmarkierungen bitte hier https://github.com/HomeAutoUser/Dev_Feature/issues/1 vornehmen. Ich baue es für dich ein und führe nach Fertigstellung einen PR für das Projekt hier ein.

Es wäre eine endlose Schlange wenn wir hier die Zeilen im Faden austauschen würden. Das Thema behalten wir somit noch übersichtlich.

Dattel commented 4 years ago

Da @HomeAutoUser die gemeinsamen Codeänderungen als PullRequest zur Verfügung gestellt hat, kann das Issue hier geschlossen werden