Micropython — это реализация Python 3, написанная на C, которая оптимизирована для микроконтроллеров. Nodemcu v1.0 — самая удобная плата с микроконтроллером ESP8266 и поддержкой Wi-Fi. Комбинация её и micropython — это мощность, скорость и простота написания. Поскольку это мой первый опыт работы с micropython (и с МК в принципе), я столкнулся с рядом нюансов, способами решения которых я и хочу поделиться с читателем. Примеры будут для MacOS, однако они легко адаптируются под Linux и Windows.
image


Драйвер


Сначала необходимо установить драйвер. Это несложно, здесь не буду останавливаться. Для 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.
Он умеет делать всего две вещи:

  1. Если вызван с параметром -f, то передает в МК все питоновские файлы, которые находятся в той же папке, в которой лежит скрипт.
  2. Если вызван с параметром -p, то все последующие аргументы передаются непосредственно в ampy (избавляет от необходимости постоянно указывать порт в ampy).

Скрипт доступен на гитхабе. Поместите его в папку, где лежит ваш код.
Чтобы посмотреть хелп — просто вызовите скрипт без аргументов.

ESP8266 в основном используется для несложных задач, поэтому этих простых инструментов будет вполне достаточно.

Итоги


Итого, мы прошили нашу esp8266, настроили необходимое ПО для общения с МК и обеспечили себе быструю и удобную разработку с помощью ampy и ampyw, что даёт нам независимость от IDE. Теперь всё, что требуется от вас — писать код и создавать девайс своей мечты!

Комментарии (5)


  1. spiiin
    31.12.2017 15:35
    +1

    Классно, не думал чего-то даже, что на модуле с 512 кб памяти можно python запустить.


  1. poznawatel
    31.12.2017 16:14

    Всем хорош Micropython вот только сенсорный эранчик, который предлагается к Pyboard больно мал для большинства применений, сейчас ищу простой вариант побольше, хотя бы от трёх дюймов.


  1. snowSTAFF
    03.01.2018 00:08
    +1

    Для загрузки файлов проекта я бы посоветовал web-repl, о нем написано на сайте разработчиков. Дело в том, что если вы не будете следить за памятью при использовании ESPlorer, то ваша esp уйдет в ребут. Будете потом по кускам код заливать, а это геморно.

    Web-repl удобен: вы получаете доступ к esp по воздуху и таким же образом заливаете в него скрипты.

    MicroPy — невероятно удобная вещь, когда необходимо сделать прототип. Очень гибко, элегантно и быстро. Но производительность удручает. Хотя, для многих приложений ее будет достаточно.


    1. rocknow Автор
      03.01.2018 00:14

      Мне web repl не нравится только из-за того, что надо отключаться от своего wifi, который даёт выход в интернет, и подключаться к еспшке. При активной разработке это переходит в передёргивание вайфая.

      Поясните, пожалуйста, за память. Вы имеете в виду кол-во свободной флеш-памяти? Так это через тот же ampy делаю — удалил файл локально, удалил и через ampy.


  1. snowSTAFF
    03.01.2018 08:08

    У меня для web-repl стоит отдельный ноутбук. Но это костыля.

    Про память особо нечего добавить. Просто esplorer не позволяет допускать ошибки для новичков, как и в схеме подключения, так и в заливке (я про кнопку Send to ESP). Если файлы имеют большой размер и их попробовать залить все сразу, то велика вероятность ребута.