[Из песочницы] Подготовка к программированию ESP8266 на micropython
Micropython — это реализация Python 3, написанная на C, которая оптимизирована для микроконтроллеров. ESP8266 — самая простая плата с WiFi модулем. Их комбинация — это мощность, скорость и простота написания. Поскольку это мой первый опыт работы с micropython (и с МК в принципе), я столкнулся с рядом нюансов, способами решения которых я и хочу поделиться с читателем. Примеры будут для MacOS, однако они легко адаптируются под Linux и Windows.
Драйвер
Сначала необходимо установить драйвер. Это несложно, здесь не буду останавливаться. Для MacOS я использовал ch340g-ch34g-ch34x-mac-os-x-driver
Прошивка
Теперь необходимо залить micropython прошивку на ваш ESP8266. Процесс подробно и качественно описан в документации micropython для ESP8266, поэтому я только кратко освещу основные пункты.
Скачиваем прошивку здесь. Рекомендую последний stable билд.
Устанавливаем esptool:
pip install esptool
Pip — это система управления пакетами для python. Если у вас нет pip или python в целом — сначала необходимо установить их.
Далее очищаем флеш-память устройства:
esptool.py --port /dev/ttyUSB0 erase_flash
И прошиваем:
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect 0 esp8266-20170108-v1.8.7.bin
Порт /dev/ttyUSB0
нужно заменить на свой. Для MacOS можно просто подставить /dev/$(ls /dev | grep cu.wchusbserial)
и нужный порт будет определён автоматически.
Например:
esptool.py --port /dev/$(ls /dev | grep cu.wchusbserial) erase_flash
Обратите внимание, я использую baud rate 115200 как стандартный для esp.
REPL
Отлично, теперь наш мк оснащен micropython«ом, а это означает, что к нему можно подключиться и выполнять команды в REPL (Read Evaluate Print Loop). По факту, это аналог командной строки интерпретатора классического Python. Подключиться можно через сериал порт или через WiFi. Подробная информация о использовании доступна здесь, я же снабжу её несколькими комментариями.
Для MacOS удобно использовать picocom:
picocom /dev/$(ls /dev | grep cu.wchusbserial) -b115200
После выполнения команды, консоль перейдет в интерактивный режим.
Для выхода используйте Control-A, затем Control-X (не отжимая Control).
Автор утилиты активно отвечает на issues на гитхабе, для кого-то это может отыграть важную роль. Также, начиная с версии 3, добавлен неинтерактивный режим, что позволяет использовать picocom в написании своих скриптов.
Также можно использовать screen:
screen /dev/$(ls /dev | grep cu.wchusbserial) 115200
Для выхода: Control-A, Control-\
Перед переходом к программированию, рекомендую полностью пройти туториал, на это уйдет всего несколько часов, а польза будет ощутимой.
IDE
С REPL поигрались, диодом помигали, TCP сокеты использовали. Что дальше? Необходим быстрый способ доставки нашего кода на esp. Не будем же мы всё писать через REPL. На ум сразу же приходит IDE. Так я скачал ESPlorer 0.2.0-rc6. Поддержка micropython находится в активной разработке и, как я понял, была добавлена совсем недавно, в rc3. После некоторого времени, проведённого в этой IDE, я столкнулся с целым рядом багов, которые не дают нормально записывать файлы в flash и выполнять код. Я написал issue на гитхаб и отложил ESPlorer до лучших времен. Для Windows есть несколько альтернатив: espcut, EsPy.
Код я решил писать в Sublime — тут всё просто и понятно. А как его доставлять на мк?
К счастью, существут замечастельная утилита ampy и она делает как раз то, что нам нужно — позволяет пересылать файлы через serial connection. Также она позволяет выполнять файлы и создавать/удалять папки.
Для удобства использования, я написал простой скрипт, который является оберткой для ampy.
Он умеет делать всего две вещи:
- Если вызван с параметром -f, то передает в МК все питоновские файлы, которые находятся в той же папке, в которой лежит скрипт.
- Если вызван с параметром -p, то все последующие аргументы передаются непосредственно в ampy (избавляет от необходимости постоянно указывать порт в ampy).
Скрипт доступен на гитхабе. Поместите его в папку, где лежит ваш код.
Чтобы посмотреть хелп — просто вызовите скрипт без аргументов.
ESP8266 в основном используется для несложных задач, поэтому этих простых инструментов будет вполне достаточно.
Итоги
Итого, мы прошили нашу esp8266, настроили необходимое ПО для общения с МК и обеспечили себе быструю и удобную разработку с помощью ampy и ampyw, что даёт нам независимость от IDE. Теперь всё, что требуется от вас — писать код и создавать девайс своей мечты!