Содержание статьи
Устройство кнопки
Все, кто хоть раз делал проект с Arduino, встречали стандартные маленькие черные кнопочки. Но сами по себе они довольно скучные и не вполне удобны. Хотелось бы кнопку побольше и чтобы могла светиться.
Прежде чем бросаться проектировать свой корпус и печатать его на 3D-принтере, я решил поискать что‑то готовое, что имело бы нужные размеры. На «Алиэкспрессе» нашлись светодиодные светильники, которые как раз подходили для моей задумки.
Плюсы такого решения:
- у кнопки сразу есть крепление;
- удобный корпус, где есть место для платы, проводов и дополнительных модулей;
- матовый рассеиватель — свет получается очень приятный.
Изначально там установлена простенькая схема с кнопкой и одним светодиодом. Заменяем светодиод модулем адресных светодиодов Neopixel и собираем обратно. Важно сказать, что в таких светильниках установлены кнопки с фиксацией, то есть кнопка остается нажатой после отпускания.

Таким образом, для подключения нашего устройства к контроллеру или мини‑компьютеру понадобится всего четыре контакта: VCC, GND, BTN_PIN, NEOPIXEL_PIN. Мы будем использовать такое обозначение вне зависимости от проектов и языков программирования.
Исходные возможности
Перед тем как перейти к интересным проектам, важно убедиться, что наш светильник в целом работает (а то получится как в старой серии «Ералаша»). Сделаем, чтобы он включался и выключался нажатием на кнопку.
Подключим нашу кнопку к контроллеру ESP32 по следующей схеме.
Пин кнопки | Пин ESP32 |
---|---|
VCC | 5 В |
GND | GND |
BTN_PIN | 1 |
NEOPIXEL_PIN | 2 |
А теперь возьмем мой любимый MicroPython и напишем небольшую программку.
from machine import Pinfrom neopixel import NeoPixelfrom easybutton import EasyButtonbtn = EasyButton(Pin(1, Pin.IN, Pin.PULL_UP))strip = NeoPixel(Pin(2), 8)def enable_light(): strip.fill((180, 100, 40)) strip.write()def disable_light(): strip.fill((0, 0, 0)) strip.write()btn.down_func = enable_lightbtn.up_func = disable_lightwhile True: pass
Для работы с кнопкой можно использовать проверки состояния, считывая каждый раз значение с пина, на который выведен сигнал (в нашем случае — 1), но на GitHub нашлась библиотека, позволяющая просто указать функции, которые будут вызываться при нажатии и отжатии кнопки.
Программа крайне проста, давай разберем ее по частям.
Импорт необходимых модулей:
from machine import Pinfrom neopixel import NeoPixelfrom easybutton import EasyButton
Инициализация кнопки и модуля светодиодов:
btn = EasyButton(Pin(1, Pin.IN, Pin.PULL_UP))strip = NeoPixel(Pin(2), 8)
Две функции, одна для включения, другая для выключения светодиодов:
def enable_light(): strip.fill((180, 100, 40)) strip.write()def disable_light(): strip.fill((0, 0, 0)) strip.write()
Указываем нашей кнопке, какую функцию вызывать при нажатии (down_func
) и отжатии (up_func
).
btn.down_func = enable_lightbtn.up_func = disable_light
И, самое важное, запускаем бесконечный цикл, чтобы обрабатывать нажатия на кнопку. В принципе, схожий процесс существует в любой операционной системе.
while True: pass
Итак, убедились, что кнопка и светодиоды работают, — значит, время переходить к более интересным проектам.
Кнопка для ругательств в сети
Бывает, хочется кому‑то много раз написать, что не прав. Поорать в чатике или на форуме — это святое. Так что сделаем универсальную кнопку, которая будет писать какое‑нибудь сообщение (например «You’re wrong!») и отправлять его до тех пор, пока мы не успокоимся и не отожмем кнопку. Ну или пока нас не забанят за спам. Поскольку мы уже подключили кнопку к ESP32, воспользуемся встроенным модулем для работы с BLE и сделаем беспроводную кнопку, которая будет работать и с компьютером, и с телефоном. Поскольку с поддержкой BLE в MicroPython до сих пор есть сложности, переключимся на Arduino IDE.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее