Содержание статьи
Устройство кнопки
Все, кто хоть раз делал проект с 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.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»