Skocz do zawartości

PlatformIO ESP-12 4MB - zły rozmiar pliku bin przy http update


Pomocna odpowiedź

(edytowany)
7 godzin temu, kostuch napisał:

Pierwszy raz zawsze jest trudny 😉

 

Funkcja update to coś takiego (callbacki onCośtam są opcjonalne):

void update()

{

  WiFiClient wifi_client;

  // Add optional callback notifiers

  ESPhttpUpdate.onStart(update_started);

  ESPhttpUpdate.onEnd(update_finished);

  ESPhttpUpdate.onProgress(update_progress);

  ESPhttpUpdate.onError(update_error);

  String new_file = F("http://www.tam.gdzie/jest/plik/firmware.bin");

  t_httpUpdate_return ret = ESPhttpUpdate.update(wifi_client, new_file);

 

  switch (ret)

  {

  case HTTP_UPDATE_FAILED:

    Serial.printf(PSTR("HTTP_UPDATE_FAILED 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:

    break;

  }

}

 

I to tyle... 🙂

 

Hm, dałem erase flash, wgralem twój kod.... i po pobraniu drufiego czystego z inna nazwa po reboocie wstaje do wersji która miałem naLiteFS - mózg mi wymięka 😞

 

111
_________________

Connected to WiFi
IP address:
192.168.0.72
111
Nowsza wersja..... wgrywanie !

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v0007a1d0
@cp:0
ld
200
_________________

Creating AP...

Wgrywałem zarówno blank4mb.bin jak i sketch:

#include <ESP8266WiFi.h>
#include <ESP8266httpUpdate.h>

void eraseOTAPartitions() {
  WiFi.disconnect(); // Disconnect from WiFi network
  ESPhttpUpdate.rebootOnUpdate(false); // Disable automatic reboot after firmware update

  // Erase OTA partitions
  ESP.eraseConfig();
  
  ESPhttpUpdate.rebootOnUpdate(true); // Enable automatic reboot after firmware update
}

void setup() {
  Serial.begin(9600);
  delay(1000);

  Serial.println("Erasing OTA partitions...");
  eraseOTAPartitions();
  Serial.println("OTA partitions erased.");
}

void loop() {
  // Do nothing
}

A mimo to p wgraniu poprawnego pliku na serwer za każdym razem wraca mi do wersji 200, czyli dawno skasowanej 😕

Edytowano przez Bullseye

Wywal w końcu tą partycję z fs. Do niczego w tym momencie jej nie potrzebujesz, a zaciemnia Ci obraz.

Co za eraseconfig i eraseotapartitions()??? Zapomnij o tym.

Skompiluj i wgraj (lokalnie przez COM) najprostszy program do upgrade:

void setup()

{

// Połączenie z wifi - co kto lubi - we własnym zakresie

printf("Wersja fabryczna");

WiFiClient wifi_client;

t_httpUpdate_return ret = ESPhttpUpdate.update(wifi_client, "http://www.sciezka.do/nowego/pliku/firmware.bin");

  switch (ret)

  {

  case HTTP_UPDATE_FAILED:

    printf("HTTP_UPDATE_FAILED Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); break;

  case HTTP_UPDATE_NO_UPDATES:

    printf("HTTP_UPDATE_NO_UPDATES"); break;

  case HTTP_UPDATE_OK:

    printf("update"); break;

}

void loop() {}

Potem zmien w kodzie cokolwiek, np komunikat printf("Wersja nowsza niz fabryczna");

skompiluj

wrzuć firmware.bin na serwer www

uruchom to co poprzednio wgrałeś do esp.

MUSI zadziałać

@kostuch kody programów należy umieszczać za pomocą odpowiedniego narzędzia dostępnego w edytorze (przycisk "Wstaw kod programu"). Programy są wtedy prezentowane w czytelny sposób, a ich składania jest kolorowana. Tym razem poprawiłem to za Ciebie, ale pamiętaj o tej opcji w przyszłości. Z góry dziękuję za zrozumienie i pomoc w utrzymaniu porządku 🚀

 

Wszystko już działa, ale za chiny nie jestem w stanie znaleźć przyczyny czemu firware wraca do starych wersji z początku zabawy gdy ustawię mu w adresie starą nazwę /pliku/firmware.bin, po zmianie choćby nazwy na firmware1.bin wszystko się aktualizuje tak jak powinno.

Jak masz na serwerze www kilka wersji firmware, to po prostu zrobi aktualizację do wskazanej wersji.

Wskażesz stary plik, to efektywnie wyjdzie downgrade a nie upgrade. Sam musisz zadbać o logikę ota.

 

 

  • Lubię! 1

Problem w tym ze na serwerze mam jeden plik o danej nazwie w folderze ktory odczytuje 🙂 nie mam zielonego pojecia czemu przywraca wersje sprzed tygodnia…. Nawet pobranie recznie pliku bin powoduje wgranie nowej wersji. Dodam ze na serwerze nie ma zadnych innych plikow a starego bina nie mam juz dawno.

Restartowalem Router, serwer, wylaczalem memcache, zerowalem eeprom - cuda na kiju 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...