Notifikator

Notifikator

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

  1. pierścień ledów rzucający światło na 2.
  2. Kalka techniczna – półprzeźroczysty materiał.
  3. 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
  4. rurka z kartonu – trzyma wieże pionowo, a w środku poprowadzone są podłączenia diód
  5. Wysokość zależy od was ja u siebie mam 85mm
  6. 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.

kody żródłowe

remoteme.org  Facebook 

Pozdrawiam,

Maciek

Ocena: 4.7/5 (głosów: 10)

Podobne posty

8 komentarzy do “Notifikator

Odpowiedz

anuluj

Masz uwagi?