ESP 8266 - OTA & Deep Sleep

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

ESP 8266 - OTA & Deep Sleep

Příspěvek od cz_marek » 09 bře 2018, 14:49

Ahoj,
potřeboval bych poradit s OTA pokud mám ESP8266 v Deep Sleep.
Je problém se trefit do "funkčního okna" - idealní stav by byl aby si v každé smyčce nebo v zadaném intervalu zkontroloval jestli existuje novější verze programu a pokud ano tak si ji stáhnul...

Našel jsem navod (google používat umím) ale nebyl jsem schopný to zprovoznít nebo to bylo moc komplikovane - nemáte někdo funční příklad nebo napad jak na to?

Diky...

edit: zkoušel jsem i službu https://iotappstory.com - myšlenka je dobrá a pokud nebude neco lepsiho tak to poresim takhle...

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od jankop » 09 bře 2018, 16:12

Zkoušel jsem OTA ze serveru. Funguje to dobře, ale je to opravdu jen demo verze, protože program ověří, jestli je v daném umistění určený soubor a pokud ano, tak ho nahraje a restartuje se. Protože tam není nijak ošetřeno verzování, tak by se ten proces opakoval do té doby, dokud by tam byl ten soubor umístěný, respektive až do úplného uflashování paměti modulu. Je třeba vytvořit v paměti flash nějakou restart přetrvávající proměnou a do ní třeba ukládat název již stažené aktualizace nebo tak nějak. Pokud to budeš řešit, tak mě to bude určitě také zajímat. Základní princip OTA v tom příkladu funguje velmi dobře. Pro moje hraní zatím používám jen OTA z prohlížeče.

Kód: Vybrat vše

#include <ESP8266httpUpdate.h>
const char* ssid =     "YourSSID";     // Set your router SSID
const char* password = "YourPassword"; // Set your router password
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  /*connection to WiFi*/
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  /* warning - the update is done after each reboot now */
  t_httpUpdate_return ret = ESPhttpUpdate.update("http://server/file.bin"); //Location of your binary file
  //t_httpUpdate_return  ret = ESPhttpUpdate.update("https://server/file.bin");
  /*upload information only */
  switch (ret) {
    case HTTP_UPDATE_FAILED:
      Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
      break;
    case HTTP_UPDATE_NO_UPDATES:
      Serial.println("HTTP_UPDATE_NO_UPDATES");
      break;
    case HTTP_UPDATE_OK:
      Serial.println("HTTP_UPDATE_OK");
      break;
  }
}
void loop() {
// ...
}
Nezapoměň, že na OTA potřebuješ minimálně 1MB flash paměti, respektive 2x více paměti, než má délku tvůj program. V případě že máš 4MB paměti a tvůj program je větší než 0,5MB, tak musíš udělat specifickou konfiguraci pro flashování 2MB/2MB SPIFF.

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od jankop » 09 bře 2018, 16:43

Velmi jednoduché by bylo, testovat existenci souboru třeba jednou za hodinu a prostě soubor vystavit a třeba za půl hodiny ho ze serveru odstranit.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od cz_marek » 09 bře 2018, 22:02

Ano s tim omezenim velikosti pocitam.
Ten priklad vypada dobre - vyzkousim to. S tim verzovanim jsem mel predstavu pres nazev souboru "program_v1.bin" číslo verze "1" by byla proměnná a pokud by existovala vyšší verze tak by se proměnná přepsala na "2" a ta se stáhla...
Napadaji me jeste dva jednodušší přístupy:
- nachystat program na 10 verzí - zkontrolovat jejich dostupnost a tu posledni stahnout
- do každé verze programu dát ke stažení verzi o jednu větší než je ta funkční takže verze v1 by obsahovala kontrolu v2 a pokud by existoval tak stáhnout... v2 bude kontrolovat jestli existuje v3

Nebude potřeba mnoha verzí - počítám jen s updatem v případě kdy něco doladím nebo vylepším. K ESP se mi bude blbě dostávat.

Nejsem nijak excelentní programator takže to musim vyzkoušet jestli to dam dohromady aby to fungovalo

Diky...

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od jankop » 10 bře 2018, 09:32

cz_marek píše:
09 bře 2018, 22:02
- do každé verze programu dát ke stažení verzi o jednu větší než je ta funkční takže verze v1 by obsahovala kontrolu v2 a pokud by existoval tak stáhnout... v2 bude kontrolovat jestli existuje v3
Tohle je asi nejjednodušší postup, má to jedinou vadu. Ty si musíš si pamatovat, jaká verze je již nahraná, abys správně pojmenoval následující verzi.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od cz_marek » 05 dub 2018, 22:14

OTA aktualizace funguji parádně - diky za pomoc.

Řeším ještě jednu věc - nevím nakolik je energeticky náročné kontrolovat aktualizaci při každém probuzení a popravdě je to zbytečné. Aktualizaci budu dělat spíš výjimečně takže by stačila kontrola jednou za den.
Problem je že nevím jak nastavit ten čas - při každém uspání se smaže hodnota millis. Asi by bylo řešení kontrolovat skutečný čas z netu ale to už můžu kontrolovat přímo nové verze.
Abych měl jistotu, že aktualizace proběhla nebo neproběhla chci udělat jednoduchou webovou stranku jako log, kde se vypiše info o současné verzi, o tom jestli byla stažena nová verze a jestli korektně proběhl update. Ten log by se mel vypsat při každé kontrole takže je zase zbytečné aby se to vypisovalo každých 10 minut.

Nevím jestli to vubec řešit - z energetické stránky. Pokud to má smysl máte někdo tip jak řešit ten čas?

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od jankop » 06 dub 2018, 08:55

V tomto případě bohužel nevidím rozumné řešení. Při delších intervalech probuzení by se možná dal použít nějaký CMOS čítač, který by externě počítal WakeUp a jeho výstup by se kontroloval z esp8266. Po dosažení nějakého počtu probuzení by se kontrolovala nová verze. Čítač ve statickém režimu obvykle bere velmi málo.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od cz_marek » 06 dub 2018, 09:05

Nejsem žádný expert tak nevím jestli to vubec řešit.
Jestli celý proces toho jak zjistit čas + delší kod + hardware +... vyváží energetickou ztrátu na zjistění nové verze. Prostorově by asi nebyl problém tam dát RTC modul ale jsem zpět na začátku - odběr bude pravděpodobně větší než když to nebudu komplikovat... :-)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od jankop » 06 dub 2018, 09:49

Čítat počet probuzení není tak složité. Čítač CD4040B stojí 7kč a má klidový odběr 40nA. Vstup by se připojil na GPIO16/RESET, reset třeba na CH_PD a vlastně by se resetovat ani nemusel. A vhodný výstup děliče by se četl přes nějaký volný vstup esp8266. Mimo čítač by nebylo třeba prakticky žádné další součástky. Mělo by jít dosáhnou aktivace maximálně po 2048 probuzeních. Pokud budíš jednou za půl hodiny, tak to neřeš. Pokud každou minutu, tak do toho jdi.

cz_marek
Příspěvky: 104
Registrován: 31 led 2018, 09:01
Reputation: 0

Re: ESP 8266 - OTA & Deep Sleep

Příspěvek od cz_marek » 06 dub 2018, 10:08

ten čitač mam myslim i v šupliku v "železných zásobách" - slo mi spíš o komplikovanost celeho řešení.
Buzeni mam jednou za 10minut.
Zkusim to složit a uvidim jaky to bude mit dopad na zivotnost baterky
Diky za rady

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů