Wprowadzanie
Tym razem pokaże Wam jak zrobić notifikator.
Urządzenie można podłączyć np do systemu IFTTT i reagować odpowiednio gdy pojawi się nowy mail. Poprzez app.remoteme.org wygenerujemy link po wywołaniu którego do naszego arduino zostaną wysłane bajty z informacją jaki efekt wyświetlić.
Co będzie potrzebne
- NodeMCU, WemOS lub coś podobnego
- Dwa pierścienie LED z diodami WS2812B (ja użyłem pierścienie z 16-toma diodami)
- DFRobotDFPlayerMini – czyli odtwarzacz mp3. Nasze pliki są zapisane na karcie SD. Do moduły poprzez Serial’a wysyłamy komendy – np zagraj utwór pierwszy
- Głośnik
- Karta SD
- Konwerter stanów logicznych – ja użyłem tego, wynika to z tego, że odtwarzacz pracuje na napięciu 5V a nasze aruino na 3.3V
- Umiejętność wytrawienia prostej płytki PCB
Wieża
- tektura – dwie różne grubości
- kalka techniczna
- folia aluminiowa
Budowa wieży
Powyżej plan wieży w rzucie bocznym (moja przygoda z rysunkiem technicznym zakończyła się w podstawówce ), wymiary podane w milimetrach.
Zasada działania
- pierścień ledów rzucający światło na 2.
- Kalka techniczna – półprzeźroczysty materiał.
- stożek ścięty, wykonany z tektury i oklejony folią aluminiową, żeby ładnie odbijał światło ledów które następnie przechodzi przez 2, na rysunku 3′ siatka do wycięcia
- rurka z kartonu – trzyma wieże pionowo, a w środku poprowadzone są podłączenia diód
- Wysokość zależy od was ja u siebie mam 85mm
- Podstawka – wymiary dowolne u mnie identyczne jak na planie, w niej musi się zmieścić arduino głośnik odtwarzacz mp3 i konwerter stanów
Rysunek powyżej powinien rozwiać wszelkie wątpliwości jeżeli chodzi o budowę
I widok całości.
Widok od dołu wraz z podłączeniami.
Wybaczcie brak poszczególnych kroków budowy, ale w czasie budowanie wieży nie sądziłem, że zrobię ten kurs.
Najlepiej wszystkie poziome elementu wykonać z grubszej tektury.
Schemat połączeń
Odtwarzacz mp3 jest zasilany napięciem 5V i komunikuje się z arduino poprzez TX/RX , potrzebny jest konwerter stanów logicznych ponieważ samo arduino pracuje na napięciu 3.3V. Sterowanie Pierścieniami led również jest podłączone do arduino (D5,D6) poprzez konwerter stanów logicznych.
W repozytorium znajduję się rownież plik Eagle do wytrawienia płytki
Uwaga: Jeżeli zdecydujecie się wlutować NodeMCU bezpośrednio w płytkę warto usunąć rozlaną masę spod anteny i w obrębie 15mm pod nią (albo jeszcze lepiej przesunąć nodeMCU tak żeby antena wystawała poza obrys płytki), Pozwoli to wyeliminować interferencje.
gotowa płytka:
Proponuje nie wlutowywać na stałe arduino i odtwarzacza mp3 tylko użyć żeńskich goldpinów
Zasada działania
Nasze arduino łączy się do systemu app.remoteme.org używając websocketów ( są gotowe bibliotek) przez to połączenie wysyłane są wiadomości 5 bajtowe:
- pierwszy bajt efekt świetlny dla górnego pierścienia led
- drugi bajt efekt świetlny dla dolnego pierścienia led
- numer pliku mp3 do odtworzenia
- ilość sekund jak długi ma być efekt świetlny i odtwarzane mp3
- czy mp3 ma być odtworzone raz czy w pętli
kod źródłowy
Cały kod źródłowy dla arduino znajduje się tutaj
w plikach SingleRing.cpp i SingleRing.h znajduje się klasa do sterowania efektami pierścieni ledowych. Proponuje zacząć od przeglądnięcia funkcji setMode(int m):
w zależności od podanego parametru pierścień będzie wyświetlał dany efekt. Możecie dopisać własny efekt wołając funkcję setConfiguration z nowymi parametrami (zmiana koloru, prędkość wyświetlania) dodając nowy mode, albo dopisać całkiem nowy efekt – albo dać mi znać w komentarzach jeżeli mi się spodoba doimplementuje ;)
arduino.ino:
omówienie:
musimy uzupełnić dane dotyczące naszego połączenia. Szczegółowy opis tutaj wraz z instrukcją jak zarejestrować się w remoteme.org i wygenerować token
Ta funkcja będzie wołana jak przyjdzie wiadomość do wyświetlenia notyfikacji. Kod jest na tyle przejrzysty, że sam siebie opisuje. Do szczegółów klas odsyłam do dokumentacji tutaj i tutaj
w pętli wywołujemy funkcję loop obiektów, a także jeżeli czas wyświetlania notyfikacji minął wyłączamy diody i dźwięk.
Odtwarzacz mp3
Komunikuje się on z arduino poprzez TX/RX – po stronie arduino serial softwerowy. Szczegóły samego odtwarzacza tutaj , a bilbioteka z której krozystam tutaj
Na kartę SD wgrywamy pliki mp3. Pliki na karcie są uporządkowane alfabetycznie i wtedy wołając:
Odtwarzamy piąty plik z karty SD z katalogu głównego. Dlatego warto plikom na karcie SD dać przedrostki w postaci 01,02 itd. U mnie to wygląda tak:
Do generowania komunikatów głosowych użyłem tej strony.
Wgranie programu do arduino
Przed wgraniem należy ściągnąć bilbioteki. Opisałem to tutaj
dodatkowo musimy zianstalować biblioteke DFRobotDFPlayerMini
oraz Adafruit_NeoPixel
Sterowanie
Sterowanie nofikatorem polega na wysyłaniu do niego wiadomośći pięcio bajtowych opis bajtów raz jeszcze:
- pierwszy bajt efekt świetlny dla górnego pierścienia led
- drugi bajt efekt świetlny dla dolnego pierścienia led
- numer pliku mp3 do odtworzenia
- ilość sekund jak długi ma być efekt świetlny i odtwarzane mp3
- czy mp3 ma być odtworzone raz czy w pętli (1 jeżeli ma być odtwarzany w pętli)
Czyli wysyłając bajty:
górny pasek będzie udawał policję (mode 6), dolny będzie migał na zielono(mode 15) (patrz funkcja setMode w singleRing.cpp w komentarzach znajduję się opis efektu). Zostanie odtworzony pierwszy plik mp3 z karty, efekt będzie wyświetlany przez 5 sekund, a dźwięk będzie odtworzony w pętli (bo ostatni bajt to 01 – patrz funkcja onUserMessage a arduino.ino)
Wyślijmy zatem te bajty. Logujemy się do aplikacji
Przechodzimy do zakładki devices – nr 1 , 2: status naszego urządzenia powinien być jak na screenie. Klikamy w ikonkę do wysyłania wiadomości – 3
Okienko które się pojawiło służy do wysyłania wiadomości do urządzenia. W polu 1 wybieramy urządzenie które wybieramy jako wysyłające – ponieważ mamy tylko jedno urządzenie wybieramy właśnie je (jest to 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 wysłania ( w czerwonym polu wartość którą wpisaliśmy w 2 będzie reprezentowana jako string) i klikamy przycisk Send.
Po wysłaniu wiadomości nasz notyfikator powinien zareagować wyświetlając odpowiednie efekty świetlne i grając wybrany mp3. Zachęcam do wypróbowania różnych efektów podając jako dwa pierwsze bajty liczby z zakresu 0 – 22 ( patrz opis w funkcji setMode).
Wysyłanie wiadomości korzystając z URLi
Jeżeli chcemy wyświetlić notyfikacje z zewnętrznej aplikacji np z IFTTT potrzebujemy mieć url który zrobi dokładnie to samo co robiliśmy w okienku w poprzednim kroku. remoteme.org udostępnia REST APi. Przechodzimy do niego klikając zakładkę swagger w (ostania po lewej stronie). Wyświetli się strona gdzie widzimy Api dzięki któremu możemy komunikować się z remoteme.org wysyłając zapytanie http.
Strona pozwala również wysłać komunikaty http z poziomy przeglądarki. Kliknjimy przycisk “Try it out” i wyślijmy wiadomość
uzupełnijmy dane jak na screenie powyżej. Po kliknięciu execute wyślemy wiadomość
do urządzenia o id 205, jako adresat jest również to samo urządzenie. MessageId przy ustawieniach “No_RENEVAL” jest nie istotne. I kliknijmy Execute.
Notifikator zareaguje identycznie jak w czasie wysyłania wiadomości z poziomu aplikacji.
Po wywołaniu RESTa poniżej znajduje się URL który został wywołany:
skopiujmy go i wklejmy do adresu przeglądarki:
W moim przypadku URL to:
Niestety po wylogowaniu z app.remoteme.org, przestaje on działać. Dzieje się tak dlatego, że nie podaliśmy tokenu uwierzytelniającego, a nie jesteśmy już zalogowani. Pobierzmy zatem nasz token (lub wygenerujmy nowy) i wklejmy go do URL’a zamiast gwiazdki
mój token to
więc url wygląda tak:
Teraz możemy go wywoływać nawet jak jesteśmy niezalogowani. A po jego wywołaniu do naszego urządzenia 205 zostanie wysłana wiadomość
Uwaga: Request GET będzie działał prawidłowo , jednak nie jest to sytuacja dla której request GET był zaprojektowany, ładniej użyć requesta PUT, albo POST – są dostępne odpowiednie wersje REST’a do wysyłania wiadomości tymi wywołaniami.
Integracja z IFTTT
Url utworzny w kroku powyżej nadaję się do wykonywania przez aplikacje zewnętrzne. Jak go użyć pokaże na przykładzie IFTTT. I skonfiguruje go tak żeby notyfikator się włączał jak przyjdzie do mnie email (konto gmail).
Zalogujmy się do IFTTT.W iFTTT przechodzimy do zakładki My Applets a następnie New Applet:
Następnie klikamy w “+this”
w polu “Search services” wpisujemy gmail.
A następnie new email in inbox (Możliwe że musimy wybrać konto i pozwolić IFTTT na dostęp).
Po Tych krokach nasz IFTTT powinien wyglądać tak:
teraz klikamy na “+that”
wyszukujemy i wyberamy Webhooks:
następnie “Make a web request”
uzupełniamy URL naszym url z tokenem. Content type to application/json i klikamy “create action” i Finish. Teraz mamy nasz aplet:
Po wysłaniu emaila na wskazane w IFTTT konto, Nasz notyfikator da nam znać (IFTTT dopiero po chwili poinformuje remoteme.org dlatego może upłynąć trochę czasu zanim dostaniemy notyfikacje, u mnie do 1minuty ale zwykle dużo szybciej).
Podsumowanie
W tym kursie pokazałem jak wysłać do naszego arduino wiadomości z zewnętrznych systemów na przykładzie IFTTT. Podobnie integrujemy inne zewnętrzne systemy. To nie koniecznie musi być notyfikator, i nie koniecznie musi to być IFTTT ;), chciałem pokazać na tym przykładzie jak wysyłać wiadomości z zewnętrznych systemów do naszego arduino.
remoteme.org Facebook
Pozdrawiam,
Maciek
Kapitalny projekt i świetny opis! Gratki!
Dzięki :)
Witaj,
ciekawy tekst, łączenie wielu technik – podoba mi się. Sam już raz przymierzałem się do IFTTT dla thingy52, więc poradnik mi się przyda:) Sam tekst do lekkiego przejrzenia – np. raz piszesz o arduino, raz o nodemcu, plik z projektem nazywa się “arduino.ino” ale kod dla ESP:) Proponuję posprzątać.
Daję 5* (mimo drobnego bałaganiarstwa:))
Pozdrawiam,
Arek
dzięki, wieczorem posprzątam ;)
Rewelacja!
Projekt bardzo ciekawy, ale nie wiem czy w erze smartfonow uzyteczny :)
Jak najbardziej, w pracy podpielismy go do systemu “Continous integration” i jak ktos popsuje builda to sie wlacza ;)
Bardzo fajny projekt jak przyjda czesci to sprobuje złożyć.