• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

httpUpdateSpiffs прояснение ситуации

Const

Member
Всем добра! В arduino ide есть пример httpUpdateSpiffs, в котором показано как реализовать автоматическое обновление с сервера.
C++:
/**
   httpUpdateSPIFFS.ino

    Created on: 05.12.2015

*/

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

#ifndef APSSID
#define APSSID "APSSID"
#define APPSK  "APPSK"
#endif

void setup() {

  USE_SERIAL.begin(115200);
  // USE_SERIAL.setDebugOutput(true);

  USE_SERIAL.println();
  USE_SERIAL.println();
  USE_SERIAL.println();

  for (uint8_t t = 4; t > 0; t--) {
    USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
    USE_SERIAL.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(APSSID, APPSK);

}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    USE_SERIAL.println("Update SPIFFS...");

    WiFiClient client;

    // The line below is optional. It can be used to blink the LED on the board during flashing
    // The LED will be on during download of one buffer of data from the network. The LED will
    // be off during writing that buffer to flash
    // On a good connection the LED should flash regularly. On a bad connection the LED will be
    // on much longer than it will be off. Other pins than LED_BUILTIN may be used. The second
    // value is used to put the LED on. If the LED is on with HIGH, that value should be passed
    ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);

    t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(client, "http://server/spiffs.bin");
    if (ret == HTTP_UPDATE_OK) {
      USE_SERIAL.println("Update sketch...");
      ret = ESPhttpUpdate.update(client, "http://server/file.bin");

      switch (ret) {
        case HTTP_UPDATE_FAILED:
          USE_SERIAL.printf("HTTP_UPDATE_FAILED Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
          break;

        case HTTP_UPDATE_NO_UPDATES:
          USE_SERIAL.println("HTTP_UPDATE_NO_UPDATES");
          break;

        case HTTP_UPDATE_OK:
          USE_SERIAL.println("HTTP_UPDATE_OK");
          break;
      }
    }
  }
}
Меня собственно интересует строчка
C++:
ESPhttpUpdate.updateSpiffs(client, "http://server/spiffs.bin");
Я так понимаю что эта функция как то перестраивает память, а в spiffs.bin какие то данные о перестроении.
Хотелось бы узнать поконкретнее что делает эта функция, что находится в spiffs.bin, и как его скомпилировать?
 

tretyakov_sa

Moderator
Команда форума
Меня собственно интересует строчка
C++:
ESPhttpUpdate.updateSpiffs(client, "http://server/spiffs.bin");
Я так понимаю что эта функция как то перестраивает память, а в spiffs.bin какие то данные о перестроении.
Хотелось бы узнать поконкретнее что делает эта функция, что находится в spiffs.bin, и как его скомпилировать?
Эта строчка загружает полностью образ файловой системы. Так что все данные в файлах которые были на устройстве будут заменены.
Не используйте настройку компиляции lvIP v2 получите проблемы, работайте с v1.4
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs("http://server/spiffs.bin"); Такой вариант тоже работает.
 

Const

Member
Не используйте настройку компиляции lvIP v2 получите проблемы, работайте с v1.4
t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs("http://server/spiffs.bin"); Такой вариант тоже работает.
Не совсем понял что вы имеете ввиду. Это наверное настройки Arduino IDE? Я забыл сказать что программирую в VSCode Platformio.
 

tretyakov_sa

Moderator
Команда форума
Да я имею ввиду именно настройку в arduino ide. И там же вы можете создать образ файловой системы использую плагин.
1596722279733.png
 

Const

Member
На самом деле копать в сторону updateSpiffs стал думая что можно перераспределить размер памяти для httpUpdate. Есть ESP-01, но как реализовать обновление не могу сообразить.
Как определить хватает памяти для обновления или нет?
В скетч добавил код который выводит данные железки:
C++:
  Serial.println("ID ESP8266: " + String(ESP.getChipId()));
  Serial.println("ID flash memory: " + String(ESP.getFlashChipId()));
  Serial.println("Version SDK: " + String(ESP.getSdkVersion()));
  Serial.println("MHz CPU: " + String(ESP.getCpuFreqMHz()));
  Serial.println("MHz memory: " + String(ESP.getFlashChipSpeed()));
  Serial.println("Flash memory SDK: " + String(ESP.getFlashChipSize()));
  Serial.println("Flash memory ID chip: " + String(ESP.getFlashChipRealSize()));
  Serial.println("Free memory: " + String(ESP.getFreeHeap()));
  Serial.println("Free memory sketch: " + String(ESP.getFreeSketchSpace()));
  Serial.println("Size sketch: " + String(ESP.getSketchSize()));
Выод такой:
ID ESP8266: 3510172
ID flash memory: 1327118
Version SDK: 2.2.2-dev(38a443e)
MHz CPU: 80
MHz memory: 40000000
Flash memory SDK: 1048576
Flash memory ID chip: 1048576
Free memory: 44648
Free memory sketch: 417792
Size sketch: 345312
Какая строчка из них показывает размер памяти установленный на ESP? И можно ли реализовать автоматическое обновление с такими параметрами?
 

ааке5е

New member
Sonoff_Loader-master не получается загрузить .как я понимаю нет этих файлов String updatePatch = "http://backup.privet.lv/esp/sonoff/Sonoff_Updater.ino.generic.bin";
и t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(HTTP.arg(spiffsS)); как я понимаю этих файлов больше не существует "http://backup.privet.lv/esp/sonoff/build.0x00000_flash_size_1Mb.256Kb_2017.10.11.bin"
я не очень разбираюсь в программировании может подскажите как исправить эти ошибки . если можно по конкретней так как я не очень разбираюсь
 

ааке5е

New member
Да я имею ввиду именно настройку в arduino ide. И там же вы можете создать образ файловой системы использую плагин.
Посмотреть вложение 9686
Здравствуйте. Подскажите пожалуйста Sonoff_Loader-master не получается загрузить .как я понимаю нет этих файлов String updatePatch = "http://backup.privet.lv/esp/sonoff/Sonoff_Updater.ino.generic.bin";
и t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(HTTP.arg(spiffsS)); как я понимаю этих файлов больше не существует "http://backup.privet.lv/esp/sonoff/build.0x00000_flash_size_1Mb.256Kb_2017.10.11.bin"
я не очень разбираюсь в программировании может подскажите как исправить эти ошибки . если можно по конкретней так как я не очень разбираюсь
 
Сверху Снизу