
Оглавление:
- Шаг 1. Что необходимо
- Шаг 2: здание башни
- Шаг 3: Схема подключения
- Шаг 4: Принцип работы
- Шаг 5: MP3-плеер
- Шаг 6: загрузка программы в Arduino
- Шаг 7: Контроль
- Шаг 8: Отправка сообщений с использованием URL-адресов
- Шаг 9: анонимный URL для отправки сообщения
- Шаг 10: интеграция с IFTTT 1/7
- Шаг 11: интеграция с IFTTT 2/7
- Шаг 12: интеграция с IFTTT 3/7
- Шаг 13: интеграция с IFTTT 4/7
- Шаг 14: интеграция с IFTTT 5/7
- Шаг 15: интеграция с IFTTT 6/7
- Шаг 16: интеграция с IFTTT 7/7
- Шаг 17: Резюме
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05

Устройство можно подключить, например, к системе IFTTT и реагировать при появлении нового письма. На app.remoteme.org мы сгенерируем ссылку, после вызова которой байты будут отправлены в Arduino, а Arduino отобразит световой эффект и воспроизведет mp3 с SD-карты.
Шаг 1. Что необходимо


- NodeMCU, WemOS или что-то подобное
- Два светодиодных кольца с диодами WS2812B (я использовал 16-е светодиодные кольца)
- DFRobotDFPlayerMini - это mp3-плеер. Он воспроизводит mp3 с SD-карты и взаимодействует с Arduino через RX / TX.
- Оратор
- SD Card
- Логический преобразователь - Я использовал этот, mp3-плеер использует 5V и Arduino 3.3, поэтому нам нужен этот преобразователь.
- Знания и навыки для самостоятельного изготовления простых печатных плат
Башня:
- картон - двух разной толщины
- Копировальная бумага
- алюминиевая фольга
Шаг 2: здание башни




Выше план башни в виде сбоку (мое приключение с техническим рисунком закончилось в начальной школе), все размеры в миллиметрах.
Принцип действия
- кольцо светодиодов, проливающих свет
- Копировальная бумага
- Усеченный конус, сделанный из картона и покрытый алюминиевой фольгой, поэтому он отражает свет от светодиодных колец, на рисунке 3 ‘= вырезанная сетка
- Картонная трубка - держит башни вертикально, внутри трубки проложены кабели для светодиодов
- Высота зависит от вас у меня 85мм
- Стенд внутри всех частей электроники
Все горизонтальные элементы должны быть из более плотного картона.
Шаг 3: Схема подключения




На mp3-плеер подается напряжение 5 В и он обменивается данными с Arduino через TX / RX, необходим логический преобразователь, потому что сам Arduino работает с напряжением 3,3 В. Управление кольцами также подключено к Arduino (D5, D6) через логический преобразователь.
В репозитории вы найдете файлы орла с планами печатных плат.
Предлагаю не паять постоянно Arduino и mp3-плеер только для использования женских золотых штифтов.
Шаг 4: Принцип работы
Наша Arduino подключается к системе app.remoteme.org с помощью WebSockets (есть готовые библиотеки), через это соединение отправляются 5-байтовые сообщения:
- первый байт светового эффекта для верхнего светодиодного кольца
- второй байт световой эффект для нижнего светодиодного кольца
- номер файла mp3 для воспроизведения
- количество секунд, как долго будут воспроизводиться световой эффект и mp3
- следует ли проигрывать mp3 один раз или в цикле
исходный код
Весь исходный код Вы можете найти здесь
в файлах SingleRing.cpp и SingleRing.h есть класс для управления эффектами светодиодных колец. Я предлагаю вам начать с рассмотрения функции setMode (int m):
void SingleRing:: setMode (int m) {переключатель (m) {case 0: setConfiguration (0, 0, 50, 0, 5, 1); break; // off = 0 case 1: setConfiguration (6, 0, 50, 0, 0, 20); break; // сплошной стандартный зеленый цвет case 2: setConfiguration (6, 0, 0, 50, 0, 20); break; // сплошной стандартный синий корпус 3: setConfiguration (6, 50, 0, 0, 0, 20); break; // сплошной стандартный красный корпус 4: setConfiguration (6, 50, 10, 0, 0, 20); break; // сплошной стандартный оранжевый корпус 5: setConfiguration (1, 0, 100, 0, 5, 2); break; // полиция по часовой стрелке зеленый case 6: setConfiguration (1, 0, 100, 0, 5, -2); break; // полиция возвращает зеленый цвет case 7: setConfiguration (1, 0, 0, 100, 5, 2); break; // полиция по часовой стрелке синий case 8: setConfiguration (1, 0, 0, 100, 5, -2); break; // полиция вернет синий случай 9: setConfiguration (1, 100, 0, 0, 5, 2); break; // стандартный красный случай полиции 10: setConfiguration (1, 100, 0, 0, 5, -2); break; // полиция отменяет красный регистр 11: setConfiguration (1, 100, 20, 0, 5, 2); break; // стандартный оранжевый корпус полиции 12: setConfiguration (1, 100, 20, 0, 5, -2); break; // полиция отменяет оранжевый случай 13: setConfiguration (2, 0, 0, 50, 8, 10); break; // перекрестить стандартный синий регистр 14: setConfiguration (2, 0, 0, 50, 8, -10); break; // перекрестный возврат к синему case 15: setConfiguration (5, 0, 50, 0, 0, 20); break; // мигает стандартным зеленым цветом case 16: setConfiguration (5, 0, 50, 0, 0, -20); break; // мигает odwyrtka зеленым case 17: setConfiguration (5, 0, 0, 50, 0, 20); break; // мигать стандартным синим цветом case 18: setConfiguration (5, 0, 0, 50, 0, -20); break; // мигать обратно в синий цвет case 19: setConfiguration (5, 50, 0, 0, 0, 20); break; // мигаем стандартным красным регистром 20: setConfiguration (5, 50, 0, 0, 0, -20); break; // мигание вернуть красный цвет case 21: setConfiguration (5, 50, 10, 0, 0, 20); break; // мигать стандартным оранжевым цветом 22: setConfiguration (5, 50, 10, 0, 0, -20); break; // мигает обратно оранжевым цветом default: setConfiguration (0, 0, 50, 0, 5, 1); break; // выкл = 0}}
в зависимости от заданного параметра кольцо будет отображать эффект. Вы можете добавить свой собственный эффект, вызвав функцию setConfiguration с новыми параметрами (изменение цвета, скорость отображения), добавив новый режим или добавив совершенно новый эффект - или дайте мне знать в комментариях, если мне это нравится, я добавлю новый эффект
arduino.ino:
#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h"
#включают
#include #include #include "SingleRing.h"
#включают
#include #include
#включают
#define WIFI_NAME ""
#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "сирена" #define TOKEN ""
#define DIODES_COUNT 16
Верхняя часть одинарного кольца = одиночное кольцо (DIODES_COUNT, D5);
Нижнее кольцо SingleRing = SingleRing (DIODES_COUNT, D6);
SoftwareSerial mySoftwareSerial (D4, D3); // RX, TX
DFRobotDFPlayerMini myDFPlayer; RemoteMe & remoteMe = RemoteMe:: getInstance (ТОКЕН, УСТРОЙСТВО_ID);
ESP8266WiFiMulti WiFiMulti;
void setup () {mySoftwareSerial.begin (9600); Serial.begin (115200);
if (! myDFPlayer.begin (mySoftwareSerial)) {// Используйте softwareSerial для связи с mp3.
Serial.println (F («Невозможно начать:»)); Serial.println (F («1. Проверьте соединение еще раз!»)); Serial.println (F («2. Вставьте SD-карту!»)); в то время как (правда); } Serial.println (F ("DFPlayer Mini в сети."));
myDFPlayer.setTimeOut (500); // Устанавливаем тайм-аут последовательной связи 500 мс
myDFPlayer.volume (30);
myDFPlayer. EQ (DFPLAYER_EQ_NORMAL);
myDFPlayer.outputDevice (DFPLAYER_DEVICE_SD); WiFiMulti.addAP (WIFI_NAME, WIFI_PASSWORD); в то время как (WiFiMulti.run ()! = WL_CONNECTED) {задержка (100); }
remoteMe.setUserMessageListener (onUserMessage);
remoteMe.setupTwoWayCommunication ();
remoteMe.sendRegisterDeviceMessage (ИМЯ УСТРОЙСТВА);
top.setup ();
bottom.setup (); top.clear (); bottom.clear (); }
логическое TurnOff = true;
беззнаковый длинный turnOffMillis = 0;
void onUserMessage (uint16_t senderDeviceId, uint16_t dataSize, uint8_t * data) {
uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t topMode = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t trackNumber = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t time = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t mode = RemoteMeMessagesUtils:: getUint8 (данные, позиция);
bottom.setMode (bottomMode);
top.setMode (topMode); если (режим == 1) {myDFPlayer.loop (trackNumber); } еще {myDFPlayer.play (trackNumber); } TurnOff = false; turnOffMillis = миллис () + 1000 * время; }
пустой цикл ()
{remoteMe.loop (); top.loop (); bottom.loop (); если (TurnOffMillis
}
объяснение:
#define WIFI_NAME "" #define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "notificator" #define TOKEN ""
Нам нужно предоставить вышеуказанные данные, подробные инструкции здесь, по ссылке, также я показал, как зарегистрироваться на remoteme.org и сгенерировать токен, void onUserMessage (uint16_t senderDeviceId, uint16_t dataSize, uint8_t * data) {uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t topMode = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t trackNumber = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t time = RemoteMeMessagesUtils:: getUint8 (данные, позиция); uint8_t mode = RemoteMeMessagesUtils:: getUint8 (данные, позиция);
bottom.setMode (bottomMode);
top.setMode (topMode); если (режим == 1) {myDFPlayer.loop (trackNumber); } еще {myDFPlayer.play (trackNumber); } TurnOff = false; turnOffMillis = миллис () + 1000 * время; }
Эта функция будет вызываться, когда сообщение придет в Arduino и отобразит уведомление. Код настолько ясен, что описывает сам себя. Я ссылаюсь на детали классов в документации здесь и здесь
недействительный цикл () {remoteMe.loop (); top.loop (); bottom.loop (); if (turnOffMillis <millis ()) {
if (! TurnOff) {
top.clear ();
bottom.clear (); myDFPlayer.stop (); TurnOff = true; }}
В цикле вызываем функции цикла объектов, а также, если время отображения уведомлений прошло, отключаем диоды и звук.
Шаг 5: MP3-плеер

Он связывается с Arduino через TX / RX - здесь детали самого плеера, а здесь библиотека.
Закачиваем mp3 файлы на SD карту. Файлы на карте сортируются в алфавитном порядке, а затем по телефону:
myDFPlayer.play (5);
Проигрываем пятый файл с SD карты из корневого каталога. Поэтому хорошо давать файлы на SD-карте с префиксом 01, 02 и т. Д. В моем случае это выглядит как на приведенном выше экране.
Для создания голосовых команд Вы можете использовать эту страницу.
Шаг 6: загрузка программы в Arduino


Перед загрузкой скетча в Arduino вам необходимо скачать необходимые библиотеки, здесь вы найдете подробные инструкции.
дополнительно нам нужно установить библиотеку DFRobotDFPlayerMini и Adafruit_NeoPixel
Шаг 7: Контроль


Отправляем на наш Ардуино пять байт
- первый байт светового эффекта для верхнего светодиодного кольца
- второй байт световой эффект для нижнего светодиодного кольца
- номер файла mp3 для воспроизведения
- количество секунд, как долго будут воспроизводиться световой эффект и mp3
- должен ли mp3 воспроизводиться один раз или в цикле (1, если он должен воспроизводиться в цикле)
Отправляя байты
07 0F 01 05 01
Верхнее кольцо будет показывать полицейские огни (режим 6), нижнее мигает зеленым (режим 15) (проверьте функцию setMode в singleRing.cpp и комментарии рядом с ней). Первый файл с SD-карты будет воспроизводиться в течение 5 секунд. И файл будет воспроизводиться в цикле (проверьте функцию onUserMessage на arduino.ino)
Давайте отправим эти байты. Посмотрите на экран выше и щелкните значки в порядке, указанном цифрами 1, 2, 3. Появится окно.
Затем посмотрите на второй экран - и заполните окно, как на втором экране.
Появившееся окно используется для отправки сообщений на устройство. В поле 1 выберите устройство-отправитель - поскольку у нас только одно устройство, мы выбираем его (это обязательное поле, и не имеет значения, что это то же устройство, на которое мы отправляем сообщение). В поле 2 мы передаем байты на send (красным цветом значение, которое мы ввели в 2, будет представлено в виде строки), затем нажмите кнопку «Отправить».
После отправки сообщения наш уведомитель должен отреагировать, отобразив соответствующие световые эффекты и проиграв выбранный mp3. Я рекомендую вам попробовать разные эффекты, задав первые два байта числа от 0 до 22 (см. Описание в функции setMode).
Шаг 8: Отправка сообщений с использованием URL-адресов




Если мы хотим отображать уведомления из внешнего приложения, например, с помощью IFTTT, нам нужен URL-адрес, который будет делать то же самое, что и в окне на предыдущем шаге. remoteme.org предоставляет REST APi. Перейдите к нему, щелкнув вкладку swagger слева (последняя). Страница будет отображаться, на этой странице мы также можем попробовать наши URL-адреса.
На первом экране у вас есть функция Вам нужно развернуть, а затем заполнить данные, как на втором экране.
заполните данные, как на скриншоте выше. После нажатия кнопки «Выполнить» мы отправим сообщение
070F010501
Получателем является устройство с идентификатором 205, это же устройство также является отправителем. MessageId с настройками «No_RENEVAL» не имеет значения. Затем нажмите «Выполнить». Уведомитель отреагирует так же, как и при отправке сообщений из приложения. После вызова REST ниже указан URL-адрес, который был вызван - посмотрите на третий экран. А копирование и вставка в URL-адрес браузера был отмечен зеленой рамкой. На четвертом экране мой браузер Chrome после вставки URL
В моем случае URL-адрес:
app.remoteme.org/api/*/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/
Шаг 9: анонимный URL для отправки сообщения

На предыдущем шаге у вас есть URL-адрес, по которому данные отправляются на ваше устройство. К сожалению, после выхода из app.remoteme.org он перестает работать. Это связано с тем, что мы не предоставили токен аутентификации, и мы больше не вошли в систему. Давайте возьмем наш токен (или создадим новый) и вставим его в URL вместо звездочки.
Посмотрите на экран и замените * в URL своим токеном
в моем случае токен:
~ 267_ZxoWtJ) 0ph и 2c
поэтому мой конечный URL выглядит так:
app.remoteme.org/api/~267_ZxoWtJ)0ph&2c/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/
Теперь мы можем вызвать его, даже если мы не вошли в систему. И когда он вызывается, на наше устройство будет отправлено сообщение 205
Шаг 10: интеграция с IFTTT 1/7

URL-адрес, созданный на шаге выше, подходит для выполнения внешними приложениями. Как его использовать, я покажу на IFTTT. Я настрою его так, чтобы уведомитель включался, когда на адрес электронной почты (учетная запись Gmail) приходит электронное письмо.
Войдите в IFTTT. Затем перейдите на вкладку «Мои апплеты», а затем «Новый апплет» - первый экран.
Шаг 11: интеграция с IFTTT 2/7

Затем нажмите «+ это»
Шаг 12: интеграция с IFTTT 3/7

Затем в поле «Поисковые сервисы» напишите «Gmail».
Затем «новое электронное письмо в почтовом ящике» (может потребоваться некоторая настройка).
Шаг 13: интеграция с IFTTT 4/7

теперь мы нажимаем "+ это"
Шаг 14: интеграция с IFTTT 5/7

найдите «Webhooks» и щелкните по нему
Шаг 15: интеграция с IFTTT 6/7

затем "Сделайте веб-запрос"
Шаг 16: интеграция с IFTTT 7/7

мы завершаем URL-адрес нашего URL-адреса токеном. Введите содержимое в application / json, нажмите «Создать действие» и «Готово». Теперь у нас есть апплет:
Шаг 17: Резюме
В этом руководстве я показал, как отправлять в нашу Arduino сообщения из внешних систем. Аналогичным образом мы интегрируем и другую систему, кроме IFTTT. Это не обязательно должен быть «уведомитель», который я хотел показать в этом примере, как отправлять сообщения из внешних систем на нашу Arduino.
исходные кодыFanPage в Facebook
Ура, Мацек
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов

Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)

Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов

Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Кормушка для рыбы Arduino Uno за 6 простых и простых шагов !: 6 шагов

Arduino Uno Fish Feeder за 6 простых и дешевых шагов !: Итак, для этого проекта может потребоваться немного предыстории. Людям с домашними рыбками, вероятно, приходилось сталкиваться с той же проблемой, что и мне: отпуск и забывчивость. Я постоянно забывала покормить рыбу и всегда старалась это сделать, пока она не упала
Как сделать простой носимый импульсный уведомитель: 5 шагов

Как сделать простой носимый импульсный уведомитель: Pulseme - это носимое устройство, которое помогает людям узнать, когда их сердцебиение превышает заданное значение, предоставляя им физическую обратную связь в виде сжимающегося и неусаживающегося носимого устройства