среда, 5 сентября 2018 г.

Конфигурируем Raspberry Pi3 в качестве среды разработки для ESP32

Я уже упоминал, что предпочитаю использовать Raspberry Pi в качестве среды разработки для своих "микроконтроллерных проектов". ESP32 - одна из популярных платформ, которая имеет на борту довольно мощный контроллер и Wi-Fi чип.

Обычно подготовка RPi заключается установке пакетов и стандартных репозиториев Raspbian, но, похоже в стандартных репозиториях соответствующих пакетов нет. К счастью, это не является большой проблемой, так как можно просто собрать всё недостающее из исходников.

Поскольку мне уже приходилось пару раз устанавливать необходимые для ESP32 инструменты в Raspberry Pi, мне снова и снова приходилось искать информацию на разных сайтах и компоновать всё воедино. Поэтому я решил собрать здесь пошаговую инструкцию, которая сработала для меня. Первым делом необходимо собрать toolchain -- набор программ для генерации прошивок из исходного кода (компилятор C/C++, ассемблер, линковщик и.т.д.). Инструкцию для Linux можно найти здесь, однако она может не сработать для RPi, так как по умолчанию для сборки будут задействованы все ядра ЦП, а для одновременной компиляции в несколько потоков у RPi может не хватить памяти, поэтому лучше воспользоваться немного модифицированной инструкцией отсюда, и собирать тулчейн в один поток. Итак:

Сборка занимает значительное время, поэтому если вы, как и я, используете RPi без мониора, подключаясь по SSH помощью  PuTTY или другого терминала, то предпочтительнее работать в среде screen. В этом случае процесс не остановится, если сетевое соединение между вашим компьютером и Raspberry PI оборвётся, или если вы закроете PuTTY (в противном случае процесс сборки убьётся как только разорвётся сессия SSH).

Итак, запускаем сессию screen

>screen

Обновляем систему и устанавливаем все необходимые зависимости

>sudo apt-get update

>sudo apt-get upgrade


>sudo apt-get install gawk gperf grep gettext automake bison flex texinfo help2man libtool libtool-bin git wget make libncurses-dev python3 python-serial python-dev python-pip

>sudo pip install pyserial

Подготавливаем директорию, в которой будем собирать toolchain:

>mkdir ~/esp
>cd ~/esp


Клонируем репозиторий с исходниками

>git clone -b xtensa-1.22.x https://github.com/espressif/crosstool-NG.git

Генерируем файлы для сборки

>cd crosstool-NG
>./bootstrap && ./configure --enable-local && make install
>./ct-ng xtensa-esp32-elf

И подправляем конфиг для сборки проекта

>nano ./.config

Следует найти строку CT_PARALLEL_JOBS=0 и заменить значение 0 на 1. Этим мы указываем, что при компиляции следует ограничиться одним потоком, а не использовать все доступные ядра. Тем самым мы значительно увеличиваем время сборки (на и без того небыстрой платформе), но при этом сборка не упадет из за нехватки памяти.
Инструкция рекомендует использовать редактор nano, но разумеется можно воспользоваться любым другим текстовым редактором, например, vim.

Запускаем сборку, предварительно запасшись терпением: у меня собиралось ночь и половину следующего дня:

>./ct-ng build build.1

Устанавливаем флаг executable на получившиеся бинарные файлы

>chmod -R u+w builds/xtensa-esp32-elf

Копируем полученные утилиты в директрию ~/esp . Следующая инструкция по созданию простейшего приложения для ESP32 написана с расчётом на то, что бинарники тулчейна лежат в директории ~/esp/xtensa-esp32-elf/bin. Кроме того, добавим путь к утилитам в переменную PATH.

>mv ~/esp/crosstool-NG/builds/xtensa-esp32-elf/ ~/esp
>export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"

Дальнейшее основано на инструкции с сайта espressif.com: Итак, теперь соберём прошивку, которая, как обычно, помигает светодиодом. Клонируем исходники API/библиотек/примеров для ESP32 с помощью git.

>cd ~/esp
>git clone --recursive https://github.com/espressif/esp-idf.git


Устанавливаем переменную окружения IDF_PATH=~/esp/esp-idf.

Для текущей сессии:

>export IDF_PATH=~/esp/esp-idf

Для будущих сессий следует добавить строчку "export IDF_PATH=~/esp/esp-idf" (без кавычек) в файл ~/.profile .

На всякий случай проверим, что все питоновские библиотеку установлены:

>sudo python -m pip install -r $IDF_PATH/requirements.txt

Копируем пример blink в директорию ~/esp.
>cp -r $IDF_PATH/examples/get-started/blink .
>cd ~/esp/blink
При подключении платы ESP32 к USB-разьёму Raspberry Pi в директории /dev должно появиться соответствующее устройство: в моём случае файл устройства был /dev/ttyAMA0. Следует использовать его в утилите прошивки. По идее должно быть достаточно выполнить команду

>make flash

Но у меня почему-то не сработало. Вместо этого пришлось отдельно собирать прект

>make

А затем прошивать
> ~/esp/esp-idf/components/esptool_py/esptool/esptool.py write_flash --flash_mode dio --flash_freq 40m --flash_size detect 0x10000 build/blink.bin


На моей версии платы ESP32 есть две кнопки: IO0 и EN. Для прошивки необходимо держать кнопку IO0 нажатой, и при этом однократно нажать кнопку EN (не отпуская IO0). Немного больше деталей тут.


Комментариев нет:

Отправить комментарий