Spisu treści:
- Krok 1: Co jest potrzebne
- Krok 2: Budowa wieży
- Krok 3: Schemat połączeń
- Krok 4: Zasada działania
- Krok 5: Odtwarzacz MP3
- Krok 6: Wgranie programu do Arduino
- Krok 7: Kontrola
- Krok 8: Wysyłanie wiadomości za pomocą adresów URL
- Krok 9: Dowolny adres URL do wysłania wiadomości
- Krok 10: Integracja z IFTTT 1/7
- Krok 11: Integracja z IFTTT 2/7
- Krok 12: Integracja z IFTTT 3/7
- Krok 13: Integracja z IFTTT 4/7
- Krok 14: Integracja z IFTTT 5/7
- Krok 15: Integracja z IFTTT 6/7
- Krok 16: Integracja z IFTTT 7/7
- Krok 17: Podsumowanie
Wideo: Powiadamiający: 17 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
- 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
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
- pierścień diod LED zaświeca się
- Kalka
- 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
- tuba kartonowa – utrzymuje wieże w pionie, wewnątrz tuby znajdują się kable do ledów
- Wysokość zależy od Ciebie mam 85mm
- Stojak wewnątrz wszystkich części elektronicznych
Wszystkie elementy poziome powinny być wykonane z grubszej tektury.
Krok 3: 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
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
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
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
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
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
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
Następnie kliknij „+to”
Krok 12: 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
teraz klikamy „+ to”
Krok 14: Integracja z IFTTT 5/7
znajdź „Webhooki” i kliknij je
Krok 15: Integracja z IFTTT 6/7
następnie „Złóż zapytanie internetowe”
Krok 16: 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:
Licznik kroków - Micro:Bit: 12 kroków (ze zdjęciami)
Licznik kroków - Micro:Bit: Ten projekt będzie licznikiem kroków. Do pomiaru kroków użyjemy czujnika przyspieszenia wbudowanego w Micro:Bit. Za każdym razem, gdy Micro:Bit się trzęsie, dodamy 2 do licznika i wyświetlimy go na ekranie
Lewitacja akustyczna z Arduino Uno krok po kroku (8 kroków): 8 kroków
Lewitacja akustyczna z Arduino Uno Krok po kroku (8-kroków): ultradźwiękowe przetworniki dźwięku Zasilacz żeński L298N Dc z męskim pinem dc Arduino UNOBreadboardJak to działa: Najpierw wgrywasz kod do Arduino Uno (jest to mikrokontroler wyposażony w cyfrowy oraz porty analogowe do konwersji kodu (C++)
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: 6 kroków
Jak używać silnika krokowego jako enkodera obrotowego i wyświetlacza OLED dla kroków: W tym samouczku dowiemy się, jak śledzić kroki silnika krokowego na wyświetlaczu OLED. Obejrzyj film demonstracyjny.Kredyt samouczka oryginalnego trafia do użytkownika YouTube „sky4fly”
Bolt - DIY Wireless Charging Night Clock (6 kroków): 6 kroków (ze zdjęciami)
Bolt - DIY Wireless Charging Night Clock (6 kroków): Ładowanie indukcyjne (znane również jako ładowanie bezprzewodowe lub ładowanie bezprzewodowe) to rodzaj bezprzewodowego przesyłania energii. Wykorzystuje indukcję elektromagnetyczną do dostarczania energii elektrycznej do urządzeń przenośnych. Najpopularniejszym zastosowaniem jest stacja ładowania bezprzewodowego Qi
Jak zdemontować komputer za pomocą prostych kroków i zdjęć: 13 kroków (ze zdjęciami)
Jak zdemontować komputer za pomocą prostych kroków i zdjęć: To jest instrukcja demontażu komputera. Większość podstawowych komponentów ma budowę modułową i jest łatwa do usunięcia. Jednak ważne jest, abyś był w tym zorganizowany. Pomoże to uchronić Cię przed utratą części, a także ułatwi ponowny montaż