
Наверное, практически каждому, кто имеет отношение к DIY, знаком контроллер ESP32. На нём создаются системы умного дома, роботы, квадрокоптеры и многое другое. Отдельным плюсом этого контроллера является невообразимое количество плат и модулей на его основе. Достаточно зайти на tindie.com и можно увидеть всю палитру идей. Но сегодня, я хотел бы провести небольшой обзор устройства на базе ESP32 от компании M5Stack — M5Stack ATOM Lite.
Технические характеристики
Рассмотрим технические характеристики, приведённые на официальном сайте, на странице устройства
|
Resources |
Parameter |
|---|---|
|
ESP32 |
240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi |
|
Flash |
4MB |
|
Power Input |
5V @ 500mA |
|
Port |
TypeC x 1, GROVE(I2C+I/0+UART) x 1 |
|
PIN Port |
G19, G21, G22, G23, G25, G33, G26, G32 |
|
RGB LED |
SK6812 3535 x 1 |
|
IR |
Infrared transmission |
|
Button |
Custom button x 1 |
|
Antenna |
2.4G 3D Antenna |
|
Operating Temperature |
0°C to 60°C |
|
Net weight |
3g |
|
Gross weight |
12g |
|
Product Size |
24x24x10mm |
|
Package Size |
43x43x13mm |
|
Case Material |
Plastic ( PC ) |
Итак, у нас в наличии:
-
ESP32 с 4 мегабайтами памяти
-
Порт USB TypeC для питания и передачи информации — в отличии от большинства моделей M5Stack, аккумулятор отсутствует
-
8 свободных портов ввода-вывода, так же для подключения доступны пины 5V, 3.3V и GND — в общем с одной стороны немного, а с другой для большинства простых проектов — за глаза
-
RGB светодиод, подключенный к пину G27
-
Кнопка, подключенная к пину G39
-
Инфракрасный светодиод, подключенный к пину G12
-
Отдельно выведенная кнопка RESET
И всё это упаковано в миниатюрный корпус 24x24x10mm. Визуально смотрится неплохо, пластик приятный.
Программирование
Но мы собрались здесь не для того, что бы смотреть на устройство, а для того, что бы его программировать. Согласно официальной документации, программирование возможно с помощью трёх систем:
-
Официального инструмента для блочного программирования от M5Stack — UI Flow
-
Arduino IDE
-
Micropython
На самом деле, UiFlow транслирует визуальные блоки в код Micropython, поэтому с точки зрения языков программирования — их всего два — Arduino C и Micropython. Но мы рассмотрим все варианты.
UiFlow
Перед тем, как начать программировать с помощью UiFlow, на наше устройство необходимо установить сборку Micropython, от компании M5Stack. Для этого существует утилита M5Burner, в которой хранятся ссылки на все официальные и некоторые неофициальные сборки для всех устройств M5Stack.

Скачиваем необходимую нам сборку и устанавливаем её. В процессе установки возможно указать данные для подключения к WiFi сети. Зачем? Потому что для программирования с помощью UiFlow не обязательно быть подключенным к устройству с помощью провода, а достаточно указать данные для подключения к интернету, а затем в UiFlow указать API ключ для подключению к девайсу.
Все настройки можно так же посмотреть в M5Burner, после успешной установки у вас появится кнопка Configure, нажав на которую можно просмотреть и, при необходимости, изменить настройки.

Некоторые данные, такие как MAC-адрес, или APIKEY — изменить нельзя. Start Mode — это указание, в каком режиме будет запускаться устройство:
-
Internet Mode — будет пытаться подключиться к сети, а затем получать информацию с сервера flow.m5stack.com
-
USB Mode — будет подключаться и пытаться получать команды через USB кабель
-
App Mode — будет пытаться запустить программу, которая уже сохранена в памяти
Я указал данные для подключения к своей сети, моё устройство перезагрузилось и RGB светодиод начал мигать зелёным. Подключимся к UIFlow и попробуем написать нашу первую программу.

В настройках(они довольно неплохо спрятаны, что бы открыть их — необходимо нажать на надпись Api в левом нижнем углу) необходимо выбрать устройство и ввести APIKEY, который мы посмотрели в M5Burner-e. Если всё сделано правильно, то вы увидите зелёную надпись — Connected. UiFlow позволяет как запустить программу разово — используя кнопку Run, так и загрузить её на устройство, что позволит пользоваться ей, при переходе в App Mode.
Подключим светодиод к одному из доступных нам пинов и напишем простейшую программу — будем зажигать и гасить светодиод по нажатию кнопки.

Вроде бы всё просто и понятно:
-
Блок Setup — отвечает за то, что происходит при запуске программы — инициализировали пин, к которому подключен светодиод и установили на нём значение равное 0
-
Блок обработки нажатия на кнопку — инвертирует значение на пине.
Но давайте посмотрим, как выглядит программа на Micropython — которая была сгенерирована:
from m5stack import * from m5ui import * from uiflow import * import machine import math def buttonA_wasPressed(): global pin0, pin1 pin1.value(math.fabs(1 - (pin1.value()))) pass btnA.wasPressed(buttonA_wasPressed) pin1 = machine.Pin(25, mode=machine.Pin.OUT, pull=machine.Pin.PULL_UP) pin1.value(0)
Программа была скопирована из редактора ASIS, давайте посмотрим, что сразу бросается в глаза:
-
Большое количество пустых строк
-
Импорты с использованием оператора
*, что для такой минималистичной программы — излишне -
Использование глобальных переменных
-
Непонятно откуда взявшаяся переменная pin0, и использование ключевого слова pass после кода функции
В общем, в использовании блоков есть своя простота и удобство, особенно для проведения занятий с детьми или мастер-классов, но конвертация из блоков в код немного хромает. Попробуем исправить это и напишем программу на Micropython, без использования UIFlow. Для этого можно просто переключиться в USB режим используя M5Burner, но я для «чистоты эксперимента» установлю стандартную сборку Micropython.
Micropython
Для разработки с использованием Micropython я буду использовать недавно обнаруженную мной на просторах сети IDE — ESP32 MPY-Jama.

Напишем программу, которая по нажатию кнопки включает случайный цвет на встроенном светодиоде.
from machine import Pin from time import sleep import neopixel from random import randrange button = Pin(39, Pin.IN, Pin.PULL_UP) neo_strip = neopixel.NeoPixel(Pin(27), 1) def set_random_color(strip): strip[0] = (randrange(255), randrange(255), randrange(255)) strip.write() while True: first = button.value() sleep(0.01) second = button.value() if not first and second: set_random_color(neo_strip)
Выглядит получше, но тут свои недостатки, например, всё ещё нет встроенного механизма для обработки кнопок, приходится использовать проверку состояний кнопки с задержкой. На самом деле — существует реализация кнопок, с красивым назначением функций, на основе библиотеки uasyncio , которая позволяет имитировать ассинхроность, но я с ней ещё не разобрался.
Arduino IDE
Напоследок, я оставил работу в Arduino IDE. Для работы с M5Stack можно использовать стандартные библиотеки и платы на основе ESP32 — работать будет, контроллер-то один и тот же, но компания-разработчик предлагает добавить в менеджер плат свои наработки.
Для этого, в дополнительных платах, в настройках, необходимо добавить следующую ссылку:
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
А затем установить набор в менеджере плат.

Кроме этого, существует отдельная библиотека M5Atom, установим и её. Важно, что в этой библиотеке находятся функции и методы не только для нашего модуля, но и для его старшего брата — M5Stack ATOM Matrix.
Из всего богатства доступных на борту модулей мы ещё не использовали инфракрасный светодиод. Его можно использовать только для отправки команд — так что управлять устройством с пульта не получится, зато этот самый пульт мы можем проэмулировать.
Напишем программу для эмуляции нажатия на кнопку вкл/выкл пульта от телевизора.
Для начала необходимо получить NEC код кнопки нашего пульта, для этих целей я воспользовался Flipper Zero и вот что увидел на экране:

A — это адрес, C — это команда.
#include "M5Atom.h" #include "TinyIRSender.hpp" void setup() { M5.begin(); } void loop() { if (M5.Btn.wasPressed()) { // Указываем необходимые параметры // 12 - пин, к которому подключен IR // 4 - адрес // 8 - команда // 1 - сколько раз отправить команду sendNECMinimal(12, 4, 8, 1); } M5.update(); }
Подключаем необходимые библиотеки — M5Atom для обработки нажатия на кнопку и TinyIRSender (это часть библиотеки Arduino-IRremote) — для отправки команды. Теперь только докупить внешний аккумулятор и пульт с одной кнопкой — готов!
Заключение
В данной статье я постарался пробежаться по основным достоинствам M5Stack ATOM Lite. Мне кажется, что это неплохое устройство с большими возможностями, которые можно расширить за счёт дополнительных модулей, как и от компании производителя, так и кастомных.
Что касается использования ПО, такого как UiFlow и M5Burner, к нему нужно подходить аккуратно, используя по необходимости, потому что они не всегда предоставляют красивый и оптимальный код или прошивку.
К сожалению, найти полную документацию по M5Stack библиотекам для Micropython у меня не получилось, то есть ясно, что в них много чего интересного, но документацию приходится вытаскивать по частям из разных примеров, а так как часто используются импорты вида from m5stack import *, то разобраться довольно сложно.
В целом девайс интересный и ему можно найти массу применений, как и в хобби-проектах, так и для обучения.
ссылка на оригинал статьи https://habr.com/ru/post/717226/
Добавить комментарий