Sommario:

Notificatore: 17 passaggi
Notificatore: 17 passaggi

Video: Notificatore: 17 passaggi

Video: Notificatore: 17 passaggi
Video: 23. LE COMUNICAZIONI E LE NOTIFICAZIONI 2024, Novembre
Anonim
notificatore
notificatore

Il dispositivo può essere collegato ad esempio al sistema IFTTT e reagire quando appare una nuova posta. Su app.remoteme.org genereremo un collegamento dopo aver chiamato quali byte verranno inviati ad Arduino, e Arduino mostrerà alcuni effetti luminosi e riprodurrà alcuni mp3 da SDcard

Passaggio 1: cosa è necessario

Ciò che è necessario
Ciò che è necessario
Ciò che è necessario
Ciò che è necessario
  • NodeMCU, WemOS o qualcosa di simile
  • Due anelli LED con diodi WS2812B (ho usato 16 anelli LED)
  • DFRobotDFPlayerMini – questo è un lettore mp3. Riproduce mp3 da SDcard e comunica con Arduino tramite RX/TX
  • Altoparlante
  • Scheda SD
  • Convertitore logico: ho usato questo, il lettore mp3 usa 5V e Arduino 3.3 ecco perché abbiamo bisogno di questo convertitore
  • Conoscenze e abilità per realizzare semplici PCB da soli

La Torre:

  • cartone – due diversi spessori
  • Carta da lucido
  • foglio di alluminio

Passaggio 2: costruzione della torre

Edificio a torre
Edificio a torre
Edificio a torre
Edificio a torre
Edificio a torre
Edificio a torre
Edificio a torre
Edificio a torre

Sopra la pianta della torre in vista laterale (la mia avventura con il disegno tecnico si è conclusa alle elementari), tutte le dimensioni in millimetri.

Principio di funzionamento

  1. anello di LED che illuminano
  2. Carta da lucido
  3. Il tronco di cono, realizzato in cartone e rivestito con un foglio di alluminio, riflette quindi le luci degli anelli a led, in figura 3' = la rete ritagliata
  4. tubo di cartone – tiene le torri in verticale, all'interno del tubo ci sono i cavi per i led
  5. L'altezza dipende da te ho 85mm
  6. Il supporto all'interno di tutte le parti elettroniche

Tutti gli elementi orizzontali dovrebbero essere realizzati in cartone più spesso.

Passaggio 3: schema elettrico

Schema elettrico
Schema elettrico
Schema elettrico
Schema elettrico
Schema elettrico
Schema elettrico
Schema elettrico
Schema elettrico

Il lettore mp3 è alimentato con tensione di 5V e comunica con Arduino tramite TX/RX, è necessario un convertitore logico perché l'Arduino stesso funziona a tensione di 3.3V. Il controllo degli anelli è collegato anche ad Arduino (D5, D6) tramite il convertitore logico.

Nel repository, troverai file eagle con piani PCB

Suggerisco di non saldare permanentemente Arduino e il lettore mp3 solo per usare pins dorati femminili

Passaggio 4: principio di funzionamento

Il nostro Arduino si connette al sistema app.remoteme.org tramite WebSockets (ci sono librerie pronte) tramite questa connessione vengono inviati messaggi a 5 byte:

  • il primo byte dell'effetto luminoso per l'anello LED superiore
  • effetto luce secondo byte per l'anello LED inferiore
  • il numero del file mp3 da riprodurre
  • il numero di secondi per la durata della riproduzione dell'effetto luce e dell'mp3
  • se l'mp3 deve essere riprodotto una volta o in loop

codice sorgente

L'intero codice sorgente lo puoi trovare qui

nei file SingleRing.cpp e SingleRing.h è presente una classe per controllare gli effetti degli anelli LED. Ti suggerisco di iniziare guardando la funzione setMode(int m):

void SingleRing::setMode(int m) { switch (m) { case 0:setConfiguration(0, 0, 50, 0, 5, 1); break;//off =0 case 1:setConfiguration(6, 0, 50, 0, 0, 20); break;//case verde standard solido 2:setConfiguration(6, 0, 0, 50, 0, 20); break;//case blu standard solido 3:setConfiguration(6, 50, 0, 0, 0, 20); break;//case rosso standard solido 4:setConfiguration(6, 50, 10, 0, 0, 20); break;//case arancione standard solido 5:setConfiguration(1, 0, 100, 0, 5, 2); break;//police in senso orario verde case 6:setConfiguration(1, 0, 100, 0, 5, -2); break;// la polizia ripristina il caso verde 7:setConfiguration(1, 0, 0, 100, 5, 2); break;//police in senso orario blu caso 8:setConfiguration(1, 0, 0, 100, 5, -2); break;// la polizia ripristina il caso blu 9:setConfiguration(1, 100, 0, 0, 5, 2); break; // caso rosso standard della polizia 10:setConfiguration(1, 100, 0, 0, 5, -2); break;// la polizia ripristina il caso rosso 11:setConfiguration(1, 100, 20, 0, 5, 2); break; // caso arancione standard della polizia 12:setConfiguration(1, 100, 20, 0, 5, -2); break;// la polizia ripristina il caso arancione 13:setConfiguration(2, 0, 0, 50, 8, 10); break;//cross standard blue case 14:setConfiguration(2, 0, 0, 50, 8, -10); break;// cross revert blue case 15:setConfiguration(5, 0, 50, 0, 0, 20); break;//lampeggia caso verde standard 16:setConfiguration(5, 0, 50, 0, 0, -20); break;// blink odwyrtka green case 17:setConfiguration(5, 0, 0, 50, 0, 20); break;//lampeggia caso blu standard 18:setConfiguration(5, 0, 0, 50, 0, -20); break;// lampeggio ripristina case blu 19:setConfiguration(5, 50, 0, 0, 0, 20); break;//lampeggia caso rosso standard 20:setConfiguration(5, 50, 0, 0, 0, -20); break;// lampeggio ripristina caso rosso 21:setConfiguration(5, 50, 10, 0, 0, 20); break;//lampeggia caso arancione standard 22:setConfiguration(5, 50, 10, 0, 0, -20); break;// lampeggio ripristina arancione default: setConfiguration(0, 0, 50, 0, 5, 1); break;//off =0 } }

a seconda del parametro dato, l'anello visualizzerà l'effetto. Puoi aggiungere il tuo effetto chiamando la funzione setConfiguration con nuovi parametri (cambio di colore, velocità di visualizzazione) aggiungendo una nuova modalità o aggiungendo un effetto completamente nuovo - o fammi sapere nei commenti se mi piace aggiungerò un nuovo effetto

arduino.ino:

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

#includere

#include #include #include "SingleRing.h"

#includere

#include #include

#includere

#define WIFI_NAME ""

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

#define DIODES_COUNT 16

SingleRing top = SingleRing(DIODES_COUNT, D5);

SingleRing in basso = SingleRing(DIODES_COUNT, D6);

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

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

ESP8266WiFiMulti WiFiMulti;

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

if (!myDFPlayer.begin(mySoftwareSerial)) { //Usa softwareSerial per comunicare con mp3.

Serial.println(F("Impossibile iniziare:")); Serial.println(F("1. Ricontrollare la connessione!")); Serial.println(F("2. Inserire la scheda SD!")); mentre (vero); } Serial.println(F("DFPlayer Mini in linea."));

myDFPlayer.setTimeOut(500); //Imposta il timeout della comunicazione seriale 500ms

mioDFPlayer.volume(30);

mioDFPlayer. EQ(DFPLAYER_EQ_NORMAL);

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

remoteMe.setUserMessageListener(onUserMessage);

remoteMe.setupTwoWayCommunication();

remoteMe.sendRegisterDeviceMessage(DEVICE_NAME);

top.setup();

fondo.setup(); top.clear(); fondo.clear(); }

booleano disattivato = vero;

turnOffMillis lungo senza segno = 0;

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

uint16_t posizione = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t topMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t time = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t mode = RemoteMeMessagesUtils::getUint8(data, pos);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } disattivato = falso; turnOffMillis = millis() + 1000 * tempo; }

ciclo vuoto()

{ remoteMe.loop(); top.loop(); fondo.loop(); if (spegniMillis

}

spiegazione:

#define WIFI_NAME ""#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "notificator" #define TOKEN ""

Abbiamo bisogno di fornire i dati di cui sopra, istruzioni dettagliate qui al link, inoltre ho mostrato come registrarsi in remoteme.org e generare il token, void onUserMessage(uint16_t senderDeviceId, uint16_t dataSize, uint8_t *data) { uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t topMode = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t trackNumber = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t time = RemoteMeMessagesUtils::getUint8(data, pos); uint8_t mode = RemoteMeMessagesUtils::getUint8(data, pos);

bottom.setMode(bottomMode);

top.setMode(topMode); if (mode == 1) { myDFPlayer.loop(trackNumber); } else { myDFPlayer.play(trackNumber); } disattivato = falso; turnOffMillis = millis() + 1000 * tempo; }

Questa funzione verrà chiamata quando il messaggio arriva ad Arduino e visualizza la notifica. Il codice è così chiaro che descrive se stesso. Per i dettagli delle classi rimando alla documentazione qui e qui

void loop(){ remoteMe.loop(); top.loop(); fondo.loop(); if (turnOffMillis<millis()){

if (!spento) {

top.clear();

fondo.clear(); mioDFPlayer.stop(); spento = vero; } }

Nel ciclo, chiamiamo le funzioni di ciclo degli oggetti e anche se è trascorso il tempo di visualizzazione delle notifiche, spegniamo i diodi e il suono.

Passaggio 5: lettore Mp3

Lettore mp3
Lettore mp3

Comunica con Arduino tramite TX / RX – Dettagli del lettore stesso qui e la libreria qui

Carichiamo file mp3 sulla scheda SD. I file sulla scheda vengono ordinati alfabeticamente e quindi chiamando:

mioDFPlayer.play(5);

Riproduciamo il quinto file dalla scheda SD dalla directory principale. Ecco perché è bene dare ai file sulla scheda SD i prefissi 01, 02 ecc. Nel mio caso sembra nella schermata di stampa sopra

Per generare comandi vocali È possibile utilizzare questa pagina.

Passaggio 6: caricamento del programma su Arduino

Caricare il programma su Arduino
Caricare il programma su Arduino
Caricare il programma su Arduino
Caricare il programma su Arduino

Prima di caricare lo schizzo su Arduino, devi scaricare le librerie necessarie qui troverai le istruzioni dettagliate

inoltre, dobbiamo installare la libreria DFRobotDFPlayerMini e Adafruit_NeoPixel

Passaggio 7: controllo

Controllo
Controllo
Controllo
Controllo

Inviamo al nostro Arduino cinque byte

  • il primo byte dell'effetto luminoso per l'anello LED superiore
  • effetto luce secondo byte per l'anello LED inferiore
  • il numero del file mp3 da riprodurre
  • il numero di secondi per la durata della riproduzione dell'effetto luce e dell'mp3
  • se l'mp3 deve essere riprodotto una volta o in loop (1 se deve essere riprodotto in loop)

Inviando byte

07 0F 01 05 01

L'anello superiore mostrerà le luci della polizia (modalità 6) quella inferiore lampeggia in verde (modalità 15) (controlla la funzione setMode su singleRing.cpp e i commenti accanto ad essa). Il primo file dalla scheda SD verrà riprodotto per 5 secondi. E il file verrà riprodotto in loop (controlla la funzione onUserMessage su arduino.ino)

Inviamo questi byte. Guarda la schermata sopra e clicca le icone nell'ordine scritto da 1, 2, 3. Appare la finestra

Quindi guarda la seconda schermata e riempi la finestra come nella seconda schermata

La finestra che appare serve per inviare messaggi al dispositivo. Nel campo 1, seleziona il dispositivo mittente – poiché abbiamo un solo dispositivo, lo selezioniamo (questo è un campo obbligatorio e non importa che sia lo stesso dispositivo a cui inviamo un messaggio) Nel campo 2 diamo i byte a invia (in rosso il valore che abbiamo inserito in 2 sarà rappresentato come una stringa) quindi fai clic sul pulsante Invia.

Dopo aver inviato il messaggio, il nostro notificatore dovrebbe reagire visualizzando gli effetti di luce appropriati e riproducendo l'mp3 selezionato. Ti incoraggio a provare diversi effetti dando i primi due byte di un numero compreso tra 0 e 22 (vedi descrizione nella funzione setMode).

Passaggio 8: invio di messaggi tramite URL

Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL
Invio di messaggi tramite URL

Se vogliamo visualizzare le notifiche da un'applicazione esterna, ad esempio con IFTTT, abbiamo bisogno di un URL che faccia esattamente la stessa cosa che abbiamo fatto nella finestra nel passaggio precedente. remoteme.org fornisce REST API. Vai ad esso facendo clic sulla scheda spavalderia a sinistra (l'ultima). Verrà visualizzata una pagina, in questa pagina possiamo anche provare i nostri URL.

Nella prima schermata hai la funzione Devi espandere, quindi riempire i dati come nella seconda schermata.

compilare i dati come nello screenshot sopra. Dopo aver fatto clic su Esegui, invieremo un messaggio

070F010501

Il destinatario è il dispositivo con ID 205, lo stesso dispositivo è anche un mittente. MessageId con le impostazioni "No_RENEVAL" è irrilevante. Quindi fare clic su Esegui. Notificator reagirà allo stesso modo di quando si inviano messaggi dall'applicazione. Dopo aver chiamato REST di seguito è l'URL che è stato chiamato - guarda la terza schermata. E copia e incolla nell'URL del browser è stato contrassegnato con un bordo verde. Alla quarta schermata il mio browser Chrome dopo aver incollato l'URL

Nel mio caso, l'URL è:

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

Passaggio 9: URL qualsiasi per inviare un messaggio

Qualsiasi URL per inviare un messaggio
Qualsiasi URL per inviare un messaggio

Al passaggio precedente Hai un URL che invia i dati al tuo dispositivo. Sfortunatamente, dopo la disconnessione da app.remoteme.org, smette di funzionare. Questo perché non abbiamo fornito il token di autenticazione e non siamo più connessi. Prendiamo il nostro token (o creiamone uno nuovo) e incolliamolo nell'URL anziché nella stella.

Guarda lo schermo e sostituisci * nell'URL con il tuo token

nel mio caso il token è:

~267_ZxoWtJ)0ph&2c

quindi il mio URL finale è simile a:

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

Ora possiamo chiamarlo anche se non abbiamo effettuato l'accesso. E quando viene chiamato, verrà inviato un messaggio al nostro dispositivo 205

Passaggio 10: integrazione con IFTTT 1/7

Integrazione con IFTTT 1/7
Integrazione con IFTTT 1/7

L'URL creato nel passaggio precedente è adatto per l'esecuzione da parte di applicazioni esterne. Come usarlo lo mostrerò su IFTTT. Lo configurerò in modo che il notificatore si accenda quando un'e-mail arriva all'indirizzo e-mail (account Gmail).

Accedi a IFTTT. Quindi vai alla scheda Le mie applet e poi "Nuova applet" - prima schermata

Passaggio 11: integrazione con IFTTT 2/7

Integrazione con IFTTT 2/7
Integrazione con IFTTT 2/7

Quindi fai clic su "+ questo"

Passaggio 12: integrazione con IFTTT 3/7

Integrazione con IFTTT 3/7
Integrazione con IFTTT 3/7

Quindi nel campo “Cerca servizi” scrivi “Gmail”

Quindi "nuova email nella posta in arrivo" (potrebbe essere necessaria una configurazione).

Passaggio 13: integrazione con IFTTT 4/7

Integrazione con IFTTT 4/7
Integrazione con IFTTT 4/7

ora clicchiamo su “+ quello”

Passaggio 14: integrazione con IFTTT 5/7

Integrazione con IFTTT 5/7
Integrazione con IFTTT 5/7

trova "Webhook" e fai clic su di esso

Passaggio 15: integrazione con IFTTT 6/7

Integrazione con IFTTT 6/7
Integrazione con IFTTT 6/7

poi “Fai una richiesta web”

Passaggio 16: integrazione con IFTTT 7/7

Integrazione con IFTTT 7/7
Integrazione con IFTTT 7/7

completiamo l'URL del nostro url con il token. Tipo di contenuto per application/json e fare clic su "crea azione" e Fine. Ora abbiamo la nostra applet:

Passaggio 17: Riepilogo

In questo tutorial, ho mostrato come inviare al nostro Arduino messaggi da sistemi esterni. Integriamo anche qualche altro sistema quindi IFTTT in modo simile. Non deve essere necessariamente un "notificatore" Volevo mostrare in questo esempio come inviare messaggi da sistemi esterni al nostro Arduino.

sourcecodesFanPage su Facebook

Saluti, Maciek

Consigliato: