Table des matières:

Notificateur : 17 étapes
Notificateur : 17 étapes

Vidéo: Notificateur : 17 étapes

Vidéo: Notificateur : 17 étapes
Vidéo: Simulation en SystemC : la notification retardée (17) 2024, Novembre
Anonim
Notificateur
Notificateur

L'appareil peut être connecté par exemple au système IFTTT et réagir lorsqu'un nouveau mail apparaît. Sur app.remoteme.org, nous générerons un lien après avoir appelé quels octets seront envoyés à Arduino, et Arduino affichera un effet de lumière et jouera du mp3 à partir de la carte SD

Étape 1: ce qui est nécessaire

Ce qui est necessaire
Ce qui est necessaire
Ce qui est necessaire
Ce qui est necessaire
  • NodeMCU, WemOS ou quelque chose de similaire
  • Deux anneaux LED avec diodes WS2812B (j'ai utilisé des anneaux LED 16ème)
  • DFRobotDFPlayerMini - c'est un lecteur mp3. Il lit les mp3 à partir de la carte SD et communique avec Arduino par RX/TX
  • Conférencier
  • Carte SD
  • Convertisseur logique -J'ai utilisé celui-ci, le lecteur mp3 utilise 5V et Arduino 3.3 c'est pourquoi nous avons besoin de ce convertisseur
  • Connaissances et compétences pour fabriquer des PCB simples par nous-mêmes

La tour:

  • carton – deux épaisseurs différentes
  • Papier-calque
  • feuille d'aluminium

Étape 2: Construction de la tour

Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour
Bâtiment de la tour

Ci-dessus le plan de la tour en vue de côté (mon aventure avec le dessin technique s'est terminée à l'école primaire), toutes dimensions en millimètres.

Principe d'opération

  1. anneau de LED éclairant
  2. Papier-calque
  3. Le cône tronqué, en carton et recouvert d'une feuille d'aluminium, il réfléchit donc les lumières des anneaux led, sur la figure 3' = le maillage découpé
  4. tube en carton - maintient les tours verticalement, à l'intérieur du tube se trouvent des câbles pour leds
  5. La hauteur dépend de vous j'ai 85mm
  6. Le support à l'intérieur de toutes les pièces électroniques

Tous les éléments horizontaux doivent être en carton plus épais.

Étape 3: Schéma de câblage

Schéma de câblage
Schéma de câblage
Schéma de câblage
Schéma de câblage
Schéma de câblage
Schéma de câblage
Schéma de câblage
Schéma de câblage

Le lecteur mp3 est alimenté en tension 5V et communique avec Arduino via TX/RX, un convertisseur logique est nécessaire car l'Arduino lui-même fonctionne sur une tension de 3,3V. Le contrôle des anneaux est également connecté à Arduino (D5, D6) via le convertisseur logique.

Au dépôt, vous trouverez des fichiers eagle avec des plans PCB

Je suggère de ne pas souder en permanence Arduino et le lecteur mp3 uniquement pour utiliser des broches d'or femelles

Étape 4: Principe de fonctionnement

Notre Arduino se connecte au système app.remoteme.org à l'aide de WebSockets (il existe des bibliothèques prêtes) via cette connexion, des messages de 5 octets sont envoyés:

  • le premier octet de l'effet lumineux pour l'anneau LED supérieur
  • effet lumineux de deuxième octet pour l'anneau LED inférieur
  • le numéro du fichier mp3 à lire
  • le nombre de secondes pendant lesquelles l'effet de lumière et le mp3 seront joués
  • si le mp3 doit être lu une fois ou en boucle

code source

Code source complet Vous pouvez trouver ici

dans les fichiers SingleRing.cpp et SingleRing.h, il existe une classe pour contrôler les effets des anneaux LED. Je vous suggère de commencer par regarder la fonction 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;//casse verte standard solide 2:setConfiguration (6, 0, 0, 50, 0, 20); break;//cas bleu standard solide 3:setConfiguration (6, 50, 0, 0, 0, 20); break;//casse rouge standard solide 4: setConfiguration (6, 50, 10, 0, 0, 20); break;//cas orange standard solide 5:setConfiguration(1, 0, 100, 0, 5, 2); break;//police dans le sens des aiguilles d'une montre vert case 6:setConfiguration(1, 0, 100, 0, 5, -2); break;// la police revient au vert case 7:setConfiguration(1, 0, 0, 100, 5, 2); break;//police dans le sens des aiguilles d'une montre bleu case 8:setConfiguration(1, 0, 0, 100, 5, -2); break;// police revert blue case 9:setConfiguration(1, 100, 0, 0, 5, 2); break;//police standard rouge case 10:setConfiguration(1, 100, 0, 0, 5, -2); break;// police revert case rouge 11:setConfiguration(1, 100, 20, 0, 5, 2); break;//police standard orange case 12:setConfiguration(1, 100, 20, 0, 5, -2); break;// police revert case orange 13:setConfiguration(2, 0, 0, 50, 8, 10); break;//cross standard bleu case 14:setConfiguration(2, 0, 0, 50, 8, -10); break;// cross revert case bleue 15:setConfiguration(5, 0, 50, 0, 0, 20); break;//clignotement vert standard case 16:setConfiguration(5, 0, 50, 0, 0, -20); pause;// clignotement odwyrtka vert case 17:setConfiguration(5, 0, 0, 50, 0, 20); break;//clignote cas bleu standard 18:setConfiguration(5, 0, 0, 50, 0, -20); pause;// clignotement inverser le bleu case 19:setConfiguration(5, 50, 0, 0, 0, 20); break;//clignotement cas rouge standard 20:setConfiguration(5, 50, 0, 0, 0, -20); pause;// clignotement inverse cas rouge 21:setConfiguration(5, 50, 10, 0, 0, 20); break;//clignotement orange standard case 22:setConfiguration(5, 50, 10, 0, 0, -20); pause;// clignotement revenir en orange par défaut: setConfiguration(0, 0, 50, 0, 5, 1); pause;//off =0 } }

selon le paramètre donné, la bague affichera l'effet. Vous pouvez ajouter votre propre effet en appelant la fonction setConfiguration avec de nouveaux paramètres (changement de couleur, vitesse d'affichage) en ajoutant un nouveau mode, ou en ajoutant un tout nouvel effet - ou faites le moi savoir dans les commentaires si je l'aime j'ajouterai un nouvel effet

arduino.ino:

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

#comprendre

#include #include #include "SingleRing.h"

#comprendre

#include #include

#comprendre

#define WIFI_NAME ""

#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "sirène" #define TOKEN ""

#define DIODES_COUNT 16

SingleRing haut = SingleRing(DIODES_COUNT, D5);

SingleRing bas = SingleRing(DIODES_COUNT, D6);

SoftwareSerial mySoftwareSerial(D4, D3); // Réception, Émission

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

ESP8266WiFiMulti WiFiMulti;

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

if (!myDFPlayer.begin(mySoftwareSerial)) { //Utilisez softwareSerial pour communiquer avec mp3.

Serial.println(F("Impossible de commencer:")); Serial.println(F("1. Veuillez revérifier la connexion !")); Serial.println(F("2. Veuillez insérer la carte SD !")); tandis que (vrai); } Serial.println(F("DFPlayer Mini en ligne."));

myDFPlayer.setTimeOut(500); //Définir le délai de communication série 500ms

myDFPlayer.volume(30);

monDFPPlayer. 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(DEVICE_NAME);

top.setup();

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

booléen désactivé = vrai;

turnOffMillis long non signé = 0;

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); } désactivé = faux; turnOffMillis = millis() + 1000 * heure; }

boucle vide()

{ remoteMe.loop(); top.loop(); bottom.loop(); si (désactiverMillis

}

explication:

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

Nous devons fournir les données ci-dessus, des instructions détaillées ici sur le lien. J'ai également montré comment s'inscrire sur remoteme.org et générer le jeton, 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); } désactivé = faux; turnOffMillis = millis() + 1000 * heure; }

Cette fonction sera appelée lorsque le message arrivera à Arduino et affichera la notification. Le code est si clair qu'il se décrit lui-même. Je renvoie le détail des classes à la documentation ici et ici

boucle vide(){ remoteMe.loop(); top.loop(); bottom.loop(); if (turnOffMillis<millis()){

si (!désactivé) {

top.clear();

bottom.clear(); monDFPlayer.stop(); désactivé = vrai; } }

Dans la boucle, on appelle les fonctions de boucle des objets, et aussi si le temps d'affichage des notifications est écoulé, on éteint les diodes et le son.

Étape 5: Lecteur MP3

Lecteur mp3
Lecteur mp3

Il communique avec Arduino via TX/RX – Détails du lecteur lui-même ici, et de la bibliothèque ici

Nous téléchargeons des fichiers mp3 sur la carte SD. Les fichiers sur la carte sont triés par ordre alphabétique puis par appel:

myDFPlayer.play(5);

Nous lisons le cinquième fichier de la carte SD à partir du répertoire racine. C'est pourquoi il est bon de donner aux fichiers sur la carte SD les préfixes 01, 02 etc. Dans mon cas, cela ressemble à l'écran d'impression ci-dessus

Pour générer des commandes vocales Vous pouvez utiliser cette page.

Étape 6: Téléchargement du programme sur Arduino

Téléchargement du programme sur Arduino
Téléchargement du programme sur Arduino
Téléchargement du programme sur Arduino
Téléchargement du programme sur Arduino

Avant de télécharger le croquis sur Arduino, vous devez télécharger les bibliothèques nécessaires ici, vous trouverez des instructions détaillées

de plus, nous devons installer la bibliothèque DFRobotDFPlayerMini et Adafruit_NeoPixel

Étape 7: Contrôle

Contrôler
Contrôler
Contrôler
Contrôler

Nous envoyons à notre Arduino cinq octets

  • le premier octet de l'effet lumineux pour l'anneau LED supérieur
  • effet lumineux de deuxième octet pour l'anneau LED inférieur
  • le numéro du fichier mp3 à lire
  • le nombre de secondes pendant lesquelles l'effet de lumière et le mp3 seront joués
  • si le mp3 doit être lu une fois ou en boucle (1 s'il doit être lu en boucle)

En envoyant des octets

07 0F 01 05 01

L'anneau supérieur montrera les lumières de la police (mode 6) en bas un clignotement vert (mode 15) (consultez la fonction setMode sur singleRing.cpp et les commentaires à côté). Le premier fichier de la carte SD sera lu pendant 5 secondes. Et le fichier sera lu en boucle (vérifiez la fonction onUserMessage sur arduino.ino)

Envoyons ces octets. Regardez l'écran ci-dessus, et cliquez sur les icônes dans l'ordre écrit par 1, 2, 3. La fenêtre apparaît

Ensuite, regardez le deuxième écran - et remplissez la fenêtre comme sur le deuxième écran

La fenêtre qui apparaît permet d'envoyer des messages à l'appareil. Dans le champ 1, sélectionnez l'appareil expéditeur - parce que nous n'avons qu'un seul appareil, nous le sélectionnons (il s'agit d'un champ obligatoire et peu importe qu'il s'agisse du même appareil auquel nous envoyons un message) Dans le champ 2, nous donnons des octets à envoyer (en rouge la valeur que nous avons saisie en 2 sera représentée sous forme de chaîne) puis cliquez sur le bouton Envoyer.

Après avoir envoyé le message, notre notifiant doit réagir en affichant les effets d'éclairage appropriés et en jouant le mp3 sélectionné. Je vous encourage à essayer différents effets en donnant les deux premiers octets d'un nombre compris entre 0 et 22 (voir description dans la fonction setMode).

Étape 8: Envoi de messages à l'aide d'URL

Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL
Envoi de messages à l'aide d'URL

Si nous voulons afficher les notifications d'une application externe, par exemple avec IFTTT, nous devons avoir une URL qui fera exactement la même chose que nous l'avons fait dans la fenêtre de l'étape précédente. remoteme.org fournit REST APi. Allez-y en cliquant sur l'onglet swagger à gauche (le dernier). Une page s'affichera, sur cette page nous pouvons également essayer nos URL.

Au premier écran Vous avez la fonction Vous devez développer, puis remplir les données comme au deuxième écran.

remplissez les données comme dans la capture d'écran ci-dessus. Après avoir cliqué sur exécuter, nous enverrons un message

070F010501

Le récepteur est l'appareil avec 205 id, le même appareil est également un expéditeur. MessageId avec les paramètres "No_RENEVAL" n'est pas pertinent. Et puis cliquez sur Execute. Notificator réagira de la même manière que lors de l'envoi de messages depuis l'application. Après avoir appelé REST, vous trouverez ci-dessous l'URL qui a été appelée - regardez le troisième écran. Et copier-coller dans l'URL du navigateur est marqué d'une bordure verte. Au quatrième écran, mon navigateur Chrome après le collage de l'URL

Dans mon cas, l'URL est:

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

Étape 9: URL quelconque pour envoyer un message

URL quelconque pour envoyer un message
URL quelconque pour envoyer un message

À l'étape précédente, vous avez une URL qui envoie des données à votre appareil. Malheureusement, après vous être déconnecté de app.remoteme.org, il cesse de fonctionner. C'est parce que nous n'avons pas fourni le jeton d'authentification et que nous ne sommes plus connectés. Récupérons notre jeton (ou créons-en un nouveau) et collons-le dans l'URL au lieu de l'étoile.

Regardez l'écran et remplacez * dans l'URL par votre jeton

dans mon cas, le jeton est:

~267_ZxoWtJ)0ph&2c

donc mon URL finale ressemble à:

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

Maintenant, nous pouvons l'appeler même si nous ne sommes pas connectés. Et quand il est appelé, un message sera envoyé à notre appareil 205

Étape 10: Intégration avec IFTTT 1/7

Intégration avec IFTTT 1/7
Intégration avec IFTTT 1/7

L'URL créée à l'étape ci-dessus convient à l'exécution par des applications externes. Comment l'utiliser, je vais montrer sur l'IFTTT. Je vais le configurer pour que le notificateur s'active lorsqu'un e-mail arrive à l'adresse e-mail (compte Gmail).

Connectez-vous à IFTTT. Ensuite, allez dans l'onglet Mes applets, puis « Nouvelle applet » - premier écran

Étape 11: Intégration avec IFTTT 2/7

Intégration avec IFTTT 2/7
Intégration avec IFTTT 2/7

Cliquez ensuite sur « + ceci »

Étape 12: Intégration avec IFTTT 3/7

Intégration avec IFTTT 3/7
Intégration avec IFTTT 3/7

Puis dans le champ « Services de recherche » écrivez « Gmail »

Puis "nouvel e-mail dans la boîte de réception" (une configuration peut être nécessaire).

Étape 13: Intégration avec IFTTT 4/7

Intégration avec IFTTT 4/7
Intégration avec IFTTT 4/7

maintenant nous cliquons sur "+ ça"

Étape 14: Intégration avec IFTTT 5/7

Intégration avec IFTTT 5/7
Intégration avec IFTTT 5/7

recherchez « Webhooks » et cliquez dessus

Étape 15: Intégration avec IFTTT 6/7

Intégration avec IFTTT 6/7
Intégration avec IFTTT 6/7

puis "Faire une demande web"

Étape 16: Intégration avec IFTTT 7/7

Intégration avec IFTTT 7/7
Intégration avec IFTTT 7/7

nous complétons l'URL de notre URL avec le jeton. Tapez le contenu sur application/json et cliquez sur « Créer une action » et sur Terminer. Nous avons maintenant notre applet:

Étape 17: Résumé

Dans ce tutoriel, j'ai montré comment envoyer à nos messages Arduino depuis des systèmes externes. Nous intégrons également un autre système puis IFTTT d'une manière similaire. Il ne doit pas nécessairement s'agir d'un "notificateur". Je voulais montrer dans cet exemple comment envoyer des messages depuis des systèmes extérieurs à notre Arduino.

codessourceFanPage sur Facebook

Salut, Maciek

Conseillé: