ich möchte mein ESP32 Mikrocontroller eine neuen Firmware senden über LoRa. Leider finde ich dazu keine Bibliotheken oder Anleitungen. Die meisten OTA Bibliotheken laufen über den Funk WLAN oder Bluetooth.
Um Daten zum Mikrocontroller zu senden, nutze ich die Bibliothek Lmic. Das klappt auch alles und kann die gesendeten Bytes über den Seriellen Monitor mir anzeigen lassen.
Wie kann ich die gesendeten Bytes zum Mikrocontroller in einer BIN File speichern? Ich codiere die Bytes und möchte die im neuen Sketch (BIN-File) abspeichern. Nachdem alle Pakete angekommen sind und diese auch im neuen Sketch (BIN-File) gespeichert sind, soll über ein Neustart die neuen Firmware gestartet werden.
Irgendjemand Erfahrungen mit Lora einen ESP32 Mikrontroller zu flashen?
wie ist die Übertragungsrate denn bei Deinem LoRa? Wieviel Zeit hast Du denn so für ein Update eingeplant?
Prinzipiell kannst Du Deine ankommenden Daten jeweils an die richtige Stelle des Flash schreiben, jeweilige Partitiontable Deines ESP32 beachten, Sourcen von OTA durchkramen.
Wenn die dann dort liegen und die Checksumme ok ist, eben die entsprechende Routine aus dem OAT aufrufen, daß die jetzt an die richtige Stelle flasht und anschließend den Neustart des ESP32 auslöst.
Dann hoffen, daß er sich wiedermeldet...
die Übertragung findet im SF 7 statt, also kann ich theoretisch 27 kBit/s übertragen. Da ich aber durch das Backend und der genutzten Bibliothek eingeschränkt bin, kann ich nur ca. 51 Bit/s übertragen. Meine Firmware ist ca. 150 kByte groß.
Wie schreibe ich die Daten an der richtigen Stelle im Flash?
Die Partionstabelle entnehme ich aus dem folgenden Pfad:
C:\Users<Name>\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.3\tools\partitions
ich frage mich bei der OTA Geschichte immer, wie sich das denn mit der Beschränkung auf 30sec Airtime pro Tag ausgehen kann. Wohin schickst du eigentlich? thethingsnetwork? Oder arbeitest PeerToPeer?
Sind die 30 Minuten LoRa-spezifisch? Ich habe damit noch keinen Kontakt gehabt.
Bei 5,1 Byte/s und 150 kByte wäre das eine Übertragungszeit von 8,4 Stunden ohne eine einzige Störung.
Das würde ich nicht mal andenken.
Dann eher kleine Häppchen übertragen (so 1 kByte ~ 3,3 Minuten) und prüfen (CRC oder kryptografische Checksumme) und dann das nächste Häppchen anfordern oder im Fehlerfall das letzte nochmal.
Das kann dann zwar einen Tag dauern, bis die neue Version übertragen ist, aber Du hast eine Chance es zu übertragen.
Mach es über WiFi !!!
Bei mir dauert ein Firmware-Update mit einer Dateigröße von über 900KB ca. 1 Minute. Danach startet der ESP neu und alles ist in Butter.
Tommy56:
Was kann man denn mit 30 Sekunden pro Tag bei der Übertragungsrate anfangen?
Sensorstelle wacht auf, übermittelt seine Temperatur, Feuchtigkeit, Batteriespannung, Micro geht schlafen.
sind dann nur ein paar Byte, Hausnummer 30ms Übertragung. Kannst also 1000 mal am Tag Werte übertragen.
Ich finds ganz ok wennst weiter kommen musst als dein WLAN oder du kein 3G, SMS ... einsetzen willst.
Es muss aber über LoRa laufen. Ja es ist richtig, ich nutze TTN, deshalb auch die ganzen einschränkungen.
Meine Frage war, wie speicher ich die einzelne Paketen im Flash? Wenn alle Pakete angekommen sind, dann müssen die Pakete noch zusammengepackt werden, wie läuft das ab?
Auch wenn mich das Thema grundsätzlich interessiert, ich denke die Frage ist im TTN Forum besser aufgehoben. Überleg mal wie viel Bytes downlink du hast und wie lange da dein ESP32-Hex dafür bräuchte.
Entweder es klappt über TTN Mechanismen so wie es TTN beschreibt oder sonst kannst das "vergessen".
Selber da eine Lösung basteln ... nö. Schau mal bei TTN was die so haben.
Meine Frage bezieht sich auf Arduino bzw. auf dem ESP-Mikrocontroller! Ich kann Downlinks versenden und die kommen auch beim ESP an, aber wie speicher ich die angenommen Daten im FLASH?
MauFau:
Meine Frage bezieht sich auf Arduino bzw. auf dem ESP-Mikrocontroller! Ich kann Downlinks versenden und die kommen auch beim ESP an, aber wie speicher ich die angenommen Daten im FLASH?
Wie kann ich die einzelnen Pakete im Verzeichnis "otadata" ablegen? Da kann mir das TTN Forum auch nicht weiterhelfen!
"otadata" ist kein Verzeichnis sondern ein Flashbereich.
Hast Du Dir denn schonmal angeschaut, was Espressif im IDF so in den OTA-Sachen macht?
Ich wünsche Dir da viel Spaß, ich habe die Befürchtung, daß das mehr als nur etwas Zeit kostet.
Ich halte es sowieso für wenig sinnvoll, auch wenn man theoretisch natürlich auch Mini-Pakete verarbeiten kann. Eben krümelweise in den Ram oder wohl besser ins SPIFFS packen, bis man die Blockgröße des ESP-Flash zusammenhat und dann diesen Block in den Flash befördern. Wenn man alles beisammen und sicher geprüft hat, daß es komplett und fehlerfrei angekommen ist, die Aufrufe im IDF finden, mit denen man die eigentliche Update-Routine startet. Damit man den Kram nicht auch noch selber schreiben muß. Alles natürlich sauber innerhalb des RTOS und dessen Taskmanagement...
Beschränke mich erstmal auf ein "kleine" Firmware, die ich im Flash speicher und dann im Sketch aufrufe.
amithlon:
Eben krümelweise in den Ram oder wohl besser ins SPIFFS packen, bis man die Blockgröße des ESP-Flash zusammenhat und dann diesen Block in den Flash befördern. Wenn man alles beisammen und sicher geprüft hat, daß es komplett und fehlerfrei angekommen ist, die Aufrufe im IDF finden, mit denen man die eigentliche Update-Routine startet. Damit man den Kram nicht auch noch selber schreiben muß. Alles natürlich sauber innerhalb des RTOS und dessen Taskmanagement...
Wieso soll ich lieber SPIFFS nutzen und nicht EEPROM?
Beschränke mich erstmal auf ein "kleine" Firmware, die ich im Flash speicher und dann im Sketch aufrufe.
Wieso soll ich lieber SPIFFS nutzen und nicht EEPROM?
OTA üer HTML will einen Weblink, wo die Firmware liegt, lädt die von dort runter und flasht sie.
Wie vereinabrt sich das mit LoRa/LoRaWAN?
ESP8266 und ESP32 haben keinen EEPROM. In der ArduinoIDE wird maximal ein Flashblock (4kB) für eine Emulaition der EEPROM-Routinen benutzt.
Programmierst Du direkt mit dem IDF von Espressif oder mit der ArduinoIDE?
Was ist bei Dir eine "kleine Firmware"?
Die Firmware des ESP32 ist ohne eigene Software rund 230kB (120kB compressed) groß.
OTA üer HTML will einen Weblink, wo die Firmware liegt, lädt die von dort runter und flasht sie.
Wie vereinabrt sich das mit LoRa/LoRaWAN?
ESP8266 und ESP32 haben keinen EEPROM. In der ArduinoIDE wird maximal ein Flashblock (4kB) für eine Emulaition der EEPROM-Routinen benutzt.
Programmierst Du direkt mit dem IDF von Espressif oder mit der ArduinoIDE?
Was ist bei Dir eine "kleine Firmware"?
Die Firmware des ESP32 ist ohne eigene Software rund 230kB (120kB compressed) groß.
Gruß aus Berlin
Michael
Für mich vereinbart sich das nicht mit LoRaWAN. Die Routine wird identisch sein, aber im Bezug zu LoRaWAN finde ich nichts.
Ich programmiere mit Arduino IDE. Mit kleiner Firmware meine ich, dass sich das Intervall der LED verändert. Die angekommenen Bytes werden im Flash-Speicher geschrieben, bis die "Funktion" vollständig ist. Dann verweise ich mit einem Pointer auf diesen Inhalt und die LED fängt an zu blinken. Um die ganzen Prozesse zu verstehen, reicht mir das erstmal so.
Verweise ich dann mit SPIFFS auf irgendein Flashbereich?
MauFau:
Ich programmiere mit Arduino IDE. Mit kleiner Firmware meine ich, dass sich das Intervall der LED verändert. Die angekommenen Bytes werden im Flash-Speicher geschrieben, bis die "Funktion" vollständig ist. Dann verweise ich mit einem Pointer auf diesen Inhalt und die LED fängt an zu blinken. Um die ganzen Prozesse zu verstehen, reicht mir das erstmal so.
Mach Dich einfach mal schlau, wovon Du da sprichst.
OTA heißt on-the-air Update, es wird die komplette Firmware durch eine neue(andere Version ersetzt. So, als ob Du auf Deinem PC die System-HD löschst und komplett neu einrichtest.
Was Du hier jetzt schreibst, macht ja fast jeder sowieso: auf dem ESP läuft ein Programm, dem schicke ich ein Kommando und einen Wert und die vorhandene Software nutzt diesen Wert als neue Blinkdauert oder zum Schalten eines Relais oder zum Senden irgendwelcher Werte auf Abruf.
Mach Dich einfach mal schlau, wovon Du da sprichst.
OTA heißt on-the-air Update, es wird die komplette Firmware durch eine neue(andere Version ersetzt. So, als ob Du auf Deinem PC die System-HD löschst und komplett neu einrichtest.
Was Du hier jetzt schreibst, macht ja fast jeder sowieso: auf dem ESP läuft ein Programm, dem schicke ich ein Kommando und einen Wert und die vorhandene Software nutzt diesen Wert als neue Blinkdauert oder zum Schalten eines Relais oder zum Senden irgendwelcher Werte auf Abruf.
Gruß aus Berlin
Michael
OTA heißt Over-the-Air, also über die Luft. Das Prinzip wie OTA funktioniert ist mir klar und auch für was das angewendet wird.
Wenn ich OTA über LoRaWAN mache, muss ich die einzelnen Pakete auch erstmal "zwischenspeichern", deshalb möchte ich zunächst die angekommen Pakete irgendwo ablegen und über ein Pointer auf diesen Bereich zugreifen.