Spisu treści:

Powiadamiający: 17 kroków
Powiadamiający: 17 kroków

Wideo: Powiadamiający: 17 kroków

Wideo: Powiadamiający: 17 kroków
Wideo: Krystyna Kurczab-Redlich: wywiad - co Rosjanie myślą o wojnie z Ukrainą i Putinie? Kultura Liberalna 2024, Listopad
Anonim
Powiadamiający
Powiadamiający

Urządzenie można podłączyć np. do systemu IFTTT i reagować na pojawienie się nowej poczty. Na app.remoteme.org wygenerujemy link po wywołaniu, które bajty zostaną wysłane do Arduino, a Arduino wyświetli jakiś efekt świetlny i odtworzy trochę mp3 z karty SD

Krok 1: Co jest potrzebne

Co jest potrzebne
Co jest potrzebne
Co jest potrzebne
Co jest potrzebne
  • NodeMCU, WemOS lub coś podobnego
  • Dwa pierścienie LED z diodami WS2812B (użyłem 16 pierścieni ledowych)
  • DFRobotDFPlayerMini – to odtwarzacz mp3. Odtwarza mp3 z karty SD i komunikuje się z Arduino przez RX/TX
  • Głośnik
  • Karta SD
  • Konwerter logiczny - ja używałem tego, odtwarzacz mp3 używa 5V i Arduino 3.3 dlatego potrzebujemy tego konwertera
  • Wiedza i umiejętności samodzielnego wykonania prostej płytki PCB

Wieża:

  • tektura – dwie różne grubości
  • Kalka
  • folia aluminiowa

Krok 2: Budowa wieży

Budynek wieży
Budynek wieży
Budynek wieży
Budynek wieży
Budynek wieży
Budynek wieży
Budynek wieży
Budynek wieży

Nad planem wieży w widoku z boku (moja przygoda z rysunkiem technicznym zakończyła się w podstawówce), wszystkie wymiary w milimetrach.

Zasada działania

  1. pierścień diod LED zaświeca się
  2. Kalka
  3. Stożek ścięty, wykonany z tektury i pokryty folią aluminiową, dzięki czemu odbija światło od pierścieni ledowych, na rysunku 3’ = siatka wycinana
  4. tuba kartonowa – utrzymuje wieże w pionie, wewnątrz tuby znajdują się kable do ledów
  5. Wysokość zależy od Ciebie mam 85mm
  6. Stojak wewnątrz wszystkich części elektronicznych

Wszystkie elementy poziome powinny być wykonane z grubszej tektury.

Krok 3: Schemat połączeń

Schemat połączeń
Schemat połączeń
Schemat połączeń
Schemat połączeń
Schemat połączeń
Schemat połączeń
Schemat połączeń
Schemat połączeń

Odtwarzacz mp3 zasilany jest napięciem 5V i komunikuje się z Arduino poprzez TX/RX, potrzebny jest konwerter logiczny, ponieważ samo Arduino pracuje na napięciu 3,3V. Sterowanie pierścieniami jest również połączone z Arduino (D5, D6) poprzez konwerter logiczny.

W repozytorium znajdziesz pliki eagle z planami PCB

Proponuję nie lutować na stałe Arduino a odtwarzacza mp3 tylko do użycia żeńskich goldpinów

Krok 4: Zasada działania

Nasze Arduino łączy się z systemem app.remoteme.org za pomocą WebSockets (są gotowe biblioteki) poprzez to połączenie wysyłane są 5-bajtowe komunikaty:

  • pierwszy bajt efektu świetlnego dla górnego pierścienia LED
  • Drugi bajt efekt świetlny dla dolnego pierścienia LED;
  • numer pliku mp3 do odtworzenia
  • liczba sekund, jak długo będzie odtwarzany efekt świetlny i mp3
  • czy mp3 ma być odtwarzane jednorazowo czy w pętli

kod źródłowy

Cały kod źródłowy znajdziesz tutaj

w plikach SingleRing.cpp i SingleRing.h znajduje się klasa do sterowania efektami pierścieni LED. Proponuję zacząć od spojrzenia na funkcję setMode(int m):

void SingleRing::setMode(int m) { switch (m) { case 0:setConfiguration(0, 0, 50, 0,5, 1); przerwa;//off =0 case 1:setConfiguration(6, 0, 50, 0, 0, 20); break;//solid standard zielony case 2:setConfiguration(6, 0, 0, 50, 0, 20); break;//solid standardowy niebieski przypadek 3:setConfiguration(6, 50, 0, 0, 0, 20); break;//solid standard czerwony przypadek 4:setConfiguration(6, 50, 10, 0, 0, 20); break;//stały standardowy pomarańczowy przypadek 5:setConfiguration(1, 0, 100, 0, 5, 2); break;//police zgodnie z ruchem wskazówek zegara zielony przypadek 6:setConfiguration(1, 0, 100, 0, 5, -2); break;// policja przywróciła zielony przypadek 7:setConfiguration(1, 0, 0, 100, 5, 2); break;//police zgodnie z ruchem wskazówek zegara niebieski przypadek 8:setConfiguration(1, 0, 0, 100, 5, -2); break;// policja przywraca niebieski przypadek 9:setConfiguration(1, 100, 0, 0, 5, 2); break;//police standardowa czerwona sprawa 10:setConfiguration(1, 100, 0, 0, 5, -2); break;// policja przywraca czerwoną sprawę 11:setConfiguration(1, 100, 20, 0, 5, 2); break;//police standardowa pomarańczowa sprawa 12:setConfiguration(1, 100, 20, 0, 5, -2); break;// policja przywraca pomarańczową sprawę 13:setConfiguration(2, 0, 0, 50, 8, 10); break;//przekreśl standard niebieski przypadek 14:setConfiguration(2, 0, 0, 50, 8, -10); break;// krzyż odwróć niebieski przypadek 15:setConfiguration(5, 0, 50, 0, 0, 20); przerwa;//miga standardowa zielona wielkość liter 16:setConfiguration(5, 0, 50, 0, 0, -20); przerwa;// miga odwyrtka zielona wielkość liter 17:setConfiguration(5, 0, 0, 50, 0, 20); przerwa;//miga standardowy niebieski przypadek 18:setConfiguration(5, 0, 0, 50, 0, -20); przerwa;// miga cofa niebieski przypadek 19:setConfiguration(5, 50, 0, 0, 0, 20); przerwa;//miga standardowa czerwona wielkość liter 20:setConfiguration(5, 50, 0, 0, 0, -20); przerwa;// miga cofa czerwony przypadek 21:setConfiguration(5, 50, 10, 0, 0, 20); przerwa;//miga standardowa pomarańczowa obudowa 22:setConfiguration(5, 50, 10, 0, 0, -20); przerwa;// miga powrót pomarańczowy domyślnie: setConfiguration(0, 0, 50, 0, 5, 1); przerwa;//wył =0 } }

w zależności od danego parametru pierścień wyświetli efekt. Możesz dodać własny efekt wywołując funkcję setConfiguration z nowymi parametrami (zmiana koloru, szybkość wyświetlania) dodając nowy tryb, lub dodając zupełnie nowy efekt – lub daj znać w komentarzach czy mi się spodoba dodam nowy efekt

arduino.ino:

#include "Arduino.h"#include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h"

#włączać

#include #include #include "SingleRing.h"

#włączać

#włącz #włącz

#włączać

#define WIFI_NAME „”

#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "syrena" #define TOKEN ""

#define DIODES_COUNT 16

Góra SingleRing = SingleRing(DIODES_COUNT, D5);

Dno pojedynczego dzwonka = SingleRing (LICZBA_DIOD, D6);

SoftwareSerial mySoftwareSerial(D4, D3); // RX, TX

DFRobotDFPlayerMini myDFPlayer; RemoteMe& remoteMe = RemoteMe::getInstance(TOKEN, DEVICE_ID);

ESP8266WiFiWiFiWiFiWiele;

void setup() { mySoftwareSerial.begin(9600); Serial.początek(115200);

if (!myDFPlayer.begin(mySoftwareSerial)) { //Użyj softwareSerial do komunikacji z mp3.

Serial.println(F("Nie można rozpocząć:")); Serial.println(F("1. Sprawdź ponownie połączenie!")); Serial.println(F("2. Proszę włożyć kartę SD!")); podczas (prawda); } Serial.println(F("DFPlayer Mini online."));

myDFPlayer.setTimeOut(500); //Ustaw limit czasu komunikacji szeregowej 500 ms

myDFPlayer.volume(30);

myDFPlayer. EQ(DFPLAYER_EQ_NORMAL);

myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); WiFiMulti.addAP(WIFI_NAME, WIFI_PASSWORD); while (WiFiMulti.run() != WL_CONNECTED) { delay(100); }

remoteMe.setUserMessageListener(onUserMessage);

remoteMe.setupTwoWayCommunication();

remoteMe.sendRegisterDeviceMessage(NAZWA_URZĄDZENIA);

top.ustawienia();

dolny.ustawienia(); góra.wyczyść(); dół.wyczyść(); }

wartość logiczna wyłączona = prawda;

długi obrót bez znakuOffMillis = 0;

void onUserMessage(uint16_t senderDeviceId, uint16_t dataSize, uint8_t *data) {

uint16_t poz = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(dane, pozycja); uint8_t topMode = RemoteMeMessagesUtils::getUint8(dane, pozycja); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(dane, pozycja); czas uint8_t = RemoteMeMessagesUtils::getUint8(dane, pozycja); tryb uint8_t = RemoteMessagesUtils::getUint8(dane, pozycja);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(numer utworu); } wyłączone = fałsz; wyłączMillis = millis() + 1000 * czas; }

pusta pętla()

{ remoteMe.loop(); top.pętla(); dolna.pętla(); jeśli (wyłącz Millis

}

wyjaśnienie:

#define WIFI_NAME ""#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "powiadamiający" #define TOKEN ""

Musimy podać powyższe dane, szczegółowe instrukcje tutaj pod linkiem również pokazałem jak zarejestrować się w remoteme.org i wygenerować token, void onUserMessage(uint16_t senderDeviceId, uint16_t dataSize, uint8_t *data) { uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(dane, pozycja); uint8_t topMode = RemoteMeMessagesUtils::getUint8(dane, pozycja); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(dane, pozycja); czas uint8_t = RemoteMeMessagesUtils::getUint8(dane, pozycja); tryb uint8_t = RemoteMessagesUtils::getUint8(dane, pozycja);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(numer utworu); } wyłączone = fałsz; wyłączMillis = millis() + 1000 * czas; }

Ta funkcja zostanie wywołana, gdy wiadomość dotrze do Arduino i wyświetli powiadomienie. Kod jest tak jasny, że sam się opisuje. Szczegóły zajęć odsyłam do dokumentacji tutaj i tutaj

void loop(){ remoteMe.loop(); top.pętla(); dolna.pętla(); if (wyłączMillis<millis()){

jeśli (! wyłączone) {

góra.wyczyść();

dół.wyczyść(); mójDFPlayer.stop(); wyłączone = prawda; } }

W pętli wywołujemy funkcje pętli obiektów, a także jeśli minął czas wyświetlania powiadomień, wyłączamy diody i dźwięk.

Krok 5: Odtwarzacz MP3

Odtwarzacz mp3
Odtwarzacz mp3

Komunikuje się z Arduino przez TX/RX – szczegóły samego odtwarzacza tutaj, a biblioteka tutaj

Wgrywamy pliki mp3 na kartę SD. Pliki na karcie sortowane są alfabetycznie, a następnie dzwoniąc:

myDFPlayer.play(5);

Odtwarzamy piąty plik z karty SD z katalogu głównego. Dlatego dobrze jest nadać plikom na karcie SD prefiksy 01, 02 itd. W moim przypadku wygląda to jak na powyższym printscreenie

Aby wygenerować polecenia głosowe Możesz użyć tej strony.

Krok 6: Wgranie programu do Arduino

Wgrywanie programu do Arduino
Wgrywanie programu do Arduino
Wgrywanie programu do Arduino
Wgrywanie programu do Arduino

Zanim wgrasz szkic do Arduino, musisz pobrać potrzebne biblioteki, tutaj znajdziesz szczegółowe instrukcje

dodatkowo musimy zainstalować bibliotekę DFRobotDFPlayerMini oraz Adafruit_NeoPixel

Krok 7: Kontrola

Kontrola
Kontrola
Kontrola
Kontrola

Wysyłamy do naszego Arduino pięć bajtów

  • pierwszy bajt efektu świetlnego dla górnego pierścienia LED
  • Drugi bajtowy efekt świetlny dla dolnego pierścienia LED;
  • numer pliku mp3 do odtworzenia
  • liczba sekund, jak długo będzie odtwarzany efekt świetlny i mp3
  • czy mp3 ma być odtwarzane jednorazowo czy w pętli (1 jeśli ma być odtwarzane w pętli)

Wysyłając bajty

07 0F 01 05 01

Górny pierścień będzie pokazywał światła policyjne (tryb 6) dolne migają na zielono (tryb 15) (sprawdź funkcję setMode na singleRing.cpp i komentarze obok). Pierwszy plik z karty SD będzie odtwarzany przez 5 sekund. A plik będzie odtwarzany w pętli (sprawdź funkcję onUserMessage na arduino.ino)

Wyślijmy te bajty. Spójrz na powyższy ekran i kliknij ikony w kolejności pisanej przez 1, 2, 3. Pojawi się okno

Następnie spójrz na drugi ekran - i wypełnij okno jak na drugim ekranie

Wyświetlone okno służy do wysyłania wiadomości do urządzenia. W polu 1 wybierz urządzenie nadawcy – ponieważ mamy tylko jedno urządzenie, wybieramy je (pole obowiązkowe i nie ma znaczenia, że jest to to samo urządzenie, do którego wysyłamy wiadomość) W polu 2 podajemy bajty do wyślij (na czerwono wartość, którą wprowadziliśmy w 2 będzie reprezentowana jako ciąg), a następnie kliknij przycisk Wyślij.

Po wysłaniu wiadomości nasz powiadamiający powinien zareagować wyświetlając odpowiednie efekty świetlne i odtwarzając wybrane mp3. Zachęcam do wypróbowania różnych efektów podając pierwsze dwa bajty liczby z przedziału od 0 do 22 (patrz opis w funkcji setMode).

Krok 8: Wysyłanie wiadomości za pomocą adresów URL

Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL
Wysyłanie wiadomości za pomocą adresów URL

Jeśli chcemy wyświetlać powiadomienia z zewnętrznej aplikacji np. z IFTTT, musimy mieć URL, który zrobi dokładnie to samo, co zrobiliśmy w oknie w poprzednim kroku. remoteme.org zapewnia REST API. Przejdź do niego, klikając na zakładkę swagger po lewej (ostatnią). Zostanie wyświetlona strona, na tej stronie możemy również wypróbować nasze adresy URL.

Na pierwszym ekranie masz funkcję, którą musisz rozwinąć, a następnie uzupełnij dane jak na drugim ekranie.

uzupełnij dane jak na powyższym zrzucie ekranu. Po kliknięciu wykonania wyślemy wiadomość

070F010501

Odbiorcą jest urządzenie z identyfikatorem 205, to samo urządzenie jest jednocześnie nadawcą. MessageId z ustawieniami „No_RENEVAL” nie ma znaczenia. A następnie kliknij Execute. Notificator zareaguje tak samo jak przy wysyłaniu wiadomości z aplikacji. Po wywołaniu REST poniżej znajduje się wywołany URL - spójrz na trzeci ekran. A kopiuj i wklej do przeglądarki URL został oznaczony zieloną ramką. Na czwartym ekranie moja przeglądarka Chrome po wklejeniu adresu URL

W moim przypadku adres URL to:

app.remoteme.org/api/*/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

Krok 9: Dowolny adres URL do wysłania wiadomości

Dowolny adres URL do wysłania wiadomości
Dowolny adres URL do wysłania wiadomości

W poprzednim kroku Masz adres URL, który wysyła dane do Twojego urządzenia. Niestety po wylogowaniu się z app.remoteme.org przestaje działać. Dzieje się tak, ponieważ nie podaliśmy tokena uwierzytelniającego i nie jesteśmy już zalogowani. Pobierzmy nasz token (lub utwórzmy nowy) i wklejmy go do adresu URL zamiast gwiazdki.

Spójrz na ekran i zastąp * w adresie URL swoim tokenem

w moim przypadku token to:

~267_ZxoWtJ)0ph&2c

więc mój końcowy URL wygląda tak:

app.remoteme.org/api/~267_ZxoWtJ)0ph&2c/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

Teraz możemy go wywołać, nawet jeśli nie jesteśmy zalogowani. A gdy zostanie wywołany, na nasze urządzenie zostanie wysłana wiadomość 205

Krok 10: Integracja z IFTTT 1/7

Integracja z IFTTT 1/7
Integracja z IFTTT 1/7

Utworzony w powyższym kroku adres URL nadaje się do wykonania przez aplikacje zewnętrzne. Jak go używać pokażę na IFTTT. Skonfiguruję go tak, aby powiadamiacz włączał się, gdy na adres e-mail (konto Gmail) przyjdzie e-mail.

Zaloguj się do IFTTT. Następnie przejdź do zakładki Moje aplety, a następnie „Nowy aplet” – pierwszy ekran

Krok 11: Integracja z IFTTT 2/7

Integracja z IFTTT 2/7
Integracja z IFTTT 2/7

Następnie kliknij „+to”

Krok 12: Integracja z IFTTT 3/7

Integracja z IFTTT 3/7
Integracja z IFTTT 3/7

Następnie w polu „Usługi wyszukiwania” wpisz „Gmail”

Następnie "nowy e-mail w skrzynce odbiorczej" (może być potrzebna pewna konfiguracja).

Krok 13: Integracja z IFTTT 4/7

Integracja z IFTTT 4/7
Integracja z IFTTT 4/7

teraz klikamy „+ to”

Krok 14: Integracja z IFTTT 5/7

Integracja z IFTTT 5/7
Integracja z IFTTT 5/7

znajdź „Webhooki” i kliknij je

Krok 15: Integracja z IFTTT 6/7

Integracja z IFTTT 6/7
Integracja z IFTTT 6/7

następnie „Złóż zapytanie internetowe”

Krok 16: Integracja z IFTTT 7/7

Integracja z IFTTT 7/7
Integracja z IFTTT 7/7

uzupełniamy adres URL naszego adresu URL tokenem. Wpisz treść do aplikacji / json i kliknij „utwórz akcję” i Zakończ. Teraz mamy nasz aplet:

Krok 17: Podsumowanie

W tym tutorialu pokazałem jak wysyłać do naszego Arduino wiadomości z systemów zewnętrznych. W podobny sposób integrujemy również inny system niż IFTTT. Niekoniecznie musi to być „powiadamiacz”, który chciałem pokazać na tym przykładzie, jak wysyłać wiadomości z systemów zewnętrznych do naszego Arduino.

kody źródłoweFanPage na Facebooku

Pozdrawiam, Maciek

Zalecana: