Почему обновления прошивки ESP8266 HTTP не работают?

Я только что потратил на это несколько часов и начинаю сходить с ума. У меня есть код для обновления прошивки по HTTP, работающий на нескольких ESP32. Я пытаюсь адаптировать этот код для работы на ESP8266, но не могу заставить его работать. Я скопировал несколько примеров из интернета, которые работают для всех остальных, не говоря уже о моем собственном коде, который работает на ESP32. Ошибка

Ошибка HTTP_UPDATE_FAILD (-106): Не удалось проверить заголовок Bin

Я бы отнес это к проблеме с URL-адресом bin, однако, когда я копирую/вставляю ссылку в браузер, она нормально загружается, и я даже пробовал использовать тот же URL-адрес, который работает с моими платами ESP32, с тем же результатом. Мой код ниже, и он чертовски близок к приведенному примеру (у меня ядро ESP 3.0.0).

    #include <ESP8266WiFi.h>
    #include <ESP8266HTTPClient.h>
    #include <ESP8266httpUpdate.h>
    
    #define URL_fw_Bin "https://raw.githubusercontent.com/[my profile]/[my project]/main/[firmware].bin"
    
    void setup() {
      Serial.begin(9600);
      WiFi.begin();
      while(WiFi.status()!=WL_CONNECTED){
        delay(1000);
        Serial.print(".");  
      }
    
      WiFiClientSecure client;
      client.setInsecure();
      ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);
      t_httpUpdate_return ret = ESPhttpUpdate.update(client, URL_fw_Bin);
    
      switch (ret) {
      case HTTP_UPDATE_FAILED:
        Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
   
      case HTTP_UPDATE_NO_UPDATES:
        Serial.println("HTTP_UPDATE_NO_UPDATES");
        break;
    
      case HTTP_UPDATE_OK:
        Serial.println("HTTP_UPDATE_OK");
        break;
      }
    }
    void loop() {
    }

, 👍0

Обсуждение

Сообщение об ошибке «Ошибка проверки заголовка двоичного файла» указывает на возможную проблему с заголовком двоичного файла., @tepalia


1 ответ


Лучший ответ:

0

«решили» проблему — это связано с ошибкой в ядре ESP8266 3.0.0. Использование ядра 2.7.4 решает проблему. Эта проблема, похоже, описывает проблему, но, возможно, исправление еще не дошло до полной версии:

https://github.com/esp8266/Arduino/issues/8079

,