Не так дав­но для одно­го из про­ектов мне понадо­билась Боль­шая Кра­сивая Кноп­ка (БКК). Про­ект я бла­гопо­луч­но реали­зовал, но с кноп­кой мож­но сде­лать еще мас­су все­го инте­рес­ного. Сегод­ня на ее при­мере я покажу тебе, как мас­терить свои девай­сы на ESP32 и Raspberry Pi, при­чем один из них мы под­клю­чим к умно­му дому.
 

Устройство кнопки

Все, кто хоть раз делал про­ект с 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 Pin
from neopixel import NeoPixel
from 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()
btn.down_func = enable_light
btn.up_func = disable_light
while True:
pass

Для работы с кноп­кой мож­но исполь­зовать про­вер­ки сос­тояния, счи­тывая каж­дый раз зна­чение с пина, на который выведен сиг­нал (в нашем слу­чае — 1), но на GitHub наш­лась биб­лиоте­ка, поз­воля­ющая прос­то ука­зать фун­кции, которые будут вызывать­ся при нажатии и отжа­тии кноп­ки.

Прог­рамма край­не прос­та, давай раз­берем ее по час­тям.

Им­порт необ­ходимых модулей:

from machine import Pin
from neopixel import NeoPixel
from 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_light
btn.up_func = disable_light

И, самое важ­ное, запус­каем бес­конеч­ный цикл, что­бы обра­баты­вать нажатия на кноп­ку. В прин­ципе, схо­жий про­цесс сущес­тву­ет в любой опе­раци­онной сис­теме.

while True:
pass

Итак, убе­дились, что кноп­ка и све­тоди­оды работа­ют, — зна­чит, вре­мя перехо­дить к более инте­рес­ным про­ектам.

 

Кнопка для ругательств в сети

Бы­вает, хочет­ся кому‑то мно­го раз написать, что не прав. Поорать в чатике или на форуме — это свя­тое. Так что сде­лаем уни­вер­саль­ную кноп­ку, которая будет писать какое‑нибудь сооб­щение (нап­ример «You’re wrong!») и отправ­лять его до тех пор, пока мы не успо­коим­ся и не отож­мем кноп­ку. Ну или пока нас не забанят за спам. Пос­коль­ку мы уже под­клю­чили кноп­ку к ESP32, вос­поль­зуем­ся встро­енным модулем для работы с BLE и сде­лаем бес­про­вод­ную кноп­ку, которая будет работать и с компь­юте­ром, и с телефо­ном. Пос­коль­ку с под­дер­жкой BLE в MicroPython до сих пор есть слож­ности, перек­лючим­ся на Arduino IDE.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии