Cuprins:

Notificator: 17 pași
Notificator: 17 pași

Video: Notificator: 17 pași

Video: Notificator: 17 pași
Video: Cum să remediați problema de sunet de notificare după actualizarea iOS 17 2024, Noiembrie
Anonim
Notificator
Notificator

Dispozitivul poate fi conectat, de exemplu, la sistemul IFTTT și poate reacționa atunci când apare un nou e-mail. La app.remoteme.org vom genera un link după apelare care octeți vor fi trimis la Arduino, iar Arduino va afișa un anumit efect de lumină și va reda mp3 din cardul SD

Pasul 1: Ce este necesar

Ceea ce este necesar
Ceea ce este necesar
Ceea ce este necesar
Ceea ce este necesar
  • NodeMCU, WemOS sau ceva similar
  • Două inele LED cu diode WS2812B (am folosit inele 16 leduri)
  • DFRobotDFPlayerMini - acesta este un player mp3. Redă mp3 de pe cardul SD și comunică cu Arduino prin RX / TX
  • Speaker
  • Card SD
  • Convertor logic - l-am folosit pe acesta, playerul mp3 folosește 5V și Arduino 3.3 de aceea avem nevoie de acest convertor
  • Cunoștințe și abilități pentru a face PCB-uri simple de către sinele nostru

Turnul:

  • carton - două grosimi diferite
  • Hârtie de calc
  • folie de aluminiu

Pasul 2: Clădirea turnului

Clădirea Turnului
Clădirea Turnului
Clădirea Turnului
Clădirea Turnului
Clădirea Turnului
Clădirea Turnului
Clădirea Turnului
Clădirea Turnului

Deasupra planului turnului în vedere laterală (aventura mea cu desenul tehnic s-a încheiat în școala primară), toate dimensiunile în milimetri.

Principiul de funcționare

  1. inel de LED-uri care luminează
  2. Hârtie de calc
  3. Conul trunchiat, realizat din carton și acoperit cu folie de aluminiu, deci reflectă luminile din inelele led, din figura 3 ‘= ochiul decupat
  4. tub de carton - ține turnurile vertical, în interiorul tubului sunt cabluri pentru leduri
  5. Înălțimea depinde de tine. Am 85mm
  6. Suportul din interiorul tuturor pieselor electronice

Toate elementele orizontale trebuie să fie realizate din carton mai gros.

Pasul 3: Schema de cablare

Schema de conexiuni
Schema de conexiuni
Schema de conexiuni
Schema de conexiuni
Schema de conexiuni
Schema de conexiuni
Schema de conexiuni
Schema de conexiuni

Playerul mp3 este furnizat cu tensiune de 5V și comunică cu Arduino prin TX / RX, este nevoie de un convertor logic, deoarece Arduino în sine funcționează pe tensiune de 3,3V. Controlul inelelor este, de asemenea, conectat la Arduino (D5, D6) prin convertorul logic.

La depozit, veți găsi fișiere Eagle cu planuri PCB

Vă sugerez să nu lipiți permanent Arduino și playerul mp3 numai pentru a utiliza pini de aur de sex feminin

Pasul 4: Principiul de funcționare

Arduino-ul nostru se conectează la sistemul app.remoteme.org folosind WebSockets (există biblioteci gata) prin această conexiune sunt trimise mesaje de 5 octeți:

  • primul octet al efectului de lumină pentru inelul LED superior
  • efect de lumină al doilea octet pentru inelul LED inferior
  • numărul fișierului mp3 de redat
  • numărul de secunde cât timp vor fi redate efectul de lumină și mp3-ul
  • dacă mp3 ar trebui redat o dată sau într-o buclă

cod sursa

Întregul cod sursă Puteți găsi aici

în fișierele SingleRing.cpp și SingleRing.h există o clasă pentru a controla efectele inelelor LED. Vă sugerez să începeți examinând funcția 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); pauză; // carcasă verde standard standard 2: setConfiguration (6, 0, 0, 50, 0, 20); pauză; // carcasă albastră standard solidă 3: setConfiguration (6, 50, 0, 0, 0, 20); break; // carcasă standard roșie solidă 4: setConfiguration (6, 50, 10, 0, 0, 20); break; // carcasă portocalie standard solidă 5: setConfiguration (1, 0, 100, 0, 5, 2); pauză; // poliția carcasă verde în sensul acelor de ceasornic 6: setConfiguration (1, 0, 100, 0, 5, -2); // poliția revine la cazul verde 7: setConfiguration (1, 0, 0, 100, 5, 2); pauză; // poliția albastru în sensul acelor de ceasornic caz 8: setConfiguration (1, 0, 0, 100, 5, -2); break; // poliția revine la albastru caz 9: setConfiguration (1, 100, 0, 0, 5, 2); pauză; // polițist standard roșu caz 10: setConfiguration (1, 100, 0, 0, 5, -2); // poliția revine la caz roșu 11: setConfiguration (1, 100, 20, 0, 5, 2); pauză; // polițist standard portocaliu 12: setConfiguration (1, 100, 20, 0, 5, -2); pauză; // poliția revine la portocaliu 13: setConfiguration (2, 0, 0, 50, 8, 10); break; // încrucișează carcasa albastră standard 14: setConfiguration (2, 0, 0, 50, 8, -10); break; // cruce revine la albastru carcasă 15: setConfiguration (5, 0, 50, 0, 0, 20); pauză; // clipi carcasă verde standard 16: setConfiguration (5, 0, 50, 0, 0, -20); pauză; // clipesc odwyrtka caseta verde 17: setConfiguration (5, 0, 0, 50, 0, 20); pauză; // clipire carcasă albastră standard 18: setConfiguration (5, 0, 0, 50, 0, -20); pauză; // clipire revine la albastru caz 19: setConfiguration (5, 50, 0, 0, 0, 20); pauză; // clipi carcasă roșie standard 20: setConfiguration (5, 50, 0, 0, 0, -20); pauză; // clipire revine la roșu carcasă 21: setConfiguration (5, 50, 10, 0, 0, 20); pauză; // clipi carcasă portocalie standard 22: setConfiguration (5, 50, 10, 0, 0, -20); pauză; // clipire revine la portocaliu implicit: setConfiguration (0, 0, 50, 0, 5, 1); pauză; // off = 0}}

în funcție de parametrul dat, inelul va afișa efectul. Puteți adăuga propriul efect apelând setul de funcții Configurare cu parametri noi (schimbarea culorii, viteza de afișare) prin adăugarea unui mod nou sau adăugarea unui efect complet nou - sau anunțați-mă în comentarii dacă îmi place, voi adăuga un efect nou

arduino.ino:

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

#include

#include #include #include "SingleRing.h"

#include

#include #include

#include

#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 jos = 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)) {// Folosiți softwareSerial pentru a comunica cu mp3.

Serial.println (F ("Imposibil de început:")); Serial.println (F ("1. Vă rugăm să verificați din nou conexiunea!")); Serial.println (F ("2. Vă rugăm să introduceți cardul SD!")); while (adevărat); } Serial.println (F ("DFPlayer Mini online."));

myDFPlayer.setTimeOut (500); // Setați expirarea comunicării seriale la 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) {întârziere (100); }

remoteMe.setUserMessageListener (onUserMessage);

remoteMe.setupTwoWayCommunication ();

remoteMe.sendRegisterDeviceMessage (DEVICE_NAME);

top.setup ();

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

boolean turnat Off = adevărat;

turnul lung nesemnat OffMillis = 0;

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

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

bottom.setMode (bottomMode);

top.setMode (topMode); if (mode == 1) {myDFPlayer.loop (trackNumber); } else {myDFPlayer.play (trackNumber); } TurnOff = false; turnOffMillis = millis () + 1000 * timp; }

bucla nulă ()

{remoteMe.loop (); top.loop (); bottom.loop (); if (turnOffMillis

}

explicaţie:

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

Trebuie să oferim date de mai sus, instrucțiuni detaliate aici, la link, de asemenea, am arătat cum să mă înregistrez în remoteme.org și să generez simbolul, void onUserMessage (uint16_t senderDeviceId, uint16_t dataSize, uint8_t * data) {uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils:: getUint8 (date, pos); uint8_t topMode = RemoteMeMessagesUtils:: getUint8 (date, pos); uint8_t trackNumber = RemoteMeMessagesUtils:: getUint8 (date, pos); uint8_t time = RemoteMeMessagesUtils:: getUint8 (date, pos); uint8_t mode = RemoteMeMessagesUtils:: getUint8 (date, pos);

bottom.setMode (bottomMode);

top.setMode (topMode); if (mode == 1) {myDFPlayer.loop (trackNumber); } else {myDFPlayer.play (trackNumber); } TurnOff = false; turnOffMillis = millis () + 1000 * timp; }

Această funcție va fi apelată când mesajul va ajunge la Arduino și va afișa notificarea. Codul este atât de clar încât se descrie pe sine. Mă refer la detaliile cursurilor la documentația de aici și de aici

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

dacă (! Închis) {)

top.clear ();

bottom.clear (); myDFPlayer.stop (); întorsOff = adevărat; }}

În buclă, numim funcțiile de buclă ale obiectelor și, de asemenea, dacă timpul de afișare a notificărilor a trecut, oprim diodele și sunetul.

Pasul 5: MP3 Player

Mp3 player
Mp3 player

Comunică cu Arduino prin TX / RX - Detalii despre player în sine și biblioteca aici

Încărcăm fișiere mp3 pe cardul SD. Fișierele de pe card sunt sortate alfabetic și apoi apelând:

myDFPlayer.play (5);

Redăm al cincilea fișier de pe cardul SD din directorul rădăcină. De aceea este bine să dați fișiere pe prefixele cardului SD 01, 02 etc. În cazul meu, arată ca pe ecranul de imprimare de mai sus

Pentru a genera comenzi vocale Puteți utiliza această pagină.

Pasul 6: Încărcarea programului pe Arduino

Încărcarea programului pe Arduino
Încărcarea programului pe Arduino
Încărcarea programului pe Arduino
Încărcarea programului pe Arduino

Înainte de a încărca schița pe Arduino, trebuie să descărcați bibliotecile necesare aici, veți găsi instrucțiuni detaliate

în plus, trebuie să instalăm biblioteca DFRobotDFPlayerMini și Adafruit_NeoPixel

Pasul 7: Control

Control
Control
Control
Control

Trimitem către Arduino cinci octeți

  • primul octet al efectului de lumină pentru inelul LED superior
  • efect de lumină al doilea octet pentru inelul LED inferior
  • numărul fișierului mp3 de redat
  • numărul de secunde cât timp vor fi redate efectul de lumină și mp3-ul
  • dacă mp3-ul ar trebui redat o dată sau în buclă (1 dacă ar trebui redat în buclă)

Prin trimiterea de octeți

07 0F 01 05 01

Inelul superior va afișa luminile poliției (modul 6) în partea de jos a clipi verde (modul 15) (verificați funcția setMode la singleRing.cpp și comentariile de lângă acesta). Primul fișier din cardul SD va fi redat timp de 5 secunde. Și fișierul va fi redat în buclă (verificați funcția onUserMessage la arduino.ino)

Să trimitem acești octeți. Uitați-vă la ecranul de mai sus și faceți clic pe pictograme în ordinea scrisă de 1, 2, 3. Apare fereastra

Apoi, uitați-vă la al doilea ecran - și completați fereastra ca la al doilea ecran

Fereastra care apare este utilizată pentru a trimite mesaje către dispozitiv. În câmpul 1, selectați dispozitivul expeditor - deoarece avem un singur dispozitiv, îl selectăm (acesta este un câmp obligatoriu și nu contează că este același dispozitiv căruia îi trimitem un mesaj) În câmpul 2 acordăm octeți trimite (cu roșu valoarea pe care am introdus-o în 2 va fi reprezentată ca un șir) apoi faceți clic pe butonul Trimiteți.

După trimiterea mesajului, notificatorul nostru ar trebui să reacționeze afișând efectele de iluminare corespunzătoare și redând mp3-ul selectat. Vă încurajez să încercați efecte diferite oferind primii doi octeți ai unui număr între 0 și 22 (a se vedea descrierea în funcția setMode).

Pasul 8: Trimiterea mesajelor utilizând adresele URL

Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL
Trimiterea mesajelor utilizând adresele URL

Dacă dorim să afișăm notificări dintr-o aplicație externă, de exemplu cu IFTTT, trebuie să avem o adresă URL care să facă exact același lucru ca și în fereastra din pasul anterior. remoteme.org oferă REST APi. Mergeți la el făcând clic pe fila swagger din stânga (ultima). Va fi afișată o pagină, pe această pagină putem încerca și adresele noastre URL.

La primul ecran Aveți funcția pe care trebuie să o extindeți, apoi completați datele ca la al doilea ecran.

completați datele ca în captura de ecran de mai sus. După ce faceți clic pe executare, vom trimite un mesaj

070F010501

Receptorul este dispozitivul cu 205 id, același dispozitiv este, de asemenea, un expeditor. MessageId cu setările „No_RENEVAL” este irelevant. Și apoi faceți clic pe Executare. Notificatorul va reacționa în același mod ca atunci când trimiteți mesaje din aplicație. După ce ați apelat RESTul de mai jos este adresa URL care a fost numită - uitați-vă la al treilea ecran. Și copierea și lipirea în URL-ul browserului a fost marcată cu margine verde. La al patrulea ecran browserul meu crom după URL a fost lipit

În cazul meu, adresa URL este:

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

Pasul 9: adresă URL animă pentru trimiterea mesajului

Adresă URL animă pentru trimiterea mesajului
Adresă URL animă pentru trimiterea mesajului

La pasul anterior Aveți o adresă URL care trimite date către dispozitivul dvs. Din păcate, după deconectarea de la app.remoteme.org, acesta nu mai funcționează. Acest lucru se datorează faptului că nu am furnizat jetonul de autentificare și nu mai suntem conectați. Să luăm jetonul nostru (sau să creăm unul nou) și să-l lipim în adresa URL în loc de stea.

Uită-te la ecran și înlocuiește * în URL cu simbolul tău

în cazul meu simbolul este:

~ 267_ZxoWtJ) 0ph & 2c

deci adresa URL finală arată:

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

Acum îl putem apela chiar dacă nu suntem conectați. Și când este apelat, un mesaj va fi trimis pe dispozitivul nostru 205

Pasul 10: Integrare cu IFTTT 1/7

Integrare cu IFTTT 1/7
Integrare cu IFTTT 1/7

Adresa URL creată în pasul de mai sus este potrivită pentru executarea de către aplicații externe. Cum să îl folosesc, îl voi arăta pe IFTTT. Îl voi configura astfel încât notificatorul să pornească atunci când un e-mail ajunge la adresa de e-mail (contul Gmail).

Conectați-vă la IFTTT. Apoi accesați fila Appletele mele și apoi „New Applet” - primul ecran

Pasul 11: Integrare cu IFTTT 2/7

Integrare cu IFTTT 2/7
Integrare cu IFTTT 2/7

Apoi faceți clic pe „+ acest lucru”

Pasul 12: Integrare cu IFTTT 3/7

Integrare cu IFTTT 3/7
Integrare cu IFTTT 3/7

Apoi în câmpul „Servicii de căutare” scrieți „Gmail”

Apoi „e-mail nou în căsuța de e-mail” (ar putea fi necesară o anumită configurație).

Pasul 13: Integrare cu IFTTT 4/7

Integrare cu IFTTT 4/7
Integrare cu IFTTT 4/7

acum facem clic pe „+ că”

Pasul 14: Integrare cu IFTTT 5/7

Integrare cu IFTTT 5/7
Integrare cu IFTTT 5/7

găsiți „Webhooks” și faceți clic pe el

Pasul 15: Integrare cu IFTTT 6/7

Integrare cu IFTTT 6/7
Integrare cu IFTTT 6/7

apoi „Faceți o solicitare web”

Pasul 16: Integrare cu IFTTT 7/7

Integrare cu IFTTT 7/7
Integrare cu IFTTT 7/7

completăm adresa URL a adresei URL cu simbolul. Tastați conținutul în aplicație / json și faceți clic pe „creați acțiune” și Finalizați. Acum avem applet-ul nostru:

Pasul 17: Rezumat

În acest tutorial, am arătat cum să trimitem mesaje Arduino de la sisteme externe. De asemenea, integrăm un alt sistem, apoi IFTTT, într-un mod similar. Nu trebuie neapărat să fie un „notificator” pe care am vrut să-l arăt în acest exemplu cum să trimit mesaje din sisteme externe către Arduino.

sourcecodesFanPage la Facebook

Noroc, Maciek

Recomandat: