Hi,
mein Projekt TOISWITCH
(Beitrag "TOISWITCH - IoT I/O-Server für ESP8266")
bietet schon seit längerem OTA für alle ESP Boards mit mehr als 1MB
Flash an.
Jetzt sitze ich gerade daran, diese Funktion auch für Boards mit nur 1
MB Flash umzusetzen.
Das ich hier mit einer Interims-Fimware für OTA arbeiten muss ist mir
klar.
Diese Interims-Firmware habe ich auch schon testweise gebaut, aber sie
wird selbst mit allen Optimierungen derzeit immer noch 500k(!) groß.
Ich habe da jetzt noch nicht viel Zeit rein gesteckt, das Ding ist weder
fertig noch perfekt.
https://sourceforge.net/p/toiswitch/code/ci/master/tree/1M/Updater/
Die Partition Table sieht wie folgt aus.
OTA_1 könnte ich auf max 300k erweitern.
1
# Name, Type, SubType, Offset, Size, Flags
2
nvs, data, nvs, 0x9000, 0x4000
3
otadata, data, ota, 0xD000, 0x2000
4
phy_init, data, phy, 0xf000, 0x1000
5
ota_0, 0, ota_0, 0x10000, 640k,
6
ota_1, 0, ota_1, 0xB0000, 256k,
7
storage, data, spiffs, 0xFC000, 16k,
Meine Fragen:
-Gibt es evtl. einen OTA-Updater, der kompakt genug ist, und sich für
meine Zwecke modifieren lässt bzw. hat jemand Ideen, wie ich meinen
Updater klein genug bekomme?
-Wenn ich recht entsinne, gibt es bezüglich der Größe und Lage der
Partitionen für OTA Beschränkungen seitens des Espressif boot loaders.
So dürfen Partitionen imHO nur genaue Vielfache von 64k Größe haben, und
die Lage von OTA_0 und OTA_1 muss in fester Beziehung zueinander stehen
(z.B. 0x10000 für OTA_0 und 0x110000 für OTA_1), was aber bei 1MB nur
möglich ist, wenn die Firmware nicht größer ist als ca 500k.
Das wäre mit meiner aktuellen Partition Table nicht gegeben.
-Wie machen das Tasmota&co? Das dort mit einer Interimsfirmware
gearbeitet wird ist mir klar, aber wie wird dort mit den Einschränkungen
seitens des Bootloader umgegangen?
Wenn euch noch Infos fehlen, fragt gern.
gruß
tobi
hacker-tobi schrieb:> hat jemand Ideen, wie ich meinen> Updater klein genug bekomme?
Nein!
Kann aber sagen, wie ich das tue......
Habe einige ES8266-01S im Einsatz.
Auch mit zu großem Programm.
Und mit Dateisystem im Flash
Habe bei diesen das 1MB Flash durch 4MB oder auch 16MB ersetzt.
Kosteten dunnemals rund 35 Cent beim Chinesen.
Meine Notizen sagen:
W25Q32FW
W25Q128F
Das hilft mir leider nicht da es hier um iot devices geht, die zum
Grossteil mit dem esp8285 arbeiten, der den flash integriert hat.
Klar tauschen der kompletten module ist möglich aber ich möchte
möglichst ohne auskommen. Und es gibt ja Lösungen wo das funktioniert
ergo muss es ja machbar sein.
Tasmota ist ja nur ein Beispiel.
Meine Frage ist, ob jemand im forum das schonmal selbst geschrieben hat
und mir praktische tips geben kann oder ob es ein funktionierendes tool
gibt das ich nutzen kann.
@eaf:
Merkwürdige Analogie.
Das es möglich ist, wurde ja schon bewiesen.
Wie ich im eröffnungspost bereits schrieb ist mir klar, das OTA hier nur
mit dem Zwischenschritt über eine minimale updater Software
funktionieren kann.
Ich frage mich, ob es eben auch mit dem aktuellen rtos SDK möglich ist.
Oder ob jemand einen link o.ä. zu einer funktionierenden Lösung hat.
Ich hab mal ein wenig weiter geforscht.
Wenn ich die 4 Aufrufe
esp_wifi_init(&cfg)
esp_wifi_set_mode(WIFI_MODE_STA)
esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)
esp_wifi_start()
deaktiviere, spart das 170 kB ein. Nur habe ich dann kein WiFi mehr ;)
Gibt es etwas, was ich tun kann, um die Größe des Wifi/IP-Stacks hier zu
verringern?
Hallo,
ich habe hier noch ein Projekt mit einem ESP8266-01 und 1MB Flash
laufen:
ESP8266-01 8MBit-Flash: 1M(128k LittleFS)
Da sind diese Komponenten aktiv:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
#include <AsyncMqttClient.h>
#include <Ticker.h>
#include <LittleFS.h>
Belegt mit IDE 1.8.19 und ESP8266 3.0.2
Der Sketch verwendet 380129 Bytes (42%) des Programmspeicherplatzes. Das
Maximum sind 892912 Bytes.
Globale Variablen verwenden 30948 Bytes (37%) des dynamischen Speichers,
50972 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920
Bytes
Läßt sich schon immer per OTA aus der ArduinoIDE flashen.
Steckdosen mit Tasmota und 1MB Flash gibt es hier auch, auch da geht OTA
problemlos. Ist 6.5.0(release-basic) bzw. 6.6.0(release-basic) draf, gab
bisher keinen Grund, das zu ändern.
Auf dem IR-Modul von Pearl ust die 8.1.0.11(063c19d-ir) drauf, auch 1MB
Flash.
Vermutlich habe ich also das Problem des TO nicht verstanden.
Gruß aus Berlin
Michael
Verstanden hast du es vermutlich schon.
Allerdings nutzt zu arduino als Entwicklungsumgebung, während ich direkt
mit dem espressif SDk anstelle von arduino arbeite.
Es ist interessant zu wissen, das die arduino libraries hier deutlich
effizienter sind, was die grösse angeht.
Die Leute die den Arduino Core für den ESP8266 gemacht haben sind nicht
blöd. Während Espressif noch die Installation einer ganz bestimmten
Linux Distribution und IDE forderte und keine ordentliche Doku hatte,
gab es längst den viel einfacher anzuwendenden Arduino Core. Die Arduino
Leute haben auch zahlreiche Bugs im zugrunde liegenden Code von
Espressif wesentlich schneller geflickt. Der Arduino Core war der
Software von Espressif lange Zeit qualitativ weit voraus.
Soweit ich beurteilen kann, fokussiert sich Espressif inzwischen nur
noch auf den ESP32. Denen genügt es bereits, wenn die Software irgendwie
ein bisschen auf dem ESP8266 läuft. Ich bin ziemlich sicher, dass sie
den Chip einfach aus der Liste der unterstützen Device entfernen, sobald
es mal schwierig wird.
Meiner Meinung nach ist das beste SDK für den ESP8266 der Arduino Core
in Version 2.3.0 (basierend auf Espressif nonos SDK 1.5.3). Ja die
Software ist alt, aber stabil und nicht so aufgebläht. Wer mehr will,
sollte wirklich lieber auf den ESP32 wechseln, das erspart einiges an
Leid.
Wenn du mal nach Projekten googelst wirst du sehen, dass es kaum
Open-Source Projekte für den ESP8266 auf Basis des Espressif SDK gibt.
Fast alle nutzen für diesen Chip lieber Arduino.
Hallo,
der "Arduino Core" ist hauptsächlich eine Sammlung Wrapperfunktionen auf
das SDK von Espressif. Ich habe auch schon manchmal Funktionen des SDK
direkt aufgerufen wenn es aus der ArduinoIDE nicht eingebaut war.
Das SDK von Espressif ist immer etwas aktueller als die von der
ArduinoIDE genutzte Version weil das Drumrum eben erst angepasst werden
muß.
"Aufgebläht" ist auch relativ, wenn ein ESP8266 reicht muß ich keinen
ESP32 nehmen. Wenn z.B. SSL eingebaut ist, kostet es eben Platz.
Mit der 2.7.4 habe ich noch etliche kleine Projekte, fast alle ließen
sich inzwischen problemlos mit der 3.0.2 compilieren, ein paar
Ungereimtheiten im Speicherverbrauch sind aber immer noch nicht geklärt.
Für den ESP8266 habe ich hier keine Espressif-Installation mehr drauf,
die ESP32-Version von Juni 2021 ist hier noch drauf.
Für mich ist die ArduinoIDE hier einfach nur Mittel zum Zweck. Es sind
Hobbyprojekte und es ist eben einfach, mal so zum Spaß mit anderen
CPU-Architekturen rumzuspielen. Es spart einfach Zeit.
Gruß aus Berlin
Michael