• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом Настройка Windows и Eclipse для ESP32

Andrey L

Member
Для работы с ESP32 вначале мы установим «тулчан» от производителя, научимся компилировать и прошивать при помощи терминала. Потом настроем Eclipse IDE и все операции сделаем там.

Инструкции взяты с сайта Get Started — ESP-IDF Programming Guide v4.0-dev-728-g826ff7186 documentation.


Скачиваем и распаковываем «тулчан»
На данный момент последний «тулчан» готов к скачиванию по этому https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20181001.zip адресу.

Распакуем содержимое архива прямо на диск С:, чтобы всё начиналось с адреса «C:\msys32».

Теперь заходим в эту папку и запускаем там «mingw32.exe» (C:\msys32\mingw32.exe). Откроется окно терминала «тулчана».

В терминале вводим команду «mkdir -p ~/esp» (создаётся новая папка «esp»). После зайдём в эту папку, введя в терминале команду «cd esp/».


Скачаем ESP-IDF
Мы уже находимся в терминале в папке «~/esp», теперь загрузим туда «ESP-IDF» командой в терминале «git clone --recursive https://github.com/espressif/esp-idf.git».


Настраиваем переменную IDF_PATH
В папке «C:/msys32/etc/profile.d/» создаём новый файл «export_idf_path.sh». В этом файле сохраняем строчку «export IDF_PATH="C:/msys32/home/user-name/esp/esp-idf"». (Не забудьте поменять там user-name на имя вашего пользователя). После чего перезапустите терминал.

В перезапущенном терминале проверяете значение заданной переменной командой «printenv IDF_PATH», должен отобразиться путь, который мы только что указали.


Теперь скачаем нужные пакеты Python
В терминале вводим «python -m pip install --user -r $IDF_PATH/requirements.txt». Проверить установку можно командой «python --version».


Первый проект или Hello World
Используем уже готовый «привет мир» из примеров, которые дают вместе с «ESP-IDF».

В терминале сначала вводим первую команду «cd ~/esp» (переходим в нужный каталог).

Там мы копируем нужный проект командой «cp -r $IDF_PATH/examples/get-started/hello_world .».

После чего мы заходим внутрь нового католога «cd hello_world/». (Или же «cd ~/esp/hello_world»).


Определение COM-порта.
Возможно вам для ESP32 понадобится установить драйвер, его можно будет скачать с сайта Establish Serial Connection with ESP32 — ESP-IDF Programming Guide v4.0-dev-728-g826ff7186 documentation

Теперь откроем «Device Manager», для этого нажмём комбинацию клавиш Windows+R, и в командную строку вводим «devmgmt.msc» и нажимаем на кнопку «OK».

После этого откроется окно «Device Manager», там мы ищем рубрику «Ports (COM & LPT)», открываем её. Там мы смотрим через какой COM-порт было подключено устройство. У меня это COM11, у вас может быть что-то другое.


Настройка
Когда мы определили номер COM-порта, можно внести его в настройки.

Напоминаю, мы находимся в папке «~/esp/hello_world». И в терминале вводим команду «make menuconfig».

Вскоре в терминале откроется менюшка, там мы переходим по «Serial flasher config» → «Default serial port», в той строчке вводим COM-порт, через который подсоединилась ESP32. У меня это «COM11».

После чего выбираем «Exit» два раза, после чего выбираем «Yes», чтобы сохранить изменения.

Для сохранения данных понадобится некое время.


Компиляция и прошивка
Это делается командой в терминале «make flash». (Не забудьте перегрузить ESP32 в режиме прошивки.)


Мониторинг
Так же есть команда в терминале, чтобы посмотреть, что выводит модуль через COM-порт.

Эта команда - «make monitor».

Чтобы выйти из этого режима нажмите клавиши Ctrl+].


Мониторинг при помощи PUTTY
Запускаем PUTTY. В строке «Connection type:» выбираем «Serial». В поле «Serial line» вводим «COM11» (у вас скорее всего будет дрогой COM-порт), а в поле «Speed» вводим «115200», после чего жмём на кнопку «Open».


Возможные ошибки при прошивке
«A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header» - вы забыли перезагрузить ESP32 в режим прошивке.


«serial.serialutil.SerialException: could not open port 'COM11': WindowsError(2, 'Система не может найти указанный файл.')» - по данному COM-порту не удалось найти ESP32. (Проверьте в «Device Manager», через который COM-порт подсоединён модуль.)


«serial.serialutil.SerialException: could not open port 'COM11': WindowsError(5, 'Доступ запрещён')» - с модулем уже установлено соединение другой программой (PUTTY, другой терминал с мониторингом). Проверьте все запущенные программы.
 

Andrey L

Member
Изначальные установки
Предполагается, что на компьютере с Windows уже установлены
  • Eclipse IDE,
  • ESP-IDF,
  • python нужной версии.
Так же мы знаем номер COM-порта, через который подключается ESP32. (У меня в примерах это COM11, у вас может быть совсем другой, не забудьте поменять.)


Импорт нового проекта
Запускаем Eclipse IDE, выбираем «File» → «Import...».
В новом окне переходим по «C/C++» → «Existing Code as Makefile Project» и кликаем на кнопку «Next >».
В новом окне в поле «Existing Code Location» вводим путь до папки с новым проектом. (Используем кнопку «Browse...», чтобы выбрать нужную папку.) В непосредственно в этой папке должен быть файл «Makefile». А в поле «Toolchain for Indexer Settings» выбираем «Cross GCC». После чего кликаем на кнопку «Finish».


Настройки проекта
В окне Eclipse IDE «Project Explorer» кликаем правой клавишей мышки по проекту, во всплывшем контекстном меню выбираем «Properties» или нажимаем комбинацию клавиш ALT+Enter.

В новом окне переходим в «C/C++ Build» → «Environment». Окно должно перезагрузиться. Кликаем на кнопку «Add...», в поле «Name:» вводим «BATCH_BUILD», а в поле «Value:» вводим «1» и нажимаем на кнопку «OK». Вновь кликаем на кнопку «Add...», в поле «Name:» вводим «IDF_PATH», а в поле «Value:» вводим путь до папки «esp-idf» (копируем его из Windows Explorer) и нажимаем на кнопку «OK». Потом выбираем переменную «PATH» и нажимаем кнопку «Edit...», в самый конец значения поля «Value:» дописываем «;C:\msys32\mingw32\bin;C:\msys32\opt\xtensa-esp32-elf\bin;C:\msys32\usr\bin» и нажимаем на кнопку «OK». (Если вы распаковали архив с «esp32» в другое место, то вам придётся подправить пути.)

Теперь переходим в «C/C++ General» → «Preprocessor Include Paths, Macros etc.». Окно должно перезагрузиться. Выбираем закладку «Providers». В списке выбираем «CDT Cross GCC Built-in Compiler Settings» и в поле «Command to get compiler specs» заменяем на «xtensa-esp32-elf-gcc ${FLAGS} -std=c++11 -E -P -v -dD "${INPUTS}"». После в списке выбираем «CDT GCC Build Output Parser» и значение поля «Compiler command pattern» меняем на «xtensa-esp32-elf-(gcc|g\+\+|c\+\+|cc|cpp|clang)».

После переходим в «C/C++ General» → «Indexer». Окно должно перезагрузиться. Активируем поле «Enable project specific settings». Теперь можно будет изменять остальные настройки в этом окне. Убираем галочку у поля «Allow heuristic resolution of includes». (Если это не сделать, могут появляться неожиданные ошибки.)

Напоследок переходим в «C/C++ Build», открываем там закладку «Behavior». И активируем там «Enable parallel build».

И заканчиваем настройку проекта — нажимаем на кнопку «Apply and Close».

Не забудьте, в терминале зайти в папку проекта и там запустить команду «make menuconfig», чтобы указать к какому COM-порту подсоединён модуль.

Прошивка из Eclipse
Вновь в окне Eclipse IDE «Project Explorer» кликаем правой клавишей мышки по проекту, во всплывшем контекстном меню переходим в «Build Targets» → «Create...».

Откроется новое окно, в поле «Target name:» вводим «flash». Остальные пункты не изменяем, а жмём на кнопку «OK».

Теперь мы можем при помощи «Project» → «Build Target» → «Build» или (Shift+F9) скомпилировать код и прошить ESP32.


Оригинал инструкции
Build and Flash with Eclipse IDE — ESP-IDF Programming Guide v4.0-dev-728-g826ff7186 documentation
 

pvvx

Активный участник сообщества

Алексей.

Active member
Для разнообразия и при нежелании впадать в зависимость от Microsoft (в современных условиях разваливающегося мира (США) с санкциями).
Под виндовсом устанавливая Эклипс не желаем впадать в зависимость от Микрософт, ерунда какая то, а как же независимость для ОС?

П. С.
Для сборки прошивки esp32 гнутым мейком из под эклипса, даже никаких тулчейнов устанавливать не требуется.
 

pvvx

Активный участник сообщества
Под виндовсом устанавливая Эклипс не желаем впадать в зависимость от Микрософт, ерунда какая то, а как же независимость для ОС?
ОС, если установлена, уже куплена и не требует регистрации, как Visual Studio Code.
Информация о пользователе ныне платная. К примеру, при регистрации на некоторых сайтах (blockchain.com, ...) европейцам дают к $50, россиянам $20.
В итоге Visual Studio Code уже не бесплатная :p
Шутки-шутками, но видимо вы не работали с продуктами мелкомягких...
 

Andrey L

Member
Заканчивайте "религиозные" войны.

Я сделал инструкцию для Eclipse, поскольку про неё написано на сайте espressif.com, писали бы они про Visual Studio Code, описал бы её.

@enjoynering
Если Вы желаете, чтобы люди больше пользовались VSC, то напишите инструкцию, как это делать.
 

nikolz

Well-known member
Andrey L,
Не расстраивайтесь,
здесь всегда так.
Вы делитесь своим опытом,
а вам норовят нассать в чайник.
 

enjoynering

Well-known member
Вы делитесь своим опытом,
а вам норовят нассать в чайник.
вот совершенно с другой целью писал. ставил я этот eclipse раза 3, в течении 15 лет, под разные проекты, каждый раз надеясь, что тормоза и кривость исправлена, а нет все по старому. единственное где eclipse оправдан - это linux. под win лучше Visual Studio Code.
 

pvvx

Активный участник сообщества
Заканчивайте "религиозные" войны.
Тут нет религиозных войн.
Я сделал инструкцию для Eclipse, поскольку про неё написано на сайте espressif.com
Имеются такие вопросы:

В Windows 10 уже есть Windows Subsystem for Linux (WSL), а у вас зачем-то устанавливается mingw32 и прочие "тулчейн", да ещё и по фиксированным путям на диск "C:".
1) Что необходимо изменить и в каком пункте в вашей инструкции, чтобы задействовать WSL?
2) Если на диске "C:" у пользователя нет места, или есть другие причины не ставить этот сброд туда, тогда что делать?
(Купить специальный комп для побаловаться с ESP32 не предлагать - и так уже несколько компов...)
вот совершенно с другой целью писал. ставил я этот eclipse раза 3, в течении 15 лет, под разные проекты, каждый раз надеясь, что тормоза и кривость исправлена, а нет все по старому. единственное где eclipse оправдан - это linux. под win лучше Visual Studio Code.
Странно - использую несколько вариантов eclipse (под разные конфиги), есть и Visual Studio всех версий. Глобальных отличий или глюкавостей не наблюдается много лет, кроме навязчивой рекламы от мелкомягких в почте и прочем (если всё зарегистрировано).
 

Алексей.

Active member
В терминале вводим «python -m pip install --user -r $IDF_PATH/requirements.txt». Проверить установку можно командой «python --version».
python --version выводит только версию питона, но никак не результат обработки requirements.txt, результат виден в выводе питона чуть раньше :)
Совершенно не понятно для чего перед вызовом питона устанавливать IDF_PATH? Достаточно указать полный путь к requirements.txt
Пытался установить, но свободного места на диске C не оказалось, да и пользователя с именем user-name у меня небыло. Поэтому устанавливал esp-idf в корень.
Запустил mingw32.exe и склонировал esp-idf
Код:
$ git clone --recursive https://github.com/espressif/esp-idf.git /esp-idf
Не выгружая mingw32.exe выполнил послеустановочный скрипт на питоне, указав полный путь до requirements.txt
Код:
$ python -m pip install --user -r /esp-idf/requirements.txt
Requirement already satisfied: setuptools in d:/msys32/mingw32/lib/python2.7/site-packages (from -r D:/msys32/esp-idf/requirements.txt (line 4)) (40.4.3)
.....................................
Installing collected packages: pyelftools
  Running setup.py install for pyelftools ... done
Successfully installed pyelftools-0.25
Не стал устанавливать в msys32/etc/profile.d/export_idf_path.sh переменную IDF_PATH, пустое, не будем собирать проект запуская mingw32.exe, собираем гнутым мейком установив окружение из командной строуи или из эклипса.
Не выходя из mingw32.exe создал в корне директорию /code (там будут жить проекты), скопировал пример и перешел в эту директорию /code/hello_world
Код:
mkdir /code && cp -r /esp-idf/examples/get-started/hello_world/ /code/ && cd /code/hello_world
В ней отсутствует sdkconfig, его можно создать выполнив make menuconfig как из командной строки, так и из mingw32.exe.
В консоли виндовс представление псевдографики при выполнении make menuconfig жуткое, поэтому один раз выполню из mingw32.exe, так получше.
Переменную IDF_PATH устанавливаю перед вызовом make, настройки никакие не делаю, просто выхожу с сохранением нового конфига.
Код:
$ IDF_PATH=/esp-idf make menuconfig
Python requirements from D:/msys32/esp-idf/requirements.txt are satisfied.
DEFCONFIG
MENUCONFIG
configuration written to /code/hello_world/sdkconfig

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

GENCONFIG
Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "hello-world" version: 1


Предполагается, что на компьютере с Windows уже установлены

Eclipse IDE,
ESP-IDF,
python нужной версии.

Так же мы знаем номер COM-порта, через который подключается ESP32. (У меня в примерах это COM11, у вас может быть совсем другой, не забудьте поменять.)
Насколько я понял, устанавливать осталось только эклипс. Питон мы уже получили установив (развернув) снапшот из esp32_win32_msys2_environment_and_toolchain-20181001.zip и есп-идф тоже установили, клонировав его из гитхаба и выполнив послеустановочный скрипт.

Для эклипса осталось только настроить окружение в проекте, установить IDF_PATH и для переменной PATH, которая наследуется от PATH из ОС, добавить в начало путь
до msys-а(для гнутого make.exe), до бин директории мин-гв(для питонов всяких там) и до компилятора xtensa-esp32
В окружении проекта устанавливаю
IDF_PATH=D:/msys32/esp-idf
PATH=D:/msys32/usr/bin;D:/msys32/mingw32/bin;D:/msys32/opt/xtensa-esp32-elf/bin;C:/Program Files/Java/jre1.....
Этого достаточно чтоб собрать пример
Код:
18:08:45 **** Build of configuration Default for project hello_world ****
make all
Toolchain path: /opt/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a5
Compiler version: 5.2.0
Python requirements from D:/msys32/esp-idf\requirements.txt are satisfied.
CC build/bootloader/bootloader_support/src/bootloader_random.o
.....................................
LD /code/hello_world/build/hello-world.elf
esptool.py v2.7-dev
To flash all build output, run 'make flash' or:
python /esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /code/hello_world/build/bootloader/bootloader.bin 0x10000 /code/hello_world/build/hello-world.bin 0x8000 /code/hello_world/build/partitions_singleapp.bin

18:13:51 Build Finished. 0 errors, 0 warnings. (took 5m:6s.390ms)
Можно немножко ускорить сборку увеличив количество jobs-ов (если хватает ядер на cpu)
Код:
18:21:58 **** Build of configuration Default for project hello_world ****
make -j8 all
Python requirements from D:/msys32/esp-idf\requirements.txt are satisfied.
GENCONFIG
Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "hello-world" version: 1
CC /code/hello_world/build/app_trace/heap_trace_tohost.o
.....................................
LD /code/hello_world/build/hello-world.elf
esptool.py v2.7-dev
To flash all build output, run 'make flash' or:
python /esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /code/hello_world/build/bootloader/bootloader.bin 0x10000 /code/hello_world/build/hello-world.bin 0x8000 /code/hello_world/build/partitions_singleapp.bin

18:24:00 Build Finished. 0 errors, 0 warnings. (took 2m:2s.504ms)
Совершенно не обязательно выполнять настройку последовательного порта через make menuconfig
Достаточно определить переменные ESPPORT=COM26 ESPBAUD=921600 когда будем билдить цель flash
В эклипсе создаем конфигурацию для загрузки, на вкладке "Behavior" для "Build (Incremental build)" вместо "all" установим "ESPPORT=COM26 ESPBAUD=921600 flash"
Код:
18:27:44 **** Build of configuration flash for project hello_world ****
make -j8 ESPPORT=COM26 ESPBAUD=921600 flash
Toolchain path: /opt/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: crosstool-ng-1.22.0-80-g6c4433a5
Compiler version: 5.2.0
Python requirements from D:/msys32/esp-idf\requirements.txt are satisfied.

Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "hello-world" version: 1
Flashing binaries to serial port COM26 (app at offset 0x10000)...
esptool.py v2.7-dev
Serial port COM26
Connecting........_
Chip is ESP32D0WDQ6 (revision 0)
Features: WiFi, BT, Dual Core, Coding Scheme None
MAC: 24:0a:c4:35:a9:84
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 24432 bytes to 14633...

Writing at 0x00001000... (100 %)
Wrote 24432 bytes (14633 compressed) at 0x00001000 in 0.2 seconds (effective 1004.7 kbit/s)...
Hash of data verified.
Compressed 146128 bytes to 70392...

Writing at 0x00010000... (20 %)
Writing at 0x00014000... (40 %)
Writing at 0x00018000... (60 %)
Writing at 0x0001c000... (80 %)
Writing at 0x00020000... (100 %)
Wrote 146128 bytes (70392 compressed) at 0x00010000 in 1.6 seconds (effective 726.2 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 4096.8 kbit/s)...
Hash of data verified.

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

18:28:11 Build Finished. 0 errors, 0 warnings. (took 26s.782ms)
 

enjoynering

Well-known member
потому что eclipse на чистом JAVA и оно никогда быстро на win машинах быстро работать не будет. такова плата за универсальность JAVA языка.
 

pvvx

Активный участник сообщества
С WSL всё хорошо до этого:
Для эклипса осталось только настроить ...
Всякие кОнфиги работают (и работало ещё год назад - писал где-то на форуме):
upload_2019-6-10_19-3-4.png
Сборка проекта и прочих demo пашет.
Но с esclipse или VSC очень много мороки, а толкового описания нет. (А что я там делал чтобы работало - я уже забыл).
 

pvvx

Активный участник сообщества
потому что eclipse на чистом JAVA и оно никогда быстро на win машинах быстро работать не будет. такова плата за универсальность JAVA языка.
Никаких задержек на взгляд в eclipse не наблюдается. Даже на проектах с полным исходным кодом OpenWRT.
Возможно у вас устаревший комп или мало RAM(?)...
PS: Хотя на текущем компе, с которого пишу, изначально стоит почему-то 48ГБ а не 64, но серьезных загрузок памяти на таких мелких задачах как GCC сборка в дцать потоков или JAVA не видел... Это не те среды (от именитых производителей и за дорого) - eclipse создают, пишут, отлаживают на компах средней конф...
 

Алексей.

Active member
На wsl-е есп-идф устанавливал.
На хостовой виндовс запускал эклипс, импортировал проекты, физически расположенные в директории wsl. Эклипс, запущенный на виндовсе, начинал портить файлы.
Установил эклипс в wsl, пробросил иксы на хостовой икс-минг, эклипс запущенный в wsl, файлы не портит, но задержки не приемлемые.
Хочу развернуть есп-идф в докер контейнере, но пока времени нет.
 

pvvx

Активный участник сообщества
На wsl-е есп-идф устанавливал.
На хостовой виндовс запускал эклипс, импортировал проекты, физически расположенные в директории wsl. Эклипс, запущенный на виндовсе, начинал портить файлы.
Это описано в доках по WSL. Не надо туда лезть windows прогами... Обратное - возможно. Я уверен, что вы это знаете...

Сборка из виндовых областей/дисков работает через make.sh:
Код:
#!/bin/sh
export IDF_PATH=/mnt/tmpfs/esp/esp-idf
PATH="/mnt/tmpfs/esp/xtensa-esp32-elf/bin/:$PATH"
time make -s -j 36 $1 $2 $3 $4
который вызывается в win каталоге с примером или ...
Пусть даже в FAR :) через FarMenu.ini:
1: - Make All
bash make.sh all
2: - Make Clean
bash make.sh clean
3: - Make Flash
bash make.sh flash
4: - Make MenuConfig
bash make.sh menuconfig

Использую tmpfs, т.к. обработка файлов в tmpfs в WSL происходит в разы быстрее, чем в других файловых системах...
Но для IDF_PATH можно использовать любой mnt (/mnt/с/.. /mnt/z)..
как в vscode сделать несколько конфигов для одного проекта так и не нашёл
Простого решения как в обычной полной VS или Eclipse у VSC(оde) нет - исключительно ковырянием в файлах или поиска специальных плагинов. Я VSC не пользую. Полноценные версии студии лучше в данном плане, но с этого года и её забросил, т.к. хотят многого, да по работе перешел и требую чистый опен (кроме самой ОС - win, т.к. используется у многих заказчиков)...
 
Сверху Снизу