Превратите ESP8266 в «загрузчик скетчей» типа Arduino IDE (через аппаратный последовательный порт)
У меня есть модуль ESP8266, который загрузил шестнадцатеричный файл для Arduino Mega2560. Этот шестнадцатеричный файл (назовём его mega2560.hex) находится в файловой системе SPIFFS ESP. Я хочу эмулировать поведение среды разработки Arduino при нажатии кнопки загрузки скетча (только в моём случае скетч уже скомпилирован и готов к загрузке). Мне нужна какая-нибудь библиотека или небольшой пример кода, которые помогут мне в этом. На стороне Mega процессор перезапустится, а загрузчик дождётся шестнадцатеричного файла, получит его от ESP и запишет в память приложения.
Вот базовая структура:
// Код для ESP8266
SoftwareSerial mega(D1, D2); // поскольку аппаратный последовательный порт занят для последовательного монитора
// Mega будет использовать свой аппаратный последовательный порт (Tx1, Rx1)
void setup()
{
Serial.begin(115200); // используем аппаратный последовательный порт
mega.begin(115200); // подключиться к mega
SPIFFS.begin();
File hexfile = SPIFFS.open("mega2560.hex", "r");
// "загрузка" в стиле IDE
upload(mega, hexfile);
Serial.println("Done uploading.");
hexfile.close();
}
// эмулировать поведение загрузки, подобное Arduino IDE
void upload(SoftwareSerial& mega, File& hexfile)
{
// перезагрузите Mega, чтобы запустить загрузчик, который сначала будет ждать принятия нового шестнадцатеричного файла
reset(mega);
// отправляем шестнадцатеричный файл загрузчику для его принятия и сохранения во флэш-памяти Mega
send(mega, hexfile);
// перезагрузите Mega, чтобы снова запустить загрузчик, на этот раз так, чтобы можно было запустить ранее загруженный шестнадцатеричный файл
reset(mega);
}
Я сравнительно недавно начал работать с загрузчиками и хотел бы узнать, подходит ли приведённый выше код сверху вниз для достижения моей цели. Можно ли просто сбросить настройки Mega и перенести данные, как обычно, через последовательный порт в «окне ожидания» загрузчика? Или есть ещё какие-то моменты, которые я упускаю.
Я стараюсь избегать использования ISP или SPI, потому что это также сотрет загрузчик Mega, а я хочу сохранить загрузчик.
@First User, 👍4
Обсуждение2 ответа
Я использую прошивку esp-link на ESP8266. При размещении загрузчика Arduino Uno на любой плате с ATmega328 среда Arduino IDE может программировать Arduino с версией «Arduino Uno Wifi» (обычно она находится внизу списка плат AVR).
В прошивке esp-link уже предустановлена служба mDNS для Arduino. Если эта служба включена, Arduino IDE сможет определить IP-адрес. Эта прошивка es-link работает как маршрутизатор и требует настройки для доступа к маршрутизатору, к которому подключен компьютер с Arduino IDE.
Интерфейс прошивки esp-link интуитивно понятен, а для подключения к микроконтроллеру требуются только RX, TX и Reset, а также программатор через последовательный порт (или преобразователь USB-Serial, такой как FTDI232).
Прошивка esp-link подключает микроконтроллер к Интернету. с использованием Wi-Fi-модуля ESP8266

См. здесь: https://github.com/jeelabs/esp-link
есть проблема с запуском Arduino Mega, @Juraj
Было бы интересно посмотреть на проблемы в репозитории esp-link, вместо того, чтобы понижать рейтинг сторонних ответов., @R R
отрицательная оценка не связана с комментарием., @Juraj
Ваша задача по программированию AVR через последовательный порт с ESP8266 SPIFFS весьма специфична. Вы можете использовать библиотеку «dfu». У меня есть её версия для Arduino здесь. Она была создана arduino.org для первой прошивки WiFiLink для Uno WiFi с ESP8266. Вот пример использования.
При использовании ISP/SPI можно использовать библиотеку ESP8266AVRISP. Она входит в комплект ядра Arduino esp8266. В ней есть пример.
По последовательному интерфейсу, но без хранилища SPIFFS, esp8266 также может использоваться как прямой сетевой прокси для avrdude, где avrdude работает через сетевой порт, взаимодействуя с простым скетчем «сеть-последовательный», работающим на esp8266.
Кроме того, Arduino Mega может выполнять самообновление с помощью моей библиотеки ArduinoOTA, а среди прочих вариантов транспортировки обновленных двоичных файлов библиотека ArduinoOTA может использовать мою библиотеку WiFiEspAT, которая работает с ESP8266 или ESP32 с прошивкой AT.
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
- Программирование ATMEGA2560 с использованием FTDI
- Загрузка кода Arduino, OTA, через подключенный ESP8266-12E с запущенным Esp-Link
- Проблема с WiFi на Mega + WiFi R3 ATmega2560 + ESP8266
- Последовательная связь arduino mega и D1 Wemos Mini
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Ошибка ESP8266 error: espcomm_upload_mem failed while uploading sketch
Да, вы мыслите в правильном направлении. Можно просто сбросить настройки Mega, чтобы запустить загрузчик Mega, но нельзя просто передавать байты через последовательный порт. Загрузчик Arduino использует команды STK500 для надёжного установления связи. AVRdude использует тот же протокол для взаимодействия с Arduino. Вот ссылка, которая может вам помочь: https://www.electronicwings.com/arduino/basics-to-developing-bootloader-for-arduino, @Fahad
другой вариант https://github.com/JAndrassy/lab/blob/master/AvrDudeTelnet/AvrDudeTelnet.ino, @Juraj