Программирование ARM Установка среды разработки ESP-IDF для ESP32 Mon, March 04 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Установка среды разработки ESP-IDF для ESP32 Печать
Добавил(а) microsin   

Зайдите на страничку быстрого старта [1]. Найдите ссылку на инсталлятор для Windows [2] (Windows Installer Download). Выберите вариант Universal Online Installer, скачайте исполняемый файл инсталлятора (esp-idf-tools-setup-online-2.14.exe), запустите, пойдет процесс установки. На начальном этапе установки кликните на кнопку Apply Fixes (применить исправления).

ESP IDF setup fig01

После установки исправлений кликните на кнопку Next.

ESP IDF setup fig02

На следующем окне выберите Download ESP-IDF, кликните Next.

ESP IDF setup fig03

На следующем окне выберите последнюю версию (на момент установки это была версия v4.4), при необходимости поменяйте диск для установки (я поменял на M:, потому что на диске C: было мало места).

ESP IDF setup fig04 ESP IDF setup fig05

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

ESP IDF setup fig06 ESP IDF setup fig07

После клика на кнопку Install запустится процесс установки. В окошках с запросами о разрешении установки различных драйверов подтверждайте установку кликом на кнопку "Установить".

ESP IDF setup fig08

Процесс установки займет по времени около 20 минут. После завершения установки на рабочем столе появятся ярлыки Espressif-IDE, ESP-IDF 4.4 CMD и ESP-IDF 4.4 PowerShell. Первый ярлычок запускает среду разработки на основе Eclipse, а последние два командную строку с подсказкой по компиляции проекта.

ESP IDF setup fig09

1. Выберите в меню File -> New -> Espressif IDF Project, откроется окно, где нужно указать произвольное имя для проекта, например hw.

ESP IDF first new project fig10

Кликните Next.

2. Поставьте галочку "Create a project using one of the template". Выберите проект hello_world. Кликните Finish.

ESP IDF first new project fig11

Примечание: завершение шага 2 автоматически создаст папку hello_world для проекта в рабочем каталоге (по умолчанию это каталог workspace, который находится в каталоге установки ESP-IDF, у меня это папка m:\Espressif\frameworks\esp-idf-v4.4\workspace\). В рабочем каталоге также находится папка .metadata, где записаны все текущие настройки ESP-IDF. Может быть несколько рабочих каталогов, и между ними можно переключаться, что бывает довольно удобно. Сохраняйте содержимое папки .metadata, это позволит сохранить состояние рабочего окружения при переустановке ESP-IDF, или при переходе на новый компьютер.

3. В окне Project Explorer появится новая строчка наподобие hello_world [esp-idf-v4.4 8153bfe]. Разверните дерево проекта и ознакомьтесь с его содержимым.

ESP IDF first new project fig12

4. Подключите вашу платку к компьютеру через порт USB. Это может быть платка с мостом USB-UART CP2104, наподобие MINI132 с установленным модулем ESP-WROOM-32, или VGA32_V1.4 с модулем TTGO T-MICRO32.

MINI132 VGA32 V1.4

После подключения на компьютере появится новый COM-порт. В моем случае это оказался COM12.

Примечание: номер (имя) COM-порта можно узнать в Диспетчере Устройств. Имя COM-порта понадобится, когда будем запускать прошивальщик для взаимодействия с загрузчиком платы.

5. Выберите подходящую цель (target) для компиляции. Для этого кликните на шестеренку в третьем выпадающем списке панели инструментов (on:):

ESP IDF first new project fig13

Откроется окно для создания новой цели. В выпадающем списке IDF Target выберите esp32, а в Serial Port выберите порт, который образовался на шаге 4. Кликните Finish.

ESP IDF first new project fig14

6. Скомпилируйте проект через меню Project -> Build Project. Через несколько минут проект скомпилируется, процесс компиляции будет отображаться в окне Console.

ESP IDF first new project fig15

Примечание: в текущей конфигурации может быть несколько открытых проектов. Например, это могут быть проекты для отдельных библиотек. В этом случае пункт меню Build All (Ctrl+B) выполнит сборку всех проектов.

После завершения отобразится текст со статистикой компиляции:

Generated M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/hello_world.bin
[1011/1011] cmd.exe /C "cd /D M:\Espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build\esp-idf\esptool_py
 && python M:/Espressif/frameworks/esp-idf-v4.4/components/partition_table/check_sizes.py --offset 0x8000 partition
 --type app
 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/partition_table/partition-table.bin
 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/hello_world.bin"
hello_world.bin binary size 0x29740 bytes. Smallest app partition is 0x100000 bytes. 0xd68c0 bytes (84%) free.
Build complete (0 errors, 0 warnings): M:\Espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build
m:\Espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe m:\Espressif\frameworks\esp-idf-v4.4\tools\idf_size.py
 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/hello_world.map
Total sizes:
 
Used static DRAM:   11308 bytes ( 169428 remain, 6.3% used)
      .data size:    9028 bytes
      .bss  size:    2280 bytes
Used static IRAM:   45479 bytes (  85593 remain, 34.7% used)
      .text size:   44452 bytes
   .vectors size:    1027 bytes
Used stat D/IRAM:   56787 bytes ( 255021 remain, 18.2% used)
      .data size:    9028 bytes
      .bss  size:    2280 bytes
      .text size:   44452 bytes
   .vectors size:    1027 bytes
Used Flash size :  115147 bytes
      .text     :   84543 bytes
      .rodata   :   30348 bytes
Total image size:  224161 bytes (.bin may be padded larger)
 
m:\Espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe m:/Espressif/frameworks/esp-idf-v4.4//components/
 partition_table/gen_esp32part.py M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/
 partition_table/partition-table.bin
Total time taken to build the project: 209 335 ms

7. Теперь осталось прошить нашу первую программу в память микроконтроллера. Для этого используется UART-загрузчик. Выберите в меню Run -> Run (Ctrl+F11). Если не был выбран COM-порт для подключения на шаге 5, то отроется окно, предлагающее выбрать порт.

ESP IDF first new project fig16

Процесс вывода сообщений загрузчика будет отображаться в окне Console.

[1/5] cmd.exe /C "cd /D M:\Espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build\esp-idf\esptool_py && python
 M:/Espressif/frameworks/esp-idf-v4.4/components/partition_table/check_sizes.py --offset 0x8000 partition --type app
 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/partition_table/partition-table.bin
 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/hello_world.bin"
hello_world.bin binary size 0x29740 bytes. Smallest app partition is 0x100000 bytes. 0xd68c0 bytes (84%) free.
[2/5] Performing build step for 'bootloader'
[1/1] cmd.exe /C "cd /D M:\Espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build\bootloader\esp-idf\esptool_py
 && python M:/Espressif/frameworks/esp-idf-v4.4/components/partition_table/check_sizes.py --offset 0x8000 bootloader
 0x1000 M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build/bootloader/bootloader.bin"
Bootloader binary size 0x62c0 bytes. 0xd40 bytes (12%) free.
[2/3] cmd.exe /C "cd /D M:\Espressif\frameworks\esp-idf-v4.4\components\esptool_py && M:\Espressif\tools\cmake\3.20.3\
 bin\cmake.exe -D IDF_PATH="M:/Espressif/frameworks/esp-idf-v4.4" -D SERIAL_TOOL="python
 M:/Espressif/frameworks/esp-idf-v4.4/components/esptool_py/esptool/esptool.py --chip esp32" -D SERIAL_TOOL_ARGS=
 "--before=default_reset --after=hard_reset write_flash @flash_args" -D 
 WORKING_DIRECTORY="M:/Espressif/frameworks/esp-idf-v4.4/workspace/hello_world/build" -P
 M:/Espressif/frameworks/esp-idf-v4.4/components/esptool_py/run_serial_tool.cmake"
esptool.py esp32 -p COM12 -b 460800 --before=default_reset --after=hard_reset write_flash --flash_mode dio
 --flash_freq 40m --flash_size 2MB 0x1000 bootloader/bootloader.bin 0x10000 hello_world.bin 0x8000 partition_table/
 partition-table.bin
esptool.py v3.2-dev
Serial port COM12
Connecting......
Chip is ESP32-PICO-D4 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, Embedded Flash, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:a1:60:4e:1e:90
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00001000 to 0x00007fff...
Flash will be erased from 0x00010000 to 0x00039fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 25280 bytes to 15788...
Writing at 0x00001000... (100 %)
Wrote 25280 bytes (15788 compressed) at 0x00001000 in 0.7 seconds (effective 279.7 kbit/s)...
Hash of data verified.
Compressed 169792 bytes to 89631...
Writing at 0x00010000... (16 %)
Writing at 0x0001afd3... (33 %)
Writing at 0x0002074e... (50 %)
Writing at 0x00025f94... (66 %)
Writing at 0x0002e5ae... (83 %)
Writing at 0x00036946... (100 %)
Wrote 169792 bytes (89631 compressed) at 0x00010000 in 2.4 seconds (effective 576.3 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 493.7 kbit/s)...
Hash of data verified.
Leaving...
 
Hard resetting via RTS pin...
Executing action: flash
Running ninja in directory m:\espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build
Executing "ninja flash"...
Done

8. Откройте окно терминала через меню Window -> Show View -> Terminal. Кликните на иконку с монитором, или нажмите комбинацию клавиш Ctrl+Alt+Shift+T.

ESP IDF first new project fig17

Откроется окно Launch Terminal, где будет предложено выбрать порт подключения. Выберите порт, который образовался на шаге 4, для кодировки текста выберите UTF-8.

ESP IDF first new project fig18

В окне терминала будет отображен лог наподобие следующего:

Executing action: monitor
Running idf_monitor in directory m:\espressif\frameworks\esp-idf-v4.4\workspace\hello_world
Executing "m:\Espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe m:/Espressif/frameworks/esp-idf-v4.4/tools/
 idf_monitor.py -p \\.\COM12 -b 115200 --toolchain-prefix xtensa-esp32-elf- --target esp32 --revision 0 --print_filter
 m:\espressif\frameworks\esp-idf-v4.4\workspace\hello_world\build\hello_world.elf -m
 'm:\Espressif\python_env\idf4.4_py3.8_env\Scripts\python.exe' 'm:\Espressif\frameworks\esp-idf-v4.4\tools\idf.py'"...
←[0;33m--- idf_monitor on \\.\COM12 115200 ---←[0m
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun  8 2016 00:22:57
 
rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:6612
load:0x40078000,len:14780
load:0x40080400,len:3792
0x40080400: _init at ??:?
 
entry 0x40080694
I (28) boot: ESP-IDF v4.4 2nd stage bootloader
I (28) boot: compile time 07:35:41
I (28) boot: chip revision: 1
I (30) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (37) boot.esp32: SPI Speed      : 40MHz
I (42) boot.esp32: SPI Mode       : DIO
I (47) boot.esp32: SPI Flash Size : 2MB
I (51) boot: Enabling RNG early entropy source...
I (56) boot: Partition Table:
I (60) boot: ## Label            Usage          Type ST Offset   Length
I (67) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (75) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (82) boot:  2 factory          factory app      00 00 00010000 00100000
I (90) boot: End of partition table
I (94) boot_comm: chip revision: 1, min. application chip revision: 0
I (101) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=0778ch ( 30604) map
I (121) esp_image: segment 1: paddr=000177b4 vaddr=3ffb0000 size=02344h (  9028) load
I (125) esp_image: segment 2: paddr=00019b00 vaddr=40080000 size=06518h ( 25880) load
I (139) esp_image: segment 3: paddr=00020020 vaddr=400d0020 size=14a40h ( 84544) map
I (170) esp_image: segment 4: paddr=00034a68 vaddr=40086518 size=04c90h ( 19600) load
I (179) esp_image: segment 5: paddr=00039700 vaddr=50000000 size=00010h (    16) load
I (184) boot: Loaded app from partition at offset 0x10000
I (184) boot: Disabling RNG early entropy source...
I (199) cpu_start: Pro cpu up.
I (199) cpu_start: Starting app cpu, entry point is 0x40080fe8
0x40080fe8: call_start_cpu1 at M:/Espressif/frameworks/esp-idf-v4.4/components/esp_system/port/cpu_start.c:156
 
I (0) cpu_start: App cpu up.
I (213) cpu_start: Pro cpu start user code
I (213) cpu_start: cpu freq: 160000000
I (213) cpu_start: Application information:
I (218) cpu_start: Project name:     hello_world
I (223) cpu_start: App version:      v4.4
I (228) cpu_start: Compile time:     Apr 14 2022 07:34:48
I (234) cpu_start: ELF file SHA256:  3b91a538f4c8b3c7...
I (240) cpu_start: ESP-IDF:          v4.4
I (245) heap_init: Initializing. RAM available for dynamic allocation:
I (252) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (258) heap_init: At 3FFB2C30 len 0002D3D0 (180 KiB): DRAM
I (264) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (270) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (277) heap_init: At 4008B1A8 len 00014E58 (83 KiB): IRAM
I (284) spi_flash: detected chip: gd
I (287) spi_flash: flash io: dio
W (291) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k).
 Using the size in the binary image header.
I (305) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
Hello world!
This is esp32 chip with 2 CPU core(s), WiFi/BT/BLE, silicon revision 1, 2MB embedded flash
Minimum free heap size: 293260 bytes
Restarting in 10 seconds...
Restarting in 9 seconds...
Restarting in 8 seconds...
Restarting in 7 seconds...
Restarting in 6 seconds...
Restarting in 5 seconds...
Restarting in 4 seconds...
Restarting in 3 seconds...
Restarting in 2 seconds...
Restarting in 1 seconds...
Restarting in 0 seconds...
Restarting now.
ets Jun  8 2016 00:22:57

Этот проект я запускал на платке ESP32 MIN132, на которой применен модуль ESP-WROOM-32.

1. Меню New -> Espressif IDF Project, укажите любое имя для проекта, например MyBlink, нажмите Finish.

2. В рабочем каталоге будет автоматически создана папка проекта MyBlink. В этой ппке будет подкаталог main. Скопируйте в эту папку следующие файлы:

Kconfig.projbuild, который надо взять из проекта примеров get-started\blink (полный путь каталогустановкиESP-IDF \ examples \ get-started \ blink \ main \ Kconfig.projbuild), этот файл надо скопировать с заменой.

led_strip.h, который надо взять из папки каталогустановкиESP-IDF \ tinyusb \ tinyusb \ hw \ bsp \ esp32s2 \ components \ led_strip \ include\.

3. Сконфигурируйте проект, для чего двойным щелчком откройте файл sdkconfig, и настройте следующие опции:

Example Configuration: в выпадающем списке Blink LED type выберите GPIO, в поле ввода Blink GPIO number введите 2 (синий светодиод подключен к ножке IO2). Также можно настроить Blink period in ms, это длительность полупериода мигания.

Serial flasher config: здесь настраиваются параметры утилиты, работающей с загрузчиком. Установите Flash size в значение 2 MB. Остальные параметры можно оставить по умолчанию.

4. Откройте файл main.c, удалите в нем весь текст, и вставьте текст из файла каталогустановкиESP-IDF \ examples \ get-started \ blink \ main \ blink_example_main.c.

5. Скомпилируйте проект (меню Project -> Build Project) и прошейте его (Run Ctrl+F11).

Синий светодиод начнет мигать.

[Настройка ESP-IDF]

1. Настройте для себя удобные горячие клавиши для часто используемых действий. Например для пункта меню Project -> Build Project. Это делается в меню Windows -> Preferences, раздел настроек General -> Keys.

Для глобальной сборки всех проектов Build All уже есть горячая клавиша Ctrl+B, но для сборки текущего проекта пока что не назначено никакой горячей клавиши.

Удобно такую клавишу настроить, например на F7. Перейдите в раздел настроек General -> Keys, прокрутите вниз список команд и найдите найдите там Build Project. Выберите Build Project, кликните курсором мыши на поле ввода Binding: и нажмите клавишу F7. После этого кликните внизу на кнопку Apply and Close.

2. Проект конфигурируется через двойной клик на автоматически сгенерированном файле sdkconfig.

В процессе сборки генерируется файл конфигурации проекта sdkconfig, для которого есть удобный графический конфигуратор. Конфигуратор открывается двойным щелчком на файле sdkconfig. Здесь можно настроить многочисленные опциии для проекта, например конфигурацию утилиты взаимодействия с загрузчиком Serial flasher config. Здесь имеет смысл указать размер памяти serial FLASH, используемой для хранения программы. Например, на плате ESP32-VGA32_V1.4 установлен чип ESP-PSRAM64H размером 64 мегабита, или 8 мегабайт. Однако ушлые китайцы иногда устанавливают бракованные чипы, у которых размер памяти в 2 раза меньше, чем должно быть.

3. Настройте автоматическое сохранение перед компиляцией измененных файлов проекта. Это делается через меню Windows -> Preferences, раздел настроек General -> Workspace -> Build, поставьте галочку Save automatically before manual build.

4. Отредактируйте стиль кода по умолчанию. Например, можно отключить "египетский" стиль фигурных скобок для блоков кода, установить размер табуляции, использовать пробелы вместо табуляции. Можно очень гибко настроить оформление кода в редакторе. Это делается через меню Windows -> Preferences, раздел настроек C/C++ -> Code Style -> Formatter. Создайте новый стиль и отредактируйте его свойства.

Установка ESP-IDF на примере Ubuntu 20.04.

Для начала нужно посетить страничку [1] и ознакомиться с ее содержимым. В разделе "Manual Installation" есть ссылка "Linux and macOS", откройте её, и следуйте пошаговым инструкциям.

[Установка утилит и библиотек]

Откройте командную строку терминала, и выполните одну за другой следующие команды:

$ sudo apt-get install git wget flex bison gperf python3 python3-venv cmake ninja-build
 ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

Примечание: для ESP-IDF требуется CMake версии 3.16 или более свежая. Запустите команду tools/idf_tools.py install cmake для установки подходящей версии, если на вашей OS она еще не установлена.

[Установка Python 3]

Проверьте, какая версия python установлена:

$ python3 --version

Если эта команда возвратила ошибку, то значит Python 3 не установлен. Ниже показаны шаги для установки Python 3.

1. Установите Homebrew [5] от имени обычного пользователя (без sudo):

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Запустите следующие 2 команды для добавления Homebrew в пути поиска запускаемых файлов:

$ echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"'
 >> /home/имяпользователя/.profile
$ eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

2. Установка Python 3:

$ brew install python3

3. Установка pip:

$ sudo apt install -y python3-pip

[Установка ESP-IDF]

1. Загрузка ESP-IDF. Откройте терминал и запустите следующие команды:

$ mkdir -p ~/esp$ cd ~/esp$ git clone --recursive https://github.com/espressif/esp-idf.git

ESP-IDF будет загружена в каталог ~/esp/esp-idf.

2. Установка дополнительных инструментов. Помимо самой ESP-IDF, также понадобится для проектов ESP32 установить инструменты, используемые в ESP-IDF, такие как компилятор, отладчик, пакеты Python и т. д.

$ cd ~/esp/esp-idf
$ ./install.sh esp32

Можно установить все необходимое для разных моделей чипов ESP32, например:

$ cd ~/esp/esp-idf
$ ./install.sh esp32,esp32s2

Либо можно установить компоненты и проекты для всех чипов:

$ cd ~/esp/esp-idf$ ./install.sh all

3. Настройте переменные окружения (PATH), чтобы можно было напрямую вызывать скрипт idf.py. Для настройки переменных окружения имеется специальный скрипт export.sh.

$ . $HOME/esp/esp-idf/export.sh

4. Установка менеджера компонентов.

$ pip install idf-component-manager --upgrade

5. Как определить имя подключенного последовательного порта:

$ dmesg | grep tty
[    0.092843] printk: console [tty0] enabled
[ 5219.435244] usb 3-6: cp210x converter now attached to ttyUSB0

[FAQ]

Ошибка выдавалась на безобидный оператор:

fflush(stdout);

Это просто глюк ESP-IDF. В моем случае помогла перезагрузка проекта с компиляцией.

Могут быть 2 варианта решения проблемы. Оба связаны с глюкавостью Eclipse.

Вариант 1. Просто перезапустите среду.

Вариант 2. Если не помог вариант 1, то поможет создание новой цели запуска. Не спрашивайте почему, потому что. Третий выпадающий список на панели инструментов -> New Launch Target...

Вероятно, что существует активное подключение к выбранному COM-порту. Проверьте, что не запущен терминал в среде ESP-IDF или Arduino IDE, либо отдельное окно интерпретатора CMD с запущенным скриптом для консоли.

[Ссылки]

1. Get Started site:espressif.com.
2. Standard Toolchain Setup site:espressif.com.
3. ESP-IDF Eclipse Plugin site:github.com.
4. Чуть подробнее о настройке среды разработки esp-idf для разработки приложений Esp32 site:habr.com.
5. Homebrew site:brew.sh.
6Установка ESP-IDF на Ubuntu.

 

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


Защитный код
Обновить

Top of Page