Оглавление:

Уведомитель: 17 шагов
Уведомитель: 17 шагов

Видео: Уведомитель: 17 шагов

Видео: Уведомитель: 17 шагов
Видео: Как исправить проблему со звуками уведомлений после обновления iOS 17 2024, Июль
Anonim
Уведомитель
Уведомитель

Устройство можно подключить, например, к системе 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: здание башни

Башня Здание
Башня Здание
Башня Здание
Башня Здание
Башня Здание
Башня Здание
Башня Здание
Башня Здание

Выше план башни в виде сбоку (мое приключение с техническим рисунком закончилось в начальной школе), все размеры в миллиметрах.

Принцип действия

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

Все горизонтальные элементы должны быть из более плотного картона.

Шаг 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-плеер

Мп3-плеер
Мп3-плеер

Он связывается с Arduino через TX / RX - здесь детали самого плеера, а здесь библиотека.

Закачиваем mp3 файлы на SD карту. Файлы на карте сортируются в алфавитном порядке, а затем по телефону:

myDFPlayer.play (5);

Проигрываем пятый файл с SD карты из корневого каталога. Поэтому хорошо давать файлы на SD-карте с префиксом 01, 02 и т. Д. В моем случае это выглядит как на приведенном выше экране.

Для создания голосовых команд Вы можете использовать эту страницу.

Шаг 6: загрузка программы в Arduino

Загрузка программы в Arduino
Загрузка программы в Arduino
Загрузка программы в Arduino
Загрузка программы в 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-адресов

Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием URL-адресов
Отправка сообщений с использованием 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 для отправки сообщения
Анонимный 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

Интеграция с IFTTT 1/7
Интеграция с IFTTT 1/7

URL-адрес, созданный на шаге выше, подходит для выполнения внешними приложениями. Как его использовать, я покажу на IFTTT. Я настрою его так, чтобы уведомитель включался, когда на адрес электронной почты (учетная запись Gmail) приходит электронное письмо.

Войдите в IFTTT. Затем перейдите на вкладку «Мои апплеты», а затем «Новый апплет» - первый экран.

Шаг 11: интеграция с IFTTT 2/7

Интеграция с IFTTT 2/7
Интеграция с IFTTT 2/7

Затем нажмите «+ это»

Шаг 12: интеграция с IFTTT 3/7

Интеграция с IFTTT 3/7
Интеграция с IFTTT 3/7

Затем в поле «Поисковые сервисы» напишите «Gmail».

Затем «новое электронное письмо в почтовом ящике» (может потребоваться некоторая настройка).

Шаг 13: интеграция с IFTTT 4/7

Интеграция с IFTTT 4/7
Интеграция с IFTTT 4/7

теперь мы нажимаем "+ это"

Шаг 14: интеграция с IFTTT 5/7

Интеграция с IFTTT 5/7
Интеграция с IFTTT 5/7

найдите «Webhooks» и щелкните по нему

Шаг 15: интеграция с IFTTT 6/7

Интеграция с IFTTT 6/7
Интеграция с IFTTT 6/7

затем "Сделайте веб-запрос"

Шаг 16: интеграция с IFTTT 7/7

Интеграция с IFTTT 7/7
Интеграция с IFTTT 7/7

мы завершаем URL-адрес нашего URL-адреса токеном. Введите содержимое в application / json, нажмите «Создать действие» и «Готово». Теперь у нас есть апплет:

Шаг 17: Резюме

В этом руководстве я показал, как отправлять в нашу Arduino сообщения из внешних систем. Аналогичным образом мы интегрируем и другую систему, кроме IFTTT. Это не обязательно должен быть «уведомитель», который я хотел показать в этом примере, как отправлять сообщения из внешних систем на нашу Arduino.

исходные кодыFanPage в Facebook

Ура, Мацек

Рекомендуемые: