Прошивка ESP8266 из другой Ардуины с SD картой по UART

Есть Ардуина UNO с SD картой с файлом update.bin, пытаюсь прошить ESP8266 по UART.
Перевожу ЕСП вручную в режим прошивки, запускаю Ардуино Уно , ЕСП показывает, что идет прошивка, но после перезагрузки работает прежняя прошивка, новая не прошилась. Посмотрите, пожалуйста, скетч, чего не хватает?

#include <SD.h>
#include <SPI.h>

const int chipSelect = 10;
void setup() {
  Serial.begin(9600);
  byte buff[512];
  size_t data_read;
  SD.begin(chipSelect);

    File updateFile = SD.open("update.bin");
    while (updateFile.available())
    {
      data_read = updateFile.read(buff, 512);
      if (updateFile) {
        if (Serial.write(buff, data_read) != data_read)
        {
          updateFile.close();
          return;
        }
        updateFile.close();
      }
    }
  }

void loop() {
}

А разве для прошивки достаточно просто в UART запулить кучу байтов? Никаких протоколов не нужно?

Как показывает?

1 лайк

Моргает штатный светодиод.

Нету там индикатора прошивки. Светодиод показывает, что принимаются какие-то данные по UART, а не “идет прошивка”

Хотя даже о том, что данные принимаются, говорить нельзя, просто на линии Rx уровень сигнала туда/сюда скачет. Грубо говоря, этот светодиод загорается каждый раз, когда на линии устанавливается LOW

1 лайк

Что, #3 так и не читал?

я читал. там SLIP какой-то модифицированный, как мне кажется, в смысле формата пакета и расчета контр сумм. Еще читал сорцы этого компонента ESP-IDF, чтобы разобраться. Короче, у меня все получилось, но под штатным тулчейном. Вещь отличная для самообновления железки в продакшене, но требует понимания организации файловой системы в этом чипе.

1 лайк

Если используется WiFi, то обновление через Web-интерфейс вне конкуренции

Можете поделиться, как сделали поподробнее?

За ардуино не скажу.
Если установить VS Code с плугином ESP-IDF, и почитать вот этот репозиторий, все получается. Там как раз пример онлайн обновления. Изменить способ доставки бинарников на сд-карточку/аплоад через веб-страницу/кусками через блутус - можно и нужно. если нужно.

Я скажу

#include <ESP8266HTTPUpdateServer.h>
#include <ESP8266WebServer.h>

ESP8266HTTPUpdateServer httpUpdater;
ESP8266WebServer HTTP(80);

void setup()
{
  HTTP.onNotFound([]()
                  { HTTP.send(404, "text/plan", F("404. File not found.")); });
  
  httpUpdater.setup(&HTTP, "/firmware");
  HTTP.begin();
}

void loop()
{
  HTTP.handleClient();

  delay(1);
}

Строки 1, 4 и 12 отвечают за обновление по воздуху. При обращении по адресу http://your_ip/firmware, где your_ip - IP вашего девайса, попадаете на такую страничку:

Снимок экрана в 2024-08-11 09-34-53.png

Выбираете файл прошивки, жмете Update Firmware, прошивка загружается, девайс автоматом перезагружается и работает на новой прошивке. Т.е. для обновления достаточно смартфона/планшета с файлом прошивки.

В методе httpUpdater.setup(&HTTP, "/firmware"); можно задать логин и пароль для доступа к интерфейсу обновления.

Через веб и ОТА проблем нет, даже если предварительно прошить в есп8266 прошивальщик из штатной библиотеки updater.h тоже проблем нет. Хотелось прошивать из uart , без дополнительных предварительных прошивок есп и в Ардуино.

E:\arduino-ESP\portable\packages\esp8266\tools\python3\3.7.2-post1/python3 -I E:\arduino-ESP\portable\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py --chip esp8266 --port COM2 --baud 921600 --before default_reset --after hard_reset write_flash 0x0 C:\Temp\arduino_build_342888/wemos-telnet.ino.bin 

Хорошо подходит RP2040 с залитым туда питоном

Где ты такую траву берёшь? У меня в папке
c:\Users****\AppData\Local\Arduino15\packages\esp8266\tools
нет папки python3 и всего прочего.

1 лайк

извращенец )))

D:\ARDUINO\arduino-1.8.19\portable\packages\esp8266\hardware\esp8266\3.1.1\tools

D:\ARDUINO\arduino-1.8.19\portable\packages\esp8266\tools\python3\3.7.2-post1

PS заметь, это я до корня мандрагоры ещё не добрался )))

Снёс 8266 и снова установил, иначе не обновлялся. Получилось 3.1.2 и файл нашёлся c:\Users****\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\3.1.2\tools\upload.py

Я рад за тебя, осталось понять (правда надо ли оно) как они у тебя прошивались, тулз видимо где-то еще висит

Никогда не задумывался. Кнопочку загрузить нажимал и…АП и готово. Теперь уже не посмотришь. Версия была 2.0.7 очень старая. Но не обновлялась сама.

оно в два места еще могло положить

Ну уж ты меня совсем не опускай :joy: Места знаю и проверил наличие - отсутствие.