«Заливка» откомпилированного в Arduio IDE bin кода в ESP32/ESP8266

Иногда возникает ситуация, когда нужно переслать бинарь откомпилированный, например, под Arduino IDE кому-то для заливки на микроконтроллер. Например, чтобы не восстанавливать на удаленной стороне полную компию среды разработчика со всеми необходимыми библиотеками.

Установка ESPTOOL

python -m pip install --upgrade pip
pip install esptool --upgrade
или
pip install esptool -U

Подготовка bin файлов проекта

Чтобы «залить» бинарные файлы в микроконтроллер используется следующая последовательность шагов:

  • Включить детализацию upload Arduino IDE: File -> Preferences -> Show verbose output during: -> Upload.
  • Запустить загрузку (upload) скетча на DevKit board с помощью Arduino IDE.
  • В деталях загрузки появится строчки, что-то вроде:
C:\Users\{YOUR_NAME}\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\2.6.1/esptool.exe --chip esp32 --port COM13 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 C:\Users\{YOUR_NAME}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2/tools/partitions/boot_app0.bin 0x1000 C:\Users\{YOUR_NAME}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2/tools/sdk/bin/bootloader_dio_80m.bin 0x10000 C:\Users\{YOUR_NAME}\AppData\Local\Temp\arduino_build_352344/{SKETCH_NAME}.ino.bin 0x8000 C:\Users\{YOUR_NAME}\AppData\Local\Temp\arduino_build_352344/{SKETCH_NAME}.ino.partitions.bin 
  • Для загрузки бинарного файла esptools необходимы несколько бинарных файлов:
    • boot_app0.bin — загружается по адресу 0xe000.
    • bootloader_dio_80m.bin — загружается по адресу 0x1000.
    • {SKETCH_NAME}.ino.bin — загружается по адресу 0x10000.
    • {SKETCH_NAME}.ino.partitions.bin — загружается по адресу 0x8000.
  • По пути к бинарному файлу (в моем случае путь «C:\Users\{YOUR_NAME}\AppData\Local\Temp\arduino_build_352344/») находим два нужный бинарника проекта {SKETCH_NAME}.ino.*.bin и сохраняем их в отдельной папке для дальнейшей отправки на удаленную сторону.
  • Добавляем в папку boot_app0.bin и bootloader_dio_80m.bin.
  • Архивируем папку и отправляем на удаленную сторону.

Загрузка в ESP bin файлов проекта

  • На удаленной стороне архив с bin файлами распаковывается в папку Temp.
  • Ему также пересылается команда, которая была перехвачена ранее при отправке Arduino IDE бинарника в ESP. Пути к бинарникам ({SKETCH_NAME}) должны быть скорректированы. Команда что-то вроде:
%LOCALAPPDATA%\Arduino15\packages\esp32\tools\esptool_py\2.6.1\esptool.exe --chip esp32 --port COM13 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 C:/Temp/{SKETCH_NAME}/boot_app0.bin 0x1000 C:/Temp/{SKETCH_NAME}/bootloader_dio_80m.bin 0x10000 C:/Temp/{SKETCH_NAME}/{SKETCH_NAME}.ino.bin 0x8000 C:/Temp/{SKETCH_NAME}/{SKETCH_NAME}.ino.partitions.bin 
  • Убедится, что:
    • Путь к esptool.exe корректный. Версии на стороне разработчика и удаленной могут различаться.
    • Указан корректный COM порт и скорость для него.
    • Внести исправления в команду, если найдены расхождения.
  • Открыть командную строку (например, cmd.exe).
  • Запустить вышеуказанную команду.
  • Должна появится последовательность загрузки что-то вроде:
esptool.py v2.6
Serial port COM13
Connecting....
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 80:7d:3a:f4:74:e4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...

Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 13107.5 kbit/s)...
Hash of data verified.
Compressed 15328 bytes to 9994...

Writing at 0x00001000... (100 %)
Wrote 15328 bytes (9994 compressed) at 0x00001000 in 0.1 seconds (effective 915.1 kbit/s)...
Hash of data verified.
Compressed 365136 bytes to 171906...

Writing at 0x00010000... (9 %)
Writing at 0x00014000... (18 %)
Writing at 0x00018000... (27 %)
Writing at 0x0001c000... (36 %)
Writing at 0x00020000... (45 %)
Writing at 0x00024000... (54 %)
Writing at 0x00028000... (63 %)
Writing at 0x0002c000... (72 %)
Writing at 0x00030000... (81 %)
Writing at 0x00034000... (90 %)
Writing at 0x00038000... (100 %)
Wrote 365136 bytes (171906 compressed) at 0x00010000 in 3.1 seconds (effective 947.5 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 143...

Writing at 0x00008000... (100 %)
Wrote 3072 bytes (143 compressed) at 0x00008000 in 0.0 seconds (effective 4096.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Бинарные файлы успешно «залиты» в микроконтроллер.

«Заливка» bin файлов OTA (Over The Air)

python espota.py -d -i 192.168.1.10 -f {SKETCH_NAME}.ino.bin
  • Естественно такой вариант «заливки» обновлений не подходит для IoT устройств работающих по GSM, поскольку они находятся за NAT-ом оператора сотовой связи.
Spread the love
Запись опубликована в рубрике IT рецепты. Добавьте в закладки постоянную ссылку.

Добавить комментарий