Создание дверного звонка Wi-Fi с помощью Raspberry Pi Pico W

Перед вами простое, но практичное руководство, которое поможет вам понять, как вызвать отправку электронного письма (или появление уведомления на вашем телефоне) при нажатии кнопки, подключенной к Raspberry Pi Pico W. Таким образом, вы можете использовать Pico W в качестве Wi-Fi дверного звонка!
В этом проекте вы узнаете, как выполнять HTTP-запросы для подключения к конечным точкам IFTTT.

Видео
Необходимые детали

Raspberry Pi Пико В с заголовками
Подключение Raspberry Pi

Для того чтобы подключить Raspberry Pi Pico W к кнопке:
- Подключите одну сторону кнопки к GPIO14
- Подключите другую сторону кнопки к выводу 3,3 В.
Обратите внимание, что есть кнопки с четырьмя зубцами и кнопки с двумя зубцами.
Если у вас четырехштырьковая кнопка, соедините провода-перемычки по диагонали, чтобы они находились на противоположных сторонах.
Если у вас двухштырьковый штырь, то просто соедините противоположные штыри.
Настройка IFTTT для отправки электронного письма

IFTTT означает ЕСЛИ Tего, Tкурица Tшляпа.
Вместо того чтобы писать собственный код, мы будем использовать IFTTT, чтобы сделать все проще.
Нажмите здесь, чтобы перейти к IFTTT.com и зарегистрируйте аккаунт.

После того как вы зарегистрировались, нажмите "Создать".
В части "Если это" нажмите "Добавить", чтобы создать событие. Это задаст условия, необходимые для запуска части "Тогда это", то есть для отправки уведомления.

В следующем окне "Выберите службу" введите "Webhooks" и нажмите на него.
Затем нажмите "Получить веб-запрос".
Введите название события pico_w_request прокрутите вниз и выберите "Создать триггер".
Вы вернетесь на экран "Если это, то это". Пришло время установить часть "Тогда это", поэтому щелкните на ней.

Найдите Gmail и щелкните на нем. Затем нажмите "Отправить себе письмо".
Выберите свой адрес электронной почты.
Затем введите тему. Мы написали "Кто-то позвонил в дверь!".
В теле письма мы более или менее продублировали сообщение темы, за исключением того, что вставили
{{OccurredAt}} чтобы показать, в какое время это было сделано.

Нажмите "Создать действие". На следующем экране нажмите "Продолжить".
Затем введите имя апплета. Мы использовали "Pico W to Gmail".

Круто! Пришло время нажать "Готово".
Настройка IFTTT для отправки уведомлений в приложение для телефона
Вы также можете настроить IFTTT на отправку уведомления в приложение каждый раз, когда кто-то звонит в дверь.
Этот процесс очень похож на процесс уведомления по электронной почте.
Для части "Если это" выберите "Webhooks" в качестве службы и выберите "Получить веб-запрос". Введите название события. Мы использовали "door_bell_rang".
Что касается части "Тогда это", то здесь все по-другому.

Вместо этого нужно выбрать сервис "Уведомления", а затем "Отправить уведомление из приложения IFTTT".
Когда оба варианта "Если это" и "Тогда это" будут заполнены, нажмите "Продолжить". Введите название апплета и нажмите "Готово".
Поиск учетных данных IFTTT
Теперь, когда апплет If-Then настроен, можно приступить к поиску учетных данных, чтобы Pico W мог подключиться к IFTTT.
Чтобы сделать это:
- Нажмите на фотографию своего профиля в правом верхнем углу
- Нажмите на "Мои услуги".
- Нажмите на Webhooks
- Нажмите на кнопку "Документация".

На этой странице вы увидите некоторую информацию, включая ваш секретный ключ.
Подключение Raspberry Pi Pico W к IFTTT

Все наш код теперь находится на нашем репо на Github, который вы можете найти здесь.
Скачайте код и распакуйте его. Скопируйте код на Raspberry Pi Pico W.
Вам нужно будет изменить secrets.py.
Заменить ssid с SSID вашей сети WiFi, затем введите пароль в поле pw поле.
Используйте ключ, полученный в предыдущем разделе, и вставьте его в поле ifttt_keyзначение.
Код дверного звонка
Код дверного звонка основывается на предыдущих учебниках. Вкратце, вот что делает этот код:

- Импортирует необходимые пакеты
- Настраивает WiFi и подключается к сети
Вот код для дверного звонка:
door_bell = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
last_state = False
current_state = False
while True:
current_state = door_bell.value()
if last_state == False and current_state == True:
# Make a GET request to trigger webhook on IFTTT
# ifttt_url = 'https://maker.ifttt.com/trigger/pico_w_request/with/key/'+secrets['ifttt'_key']
ifttt_url = 'https://maker.ifttt.com/trigger/door_bell_rang/with/key/'+secrets['ifttt_key']
request = requests.get(ifttt_url)
print(request.content)
request.close()
time.sleep(2)
last_state = current_state
Если вы помните, мы подключили кнопку к GPIO14. Следовательно, мы хотим создать объект, который будет считывать значение этого GPIO.
door_bell = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)
Мы хотим, чтобы IFTTT отправлял уведомление только при изменении состояния с Ложь на Правда. Мы также хотим избежать отправки IFTTT нескольких уведомлений, если кнопка была нажата один раз.
Отсюда и такие меры предосторожности:
last_state = False
current_state = False
while True:
current_state = door_bell.value()
if last_state == False and current_state == True:
# Make a GET request to trigger webhook on IFTTT
# ifttt_url = 'https://maker.ifttt.com/trigger/pico_w_request/with/key/'+secrets['ifttt'_key']
ifttt_url = 'https://maker.ifttt.com/trigger/door_bell_rang/with/key/'+secrets['ifttt_key']
request = requests.get(ifttt_url)
print(request.content)
request.close()
time.sleep(2)
last_state = current_state
Проблема в том, что, нажав на кнопку, вы можете удерживать ее некоторое время, даже не замечая этого. Для вас это может показаться одним нажатием, но для Pico W это может быть пять нажатий. Поэтому мы хотим избежать получения пяти уведомлений.
Именно здесь последнее_состояние и текущее_состояние приходят переменные.
При нажатии на кнопку, текущее_состояние становится Правда.
Это запускает код, который соединяется с IFTTT.
После этого наступает двухсекундная пауза, благодаря time.sleep(2).
Затем, последнее_состояние становится Правда потому что он принимает значение текущее_состояние.
Таким образом, дальнейшее нажатие на кнопку записи не вызовет новых уведомлений, поскольку обе переменные теперь ПравдаИз-за этой линии:
if last_state == False and current_state == True:
После того как пройдут дополнительные нажатия, последнее_состояние возвращается к значению False и, следовательно, готов к приему Правда чтобы снова запустить подключение к IFTTT.
Выберите способ уведомления
Здесь вы выбираете свой путь.
Если вы создали уведомление об отправке по электронной почте, эту строку можно не комментировать:
# ifttt_url = 'https://maker.ifttt.com/trigger/pico_w_request/with/key/'+secrets['ifttt'_key']
Это предполагает, что вы назвали свое событие "pico_w_request". Или же измените эту часть URL на то имя, которое вы ей присвоили.
Если вы хотите получить уведомление о приложении, то вам нужно использовать следующую строку:
ifttt_url = 'https://maker.ifttt.com/trigger/door_bell_rang/with/key/'+secrets['ifttt_key']
Куда вы пойдете дальше?
С помощью этого простого проекта вы сможете далеко пойти.
Кнопка может быть использована для запуска многих вещей, если вы знакомы с взаимодействием с API.
Например, вы можете запрограммировать кнопку на нажатие API Spotify, чтобы остановить музыку или пропустить трек.
Хотите быть в курсе новостей и других проектов Pico? Нажмите здесь:
Как бы вы настроили этот дверной звонок Pico Wi-Fi под свои нужды?
Приветствую вас
Я хотел попробовать несколько ваших проектов для RPI Pico W, т.е. IFTTT отправить почту и проект веб-страницы. Я столкнулся с проблемой, когда я запустил пример IFTTT, программа micropython искала модуль 'sockets'. Я не смог найти модуль sockets, чтобы программа работала правильно. Можете ли вы посоветовать, как правильно решить эту проблему.
[...] 参考にしたサイト:Raspberry Pi Pico W Wi-Fi Doorbell tutorial (HTTP запросы и IFTTT) [...]
[...] Примечательно, что этот проект не сильно отличается от нашего учебника по дверному звонку Pico W, которым мы поделились в июле прошлого года. [...]
[...] Хотите сделать свой дом умнее? Raspberry Pi может служить как центральным, так и периферийным устройством для автоматизации всего. Например, вы можете превратить его в камеру наблюдения или систему безопасности, использовать в качестве голосового помощника, создать с его помощью умное зеркало или использовать для умного освещения. Вы даже можете использовать его для полива растений, наблюдения за птицами в вашем дворе или для умного дверного звонка! [...]