• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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"
я не очень разбираюсь в программировании может подскажите как исправить эти ошибки . если можно по конкретней так как я не очень разбираюсь
 
Сверху Снизу