[MicroPython] Как начать писать?
В прошлой статье мы обсудили выбор микроконтроллера, кто не читал - настоятельно рекомендую.
В этой статье попробуем что-нибудь написать. Для примера и общей популярности будем рассматривать кодинг под Windows. У меня Windows 10 Pro.
Что нам понадобится:
- Интерпретатор Python любой из последних версий. (качаем, ставим)
- Прошивка под ваш микроконтроллер (ниже чуть подробнее)
- Пара нужных утилит (о них ниже)
- Среда разработки (очень громкое название для этого) Thonny
Железо
Я буду использовать TTGO T-Display v1.4, потому что она первая попалась мне под руку. Вы же можете использовать любую железку на основе ESP32.
Ставим всё нужное
Качаем с сайта Python.org последнюю стабильную версию пайтон.
Устанавливаем. Не забываем добавить в PATH. (галочка на одном из шагов)
Открываем терминал Windows (cmd
) и пишем pip install esptool
. Эта команда установит в систему esptool для прошивки esp32.
Обязательно устанавливаем драйвер для usb-ttl конвертера вашего микроконтроллера, обычно это легко гуглится. Например в моей железке это CP2105, в вашей может быть CH340 или что-то ещё. Вообще чип ttl конвертера указан на странице продавца, или просто потыкайте глазами через лупу в черные микрухи около USB порта вашей железки, там точно написано.
Если драйвер вы поставили верно, то при подключении у вас будет определён какой-либо COM порт. У меня это COM9.
Лезем на сайт Micropython и качаем оттуда последнюю стабильную версию микропитона под ваше железо. Например в моей железке нет SPIRAM, но я скачал с его поддержкой, и в будущем буду видеть сообщение E (10) spiram: SPI RAM not initialized
при загрузке. Это не страшно.
Прошивка
Первым шагом надо очистить память микроконтроллера. Делать это надо ВСЕГДА перед прошивкой. Даже если прошиваете той же самой прошивкой.
>esptool.py --port COM9 erase_flash esptool.py v2.8 Serial port COM9 Connecting..... Detecting chip type... ESP32 Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 24:6f:28:25:4c:44 Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 8.0s Hard resetting via RTS pin...
Прошиваем!
Инструкция как прошивать есть там же, где качали прошивку. Я делаю чуть не по канону, но работает хорошо. Можете делать как я.
>esptool.py --port COM9 write_flash 0x1000 esp32spiram-idf3-20200902-v1.13.bin esptool.py v2.8 Serial port COM9 Connecting.... Detecting chip type... ESP32 Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 24:6f:28:25:4c:44 Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Compressed 1534288 bytes to 955298... Wrote 1534288 bytes (955298 compressed) at 0x00001000 in 85.1 seconds (effective 144.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin...
Всё, прошивка завершена.
Кодим!
Для начала открываем Thonny
В настройках интерпретатора надо выбрать MicroPython (Общий) и порт, на котором определилась ваша железка.
Собственно всё, можно кодить.
Внизу мы видим консоль из интерпретатора Python вашего Esp32. (работает TAB для автодополнения)
Слева сверху файлы внутри ESP32.
Снизу слева файлы на локальном ПК в выбранной папке.
Файлы можно перекидывать туда и обратно. (ПКМ по файлу) Можно открывать файлы на редактирования прямо с микроконтроллера, так в общем окне они будут в квадратных скобках.
Давайте подключимся к Wi-Fi. Для начала открываем документацию и смотрим как. Кстати MicroPython позволяет испытать всё в консоли снизу.
Теперь когда мы точно знаем что всё работает, логично прописать это в файл boot.py.
Жмём на иконку сохранить и можем смело перезагружать железку. После загрузки исполнится boot.py
и мы подключимся к вайфай. (всё будет видно в консоли внизу). Можно ещё принтов натыкать.
WARNING: Показанный способ подключения к вайфай ужасен, так как не гарантирует подключение. Нет ожидания подключения перед исполнением любого другого кода. Способ показанный в примере в документации лучше, но тоже не идеален.
Немного о файлах и этапе загрузки
После загрузки микроконтроллера запускается интерпретатор Python и в него передаётся сначала файл boot.py
, а затем main.py
. Если какого-то из файлов нет, то шаг пропускается. Так как интерпретатор у нас один, то всё что мы определим внутри boot.py
будет доступно и внутри main.py
. То есть заново импортировать совсем не обязательно.
Установка пакетов из сети
Конечно вы можете просто скопировать нужные вам пакеты прям в корень и спокойно импортировать их из любых файлов вашего проекта, но есть возможность воспользоваться pip
, точнее его местной интерпретацией upip
. Вообще привыкайте, что многие пакеты тут начинаются с "u
", чтоб показать свою обрезанную натуру и адаптацию под микропайтон.
Для установки пакетов есть модуль upip
. Например сейчас поставим местный аналог requests
- модуль urequests
. Он поможет нам работать с сетью и обращаться к разным API через http(s).
Как видите, процесс реально очень прост. После этого файлы urequests
сохранились в /lib/
(её не видно из браузера файлов, но всё же через модуль os
можно туда заглянуть). Файлы останутся там даже после перезагрузки.
Кстати кучку библиотек доступных для установки (но не все) можно посмотреть в официальном Github
WARNING: Код установки библиотек не стоит вставлять внутрь файлов проекта, лучше сделать это один раз из консоли и забыть.
Ну и давайте попробуем воспользоваться любым API сервисом. Например получим номер дня в году с помощью worldtimeapi.org
.
Всё получилось, внутрь urequests засунули даже парсер json для нашего удобства.
На этом я заканчиваю статью: мы с вами научились прошивать железку, научились пользоваться Thonny, подключаться к Wi-Fi, устанавливать пакеты, работать с API. Ждите следующих статей, где мы, возможно, сделаем что-то полезное =)
Не забывайте про нашу телеграм группу https://t.me/micropython_faq_ru
Спасибо за внимание.
Ваш Вадик.