Наверное, практически каждому, кто имеет отношение к 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. И всё это упаковано в миниатюрный корпус 24×24×10mm. Визуально смотрится неплохо, пластик приятный. Но мы собрались здесь не для того, что бы смотреть на устройство, а для того, что бы его программировать. Согласно официальной документации, программирование возможно с помощью трёх систем: Официального инструмента для блочного программирования от M5Stack — UI Flow Arduino IDE Micropython  На самом деле, UiFlow транслирует визуальные блоки в код Micropython, поэтому с точки зрения языков программирования — их всего два — Arduino C и Micropython. Но мы рассмотрим все варианты. Перед тем, как начать программировать с помощью 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 — которая была сгенерирована:  Программа была скопирована из редактора ASIS, давайте посмотрим, что сразу бросается в глаза:  Большое количество пустых строк. Импорты с использованием оператора *, что для такой минималистичной программы — излишне. Использование глобальных переменных. Непонятно откуда взявшаяся переменная pin0, и использование ключевого слова pass после кода функции. В общем, в использовании блоков есть своя простота и удобство, особенно для проведения занятий с детьми или мастер‑классов, но конвертация из блоков в код немного хромает. Попробуем исправить это и напишем программу на Micropython, без использования UIFlow. Для этого можно просто переключиться в USB режим используя M5Burner, но я для «чистоты эксперимента» установлю стандартную сборку Micropython. Для разработки с использованием Micropython я буду использовать недавно обнаруженную мной на просторах сети IDE — ESP32 MPY‑Jama.  Напишем программу, которая по нажатию кнопки включает случайный цвет на встроенном светодиоде.  Выглядит получше, но тут свои недостатки, например, всё ещё нет встроенного механизма для обработки кнопок, приходится использовать проверку состояний кнопки с задержкой. На самом деле — существует реализация кнопок, с красивым назначением функций, на основе библиотеки uasyncio , которая позволяет имитировать ассинхроность, но я с ней ещё не разобрался. Напоследок, я оставил работу в Arduino IDE. Для работы с M5Stack можно использовать стандартные библиотеки и платы на основе ESP32 — работать будет, контроллер‑то один и тот же, но компания‑разработчик предлагает добавить в менеджер плат свои наработки.Для этого, в дополнительных платах, в настройках, необходимо добавить следующую ссылку:  А затем установить набор в менеджере плат.  Кроме этого, существует отдельная библиотека M5Atom, установим и её. Важно, что в этой библиотеке находятся функции и методы не только для нашего модуля, но и для его старшего брата — M5Stack ATOM Matrix. Из всего богатства доступных на борту модулей мы ещё не использовали инфракрасный светодиод. Его можно использовать только для отправки команд — так что управлять устройством с пульта не получится, зато этот самый пульт мы можем проэмулировать.Напишем программу для эмуляции нажатия на кнопку вкл/выкл пульта от телевизора.Для начала необходимо получить NEC код кнопки нашего пульта, для этих целей я воспользовался Flipper Zero и вот что увидел на экране: A — это адрес, C — это команда.  Подключаем необходимые библиотеки — M5Atom для обработки нажатия на кнопку и TinyIRSender (это часть библиотеки Arduino‑IRremote) — для отправки команды. Теперь только докупить внешний аккумулятор и пульт с одной кнопкой — готов! В данной статье я постарался пробежаться по основным достоинствам M5Stack ATOM Lite. Мне кажется, что это неплохое устройство с большими возможностями, которые можно расширить за счёт дополнительных модулей, как и от компании производителя, так и кастомных.  Что касается использования ПО, такого как UiFlow и M5Burner, к нему нужно подходить аккуратно, используя по необходимости, потому что они не всегда предоставляют красивый и оптимальный код или прошивку. К сожалению, найти полную документацию по M5Stack библиотекам для Micropython у меня не получилось, то есть ясно, что в них много чего интересного, но документацию приходится вытаскивать по частям из разных примеров, а так как часто используются импорты вида from m5stack import *, то разобраться довольно сложно.  В целом девайс интересный и ему можно найти массу применений, как и в хобби‑проектах, так и для обучения.   Python — разработчик