Probleme bei der Kombination Firebase/HTTPS client
|
05.11.2020, 09:19
Beitrag #1
|
|||
|
|||
Probleme bei der Kombination Firebase/HTTPS client
Ich habe einen Arduino-Sketch aufgesetzt, der über WiFi auf Firebase zugreifen soll und zusätzlich HTTPS-Requests starten soll. Ich nutze ein ESP8266-12F Modul (AZ Delivery D1 mini NodeMCU)
ESP8266 Board Version 2.7.4 FirebaseArduino Version 0.3 (von 2018, gibt es da etwas Neueres, das ich nicht finden konnte?) zusammen mit ArduinoJson Version 5.13.1 ODER FirebaseESP8266 Version 3.0.2 Für die Firebase-Zugriffe habe ich sowohl FirebaseArduino als auch FirebaseESP8266 ausprobiert, beide haben aber mit der Situation ihre Probleme: In setup() öffne ich die WiFi-Verbindung, und in loop() greife ich auf Firebase zu, um eine Liste von 10-Zeichen-Strings zu holen. Von diesen gibt es ca. 160 in der Datenbank, die genaue Anzahl kenne ich aber vorher nicht. Bis zu diesem Punkt funktionert auch alles prima. Ich kann mir sogar in einer Schleife die gesammelten String-Keys anschauen. Aber sobald ich dann eine HTTPS-Client-Verbindung aufbaue Code: WiFiClientSecure client; kommt es entweder zu "connection failed" oder aber zu Soft WDT Resets. Wenn ich eine HTTPS-Client-Verbindung zu den gleichen URLs ohne vorherigen Firebase-Zugriff aufbaue, dann funktionieren diese prima! Was möchte ich eigentlich machen? Für jeden der 10-Zeichen-Strings aus Firebase möchte ich eine HTTPS-Verbindung zu einem Server aufbauen, wobei die URL diesen String enthält. Von diesem Server hole ich mir Infos (einen weiteren String), den ich dann in Firebase bei dem String-Key speichern möchte. Außerdem habe ich noch ein SSD1306 OLED an meinem ESP8266 angeschlossen. Codeaufbau: Code: #include <Arduino.h> Gibt es in dem Code ein grundlegendes Problem, das zu dieser Situation führt? Ich weiß zum Beispiel, dass ich Strings vermeiden sollte ... habe aber zu wenig Erfahrung mit hardwarenaher Programmierung eines speicherlimitierten Systems in C++ ![]() Vielleicht habt ihr Hinweise, wie ich beispielsweise die Liste der Keys nicht als String[] sondern speicherschonender ablegen und nutzen kann? |
|||
05.11.2020, 09:56
Beitrag #2
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
Zu Deinem konkreten Problem habe ich keine Erfahrung, ich vermisse sowas wie Firebase.end() oder Ähnliches, bevor Du die https-Connection öffnest.
Ebenso könnte eine kurze Pause zwischen den https-Connections helfen. Auf den ESP8266 ist das Problem mit String nicht so sehr ausgeprägt. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
05.11.2020, 11:06
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2020 11:07 von devnull69.)
Beitrag #3
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
Hallo Tommy,
danke für Deine schnelle Rückmeldung. Ich baue für die Firebase-Zugriffe keine Verbindung auf, das machen die Libraries wohl intern. Leider gibt es (in beiden Firebase-Libraries) kein Firebase.end(), Firebase.close(), Firebase.stop() oder ähnliches. Daher weiß ich einfach nicht, ob die Verbindung vorher beendet wurde... Aber ich hatte wohl einen Fehler in meinem Code, der ab und zu falsche URLs produziert hat. Bei diesen kommt dann (natürlich) "connection failed". Bei korrekten URLs kommt es nun ausschließlich zu Soft WDT Resets. Die eigentliche Frage lautet also: Wie kann ich korrekt den WDT Reset verhindern (Stichwort: "Watchdog füttern"). delay() und/oder yield() haben nichts gebracht. ESP.wdtDisable() auch nicht, da dann der Hardware WDT zuschlägt. Dieser Code schaltet (angeblich) den HW WDT aus ... Code: void hw_wdt_disable(){ das führt aber zu einem panic core dump (__yield), was mich auch nicht wundert. |
|||
05.11.2020, 11:16
Beitrag #4
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
Ein delay(10) in Deiner for-Schleife nach dem client.stop() bringt nichts?
Was machst Du bei ...? Evtl. dauert das zu lange oder der https-Zugriff ist zu langsam. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
05.11.2020, 11:21
Beitrag #5
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
(05.11.2020 11:16)Tommy56 schrieb: Ein delay(10) in Deiner for-Schleife nach dem client.stop() bringt nichts? Das delay(10) nach dem client.stop() bringt nichts ... denn bis dahin gelangt der Code bei der Ausführung gar nicht erst (Abbruch schon bei client.connect()) Bei .... würde ich einen GET-Request absetzen, das HTML-Ergebnis parsen und einen String extrahieren. Aber wie gesagt, bis dahin kommt der Code gar nicht. |
|||
05.11.2020, 11:26
Beitrag #6
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
Hast Du mal den Exceptiondecoder installiert?
Ansonsten gib uns mal Links zu den Firebase-Libs. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
05.11.2020, 11:36
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2020 11:46 von devnull69.)
Beitrag #7
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
(05.11.2020 11:26)Tommy56 schrieb: Hast Du mal den Exceptiondecoder installiert? Ja klar, den Dump wollte ich eh anhängen: Code: Decoding stack results Zeile 101 ist Code: String buffer[len] Zeile 122 ist dann der client.connect(). Keine Ahnung, warum im Trace die beiden Zeilen aufeinanderfolgen ... Das sind die beiden Firebase-Libraries: firebase-arduino: https://github.com/FirebaseExtended/firebase-arduino Firebase ESP8266 Client habe ich über den Library-Manager installiert. Der Code dazu ist zu finden unter: https://github.com/mobizt/Firebase-ESP8266 |
|||
05.11.2020, 11:57
Beitrag #8
|
|||
|
|||
RE: Probleme bei der Kombination Firebase/HTTPS client
Da fällt mir auch nichts anderes mehr ein.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste