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

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

Установка ESPTOOL

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

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

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

  • Включить детализацию 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.
  • Архивируем папку и отправляем на удаленную сторону.

Подготовка bin файлов (Compilation)

Иногда случаются ситуации, когда под рукой нет нужного DevKit для компиляции и upload проекта. Это самый правильный вариант формирования нужных bin файлов проекта.

В этом случае можно скомпилировать бинарники без upload, а затем добавить нужные bin файлы bootloader_ {flash_mode}_{flash_freq}.bin и boot_app0.bin. В идеале если ранее уже выполнялся upload и есть информация о том, какие бинарные файлы нужны для загрузки, адреса загрузки и сами bin файлы boot_app0.bin и bootloader_ bootloader_ {flash_mode}_{flash_freq}.bin уже есть в наличии. Если нужных бинарников нет после выполнения upload, то можно попробовать взять их в SDK.

Например, для примера с flash_mod=dio и flash_freq=80 файл bootloader_dio_80m.bin находится в папке:

C:\Users\[UserName]\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.1\tools\sdk\bin 

Файл boot_app0.bin можно взять в папке:

C:\Users\[UserName]\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.1\tools\partitions

Для компиляции используется следующая последовательность:

  • Включить детализацию upload Arduino IDE: File -> Preferences -> Show verbose output during: -> Compilation.
  • Запустить компиляцию (Compilation) скетча на DevKit board с помощью Arduino IDE.
  • В логах найти строчку с нужными бинарниками проекта {SKETCH_NAME}.ino.bin и {SKETCH_NAME}.ino.partitions.bin:
"C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.2/tools/gen_esp32part.exe" -q "C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.2/tools/partitions/default.csv" "C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Temp\\arduino_build_898429/{SKETCH_NAME}.ino.partitions.bin"
"C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esptool_py\\2.6.1/esptool.exe" --chip esp32 elf2image --flash_mode dio --flash_freq 80m --flash_size 4MB -o "C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Temp\\arduino_build_898429/{SKETCH_NAME}.ino.bin" "C:\\Users\\{YOUR_NAME}\\AppData\\Local\\Temp\\arduino_build_898429/{SKETCH_NAME}.ino.elf"
esptool.py v2.6
  • Отправить все бинарники на удаленную сторону.

Загрузка в 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 файлы из архива в папку Temp. Т.е. должно получится C:\Temp\SensorSpider\*.bin
  • Подключить по USB микроконтроллер.
  • Посмотреть какой порт назначился в Windows.
  • В команде ниже указать правильный COM порт и путь к файлу
esptool.exe %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 >{SKETCH_NAME}Upload.txt
  • Выполнить команду.
  • Посмотреть {SKETCH_NAME}Upload.txt , убедившись, что нет ошибок в путях и команда отработала успешно.
  • Переслать файл {SKETCH_NAME}Upload.txt с результатами заливки разработчику.

«Заливка» 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 рецепты. Добавьте в закладки постоянную ссылку.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *