Chaque fois que nous recevons un nouveau client, Mario Bros gagne une pièce

Comme toute startup, nous sommes enthousiasmés chaque fois que nos statistiques augmentent de manière positive, et parfois nous pouvons même être encore plus excités si nous gagnons une pièce de Mario à chaque fois que nous recevons un nouveau client... Vous vous demanderez probablement comment, n'est-ce pas ?

En tant que plateforme de surveillance puissante , nous avons immédiatement décidé d'utiliser Ubidots pour commencer à surveiller les métriques dans nos propres dashboards , mais ce que nous voulions vraiment, c'était créer un système capable d'avertir tous les membres de notre équipe chaque fois que nous recevions un nouveau client pour que nous soyons enthousiasmés. et faire la fête.

Une des premières questions était : comment motiver toute notre équipe au quotidien en étant averti lorsque nous recevons un nouveau client ? C'était une question facile à répondre, nous avons fini par acheter des sirènes de police. Mais en réalité, la partie la plus difficile du projet était de trouver comment intégrer des sirènes de police communes bon marché aux Ubidots . Une caractéristique positive des membres de l’équipe Ubidots est que nous sommes tous des hackers à plein temps, nous pouvons donc facilement faire preuve de créativité en la matière.

Pour intégrer les sirènes, nous avons décidé d'acheter deux cartes de développement personnalisées ESP8266 qui nous permettraient de gérer un relais afin de contrôler l'état de la lumière de chaque sirène. De plus, nous voulions avertir l'équipe mais le son d'une sirène de police pouvait être assez gênant, nous avons donc décidé de reproduire les sons de Mario Bros pour le rendre plus excitant et moins intrusif.

Au final le résultat que nous avons obtenu était le suivant :

L'objectif principal de cet article est de partager tous les détails techniques du projet avec notre communauté Ubidots , afin que vous puissiez le répliquer pour rester informé en temps réel de tout ce qui pourrait être mesuré. (Si vous démarrez une chaîne YouTube, cela peut être un projet qui vous convient ;) )

Commençons à pirater !

Étape par étape

  1. Aperçu du projet
  2. Configuration Ubidots
  3. Programmation
  4. Câblage
  5. Résumé

Exigences

1. Aperçu du projet

Comme nous l'avons mentionné précédemment, nous avons décidé d'acheter deux sirènes de police pour être avertis à chaque fois que nous recevons un nouveau client ou en cas de désabonnement, en différenciant les sirènes par leurs couleurs. Si la sirène verte s'allume, cela signifie que nous avons un nouveau client. Si la sirène rouge s'allume, c'est que nous avons perdu un client.

Pour pouvoir contrôler les sirènes en fonction du statut des clients, nous avons intégré Ubidots dans un Ubidots en utilisant une UbiFunction , une fonctionnalité qui vous permet de créer votre propre API et d'accéder aux données, API et outils via HTTPS. Ce guide n'expliquera pas comment gérer l' UbiFunction . Si vous souhaitez obtenir plus de détails, consultez ce guide .

Les métriques des clients étant déjà intégrées dans un compte Ubidots , nous avons procédé à quelques paramétrages sur la plateforme pour mettre en place certaines variables. Ensuite, il a fallu établir un abonnement aux variables via MQTT pour déclencher le relais respectif, la sirène verte ou la sirène rouge, et c'est ici que la magie opère. - Mario gagne une pièce, ou perd une vie... Il faut être réaliste !

2. Configuration Ubidots

Les variables chargées de signaler le statut des clients vont être automatiquement créées après la configuration de l' UbiFunction . Juste à des fins de test, nous allons créer un nouveau périphérique avec les variables que vous souhaitez gérer.

Si vous souhaitez gérer les données de votre chaîne YouTube , Twitter , Instagram , ou essentiellement, garder un œil sur n'importe quelle métrique au travail, il vous suffit de vous référer à leur documentation API pour les consommer à l'aide de l' UbiFunction . À ce stade, vous pourrez obtenir les métriques afin de les publier directement sur votre Ubidots .

Sans rien d'autre à dire, entrons dans les détails sur la façon de configurer un événement Ubidots afin d'éviter les résultats faussement positifs. Nous ne voulons vraiment pas que notre équipe fasse la fête en vain.

1) Allez dans la section Appareil Ubidots et créez un nouvel appareil appelé « client ». Pour créer un nouvel appareil, cliquez sur le signe plus bleu situé en haut à droite de l'écran. Ensuite, sélectionnez les appareils « Vierges » et attribuez le nom défini.

2) Entrez dans l'appareil précédemment créé et incluez 2 nouvelles variables brutes . Pour créer les variables, allez dans la section appareil, cliquez sur « Ajouter une variable > Brut » et attribuez un nom à la variable à créer. Pour ce projet, nous avons nommé les variables avec :

  • churn : variable chargée de recevoir un flag positif (1) à chaque fois qu'un client se désabonne
  • new-client : variable chargée de recevoir un flag positif (1) à chaque fois que nous recevons un nouveau client.

Les variables recevant déjà des données, il est temps d'appliquer quelques astuces pour éviter les faux positifs au cas où nos appareils perdraient leur connexion.

3) Les modules installés fonctionnent sous MQTT comme protocole de communication. Si vous ne le connaissez pas, nous vous recommandons fortement de jeter un œil à la documentation officielle .

Ce protocole possède une caractéristique particulière qui est appelée « Message Retenu ». Fondamentalement, cela permet au courtier de conserver le dernier message d'un sujet spécifique en définissant l'indicateur de message conservé. Ainsi, chaque fois qu'un appareil établit un abonnement avec le sujet, le courtier renvoie automatiquement le dernier message conservé.

Sur cette base, nous avons décidé de mettre en place un événement Ubidots pour définir les variables " churn " et " new-client " à 0 juste après la réception du flag positif (1). Ce que nous cherchons à faire, c'est d'éviter un faux positif au cas où les sirènes perdraient la connexion Internet.

Imaginez si la sirène verte était activée et que tout d'un coup le module WiFi perdait sa connexion. Que pourrait-il se passer ?... Une fois que le module WiFi aura rétabli sa connexion, la sirène rétablira également l'abonnement avec la variable "nouveau-client", et si la dernière valeur était le drapeau positif - 1, elle s'allumerait automatiquement la sirène à nouveau lorsque la notification pour ce client était ancienne.

Pour configurer un Ubidots allez dans l'onglet « Données > Événements » de votre Ubidots . Ensuite, créez un nouvel événement en sélectionnant « + Ajouter un événement ». Dans la configuration de la configuration de l'événement, sélectionnez l' appareil et la variable avec lesquels vous souhaitez configurer les conditions de votre événement, dans notre cas l'appareil est « customer » et les variables sont « churn » et « new-client ».

NOTE : Cet événement doit être créé indépendamment pour les deux variables.

La variable étant déjà sélectionnée, assurez-vous que le déclencheur de l'événement a la configuration suivante :

  • " nouveau-client " (variable) - La valeur -> est égale à - 1 pendant 0 minute.

Pour procéder à la configuration de l'action, appuyez sur la flèche droite située en bas à droite de la page. Sélectionnez " Définir la variable " comme action, choisissez la même variable liée au déclencheur et attribuez " 0 " comme valeur.

Pour terminer, enregistrez les modifications en appuyant sur les flèches droites.

Une fois l'événement créé avec succès, répétez le même processus pour créer un deuxième événement pour la variable manquante.

Après avoir configuré les événements, le comportement attendu est qu'à chaque fois que la variable reçoit l'indicateur positif, une valeur égale à 1 passera automatiquement à 0. Pour une meilleure compréhension, reportez-vous à l'image ci-dessous :

4. Comme vous l'avez probablement déjà remarqué, les variables qui signalent les " nouveaux clients " et les " churns " mettent simplement à jour un indicateur positif à chaque fois Ubidots met à jour l'une des variables, nous voulons également connaître le total de nouveaux clients ou barattes que nous avons. Pour cela, nous devons configurer une variable synthétique qui additionnera le total des indicateurs reçus dans la variable pendant une période de temps définie.

Pour créer la variable Synthétique, sélectionnez "+Ajouter une variable > Synthétique " à l'intérieur de l'appareil " client ". Ensuite, appliquez la formule suivante :

sum(x, data_range) : renvoie la somme des dots dans la data_range spécifiée.

Où:

  • X : est la variable souhaitée
  • Data_range : la période de temps souhaitée pour renvoyer la somme.

La formule finale pour chaque variable doit être :

  • sum("nouveau-client", "1M")
  • somme("désabonnement", "1M")

Pour terminer la création de la variable, sélectionnez « accepter » et attribuez le nom de votre choix.

À ce stade, vous pourrez voir le total des nouveaux clients ou des désabonnements survenus au cours d’un mois.

5. Maintenant que votre Ubidots est déjà configuré, il est temps de faire preuve de créativité et de créer un dashboard pour afficher toutes vos données en un seul endroit. Consultez ce guide pour connaître tous les détails sur les différents widgets que vous pouvez configurer sur votre Ubidots .

3. Programmation

3.1. Contrôle des sirènes

Le module chargé de gérer le contrôle de l'état des sirènes est le relais ESP8266 + 1 Canal. Le code de base des deux sirènes sera le même, le seul changement que vous remarquerez concerne l'étiquette de la variable. Vous devez attribuer l'étiquette de variable respective avec laquelle vous souhaitez que le module ESP8266 établisse la connexion pour activer la sirène droite.

1. Pour pouvoir travailler avec la ESP8266 dans l'IDE Arduino, vous devrez installer la plateforme ESP8266 à l'aide du gestionnaire de carte Arduino préconfiguré. Si vous n'êtes pas familier avec l'ajout d'une carte avec l'IDE Arduino, reportez-vous à cet article pour obtenir des conseils supplémentaires .

2. Une fois la plateforme ESP8266 installée, sélectionnez l'appareil ESP8266 avec lequel vous travaillez. Dans le cas, nous travaillons avec un « Module générique ESP8266 ». Pour sélectionner votre carte dans l'IDE Arduino, sélectionnez Outils > Carte « Module générique ESP8266 » .

3. Téléchargez et installez la Ubidots MQTTESP8266 . Pour une explication détaillée de la façon d'installer des bibliothèques à l'aide de l'IDE Arduino, reportez-vous à ce guide .

4. Désormais, avec les exemples de codes suivants, vous pourrez vous abonner aux variables qui rapportent les valeurs.

Une fois que vous avez inséré le code, vous devrez attribuer votre TOKEN Ubidots unique , votre SSID (nom WiFi) et votre mot de passe du réseau disponible. Si vos variables et votre appareil gèrent une étiquette différente de celles utilisées dans ce guide, assurez-vous d'attribuer les bonnes.

  • Exemple de code pour la sirène rouge :
/****************************************** * Inclure les bibliothèques ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Définir les constantes ************* ***************************/ #define TOKEN "***" // Votre TOKEN Ubidots #define WIFINAME "***" / /Votre SSID #define WIFIPASS "***" // Votre Wifi Pass #define DEVICE_LABEL "customers" // Mettez ici le label de votre appareil Ubidots #define VARIABLE_LABEL "churn" // Mettez ici le label de votre variable Ubidots Ubidots client(TOKEN); octet relayOn[] = {0xA0, 0x01, 0x01, 0xA2} ; //0xA00101A2 octet relayOff[] = {0xA0, 0x01, 0x00, 0xA1} ; //0xA00100A1 /****************************************** * Fonctions auxiliaires *** *************************************/ rappel nul (sujet char*, charge utile octet*, non signé int length) { if ((char)payload[0]=='1') // Relais sur { Serial.write(relayOn, sizeof(relayOn)); retard (10000); Serial.write(relayOff, sizeof(relayOff)); } } /**************************************** * Fonctions principales **** ***********************************/ void setup() { // mettez votre code de configuration ici, à exécuter une fois : client. ubidots SetBroker(" ubidots .com"); // Définit correctement le courtier pour le compte professionnel client.setDebug(false); // Passe une valeur booléenne true ou false pour activer les messages de débogage client.wifiConnection(WIFINAME, WIFIPASS); client.begin(rappel); client. ubidots Abonnez-vous (DEVICE_LABEL, VARIABLE_LABEL); //Insérer la source de données et les étiquettes de variable Serial.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); client. ubidots Abonnez-vous (DEVICE_LABEL, VARIABLE_LABEL); //Insérer la source de données et les étiquettes de variable } client.loop(); }
  • Exemple de code pour la sirène verte :
/****************************************** * Inclure les bibliothèques ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Définir les constantes ************* ***************************/ #define TOKEN "***" // Votre TOKEN Ubidots #define WIFINAME "***" / /Votre SSID #define WIFIPASS "***" // Votre Wifi Pass #define DEVICE_LABEL "clients" // Mettez ici le label de votre appareil Ubidots #define VARIABLE_LABEL "new-customer" // Mettez ici le label de votre variable Ubidots Client Ubidots (TOKEN); octet relayOn[] = {0xA0, 0x01, 0x01, 0xA2} ; //0xA00101A2 octet relayOff[] = {0xA0, 0x01, 0x00, 0xA1} ; //0xA00100A1 /****************************************** * Fonctions auxiliaires *** *************************************/ rappel nul (sujet char*, charge utile octet*, non signé int length) { if ((char)payload[0]=='1') // Relais sur { Serial.write(relayOn, sizeof(relayOn)); retard (10000); Serial.write(relayOff, sizeof(relayOff)); } } /**************************************** * Fonctions principales **** ***********************************/ void setup() { // mettez votre code de configuration ici, à exécuter une fois : client. ubidots SetBroker(" ubidots .com"); // Définit correctement le courtier pour le compte professionnel client.setDebug(false); // Passe une valeur booléenne true ou false pour activer les messages de débogage client.wifiConnection(WIFINAME, WIFIPASS); client.begin(rappel); client. ubidots Abonnez-vous (DEVICE_LABEL, VARIABLE_LABEL); //Insérer la source de données et les étiquettes de variable Serial.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); client. ubidots Abonnez-vous (DEVICE_LABEL, VARIABLE_LABEL); //Insérer la source de données et les étiquettes de variable } client.loop(); }

5. Vérifiez votre code dans l'IDE Arduino. Pour ce faire, dans le coin supérieur gauche de notre IDE Arduino, vous verrez l'icône « Coche » ; sélectionnez-le pour vérifier votre code.

6. Téléchargez le code dans votre «Module générique ESP8266» . Pour ce faire, choisissez l'icône " flèche droite" à côté de l'icône "coche".

7. Pour vérifier la connectivité de l'appareil et les données envoyées, ouvrez le moniteur série en sélectionnant l'icône « loupe » dans le coin supérieur droit de l'IDE Arduino pour voir les logs .

3.2. Contrôle des sons

Le module chargé de gérer le contrôle MP3 est le WEMOS D1. En gros, le code établit l'abonnement avec les mêmes variables configurées avec chaque sirène mais cela reproduirait également les sons de Mario Bros. Souviens-toi:

  • Si la sirène verte s'allume, le haut-parleur reproduira le son de Mario Bros gagnant une pièce - Ubidots obtient un nouveau client.
  • Si la sirène rouge s'allume, le haut-parleur reproduira le son de Mario Bros perdant une vie - Ubidots perd un nouveau client.

1. Une fois la plateforme ESP8266 installée, sélectionnez l'appareil ESP8266 avec lequel vous travaillez. Dans ce cas, nous travaillons avec un « WeMos D1 ». Pour sélectionner votre carte dans l'IDE Arduino, sélectionnez Outils > Carte « WeMos D1 » .

2. Si vous ne l'avez pas fait à l'étape précédente, téléchargez et installez la Ubidots MQTTESP8266 . Pour une explication détaillée de la façon d'installer des bibliothèques à l'aide de l'IDE Arduino, reportez-vous à ce guide .

3. Placez le code suivant dans votre IDE Arduino. Une fois que vous avez collé le code, assurez-vous d'attribuer votre TOKEN Ubidots unique , votre SSID (nom WiFi) et votre mot de passe du réseau disponible.

/****************************************** * Inclure les bibliothèques ****** **********************************/ #include " Ubidots ESPMQTT.h" /****** ********************************** * Définir les constantes ************* ***************************/ #define TOKEN "***" // Votre TOKEN Ubidots #define WIFINAME "***" / /Votre SSID #define WIFIPASS "***" // Votre Wifi Pass #define DEVICE_LABEL "clients" // Mettez ici le label de votre appareil Ubidots #define RED_SIREN "churn" // Mettez ici le label de votre variable Ubidots #define GREEN_SIREN "new-customer" // Mettez ici votre étiquette de variable Ubidots #define RESET D5 #define NEXT D6 #define PLAY D7 Client Ubidots (TOKEN); /****************************************** * Fonctions auxiliaires ****** **********************************/ void activate(int pin) { digitalWrite(pin, LOW); retard (500); digitalWrite (broche, HIGH); } void callback (sujet char*, charge utile octet*, longueur int non signée) { char val = charge utile[0]; //Serial.println(sujet); if (strstr(sujet,"nouveau-client") && val == '1') { activate(RESET); activer(JOUER); retard(2000); } else if (strstr(topic,"churn") && val == '1') { activate(RESET); activer(SUIVANT); retard(2000); } } /**************************************** * Fonctions principales **** ***********************************/ void setup() { pinMode(RESET, OUTPUT); pinMode (SUIVANT, SORTIE); pinMode(LECTURE, SORTIE); digitalWrite (RESET, HAUT); digitalWrite (SUIVANT, ÉLEVÉ); digitalWrite(JOUER, ÉLEVÉ); // mettez votre code d'installation ici, à exécuter une fois : client. ubidots SetBroker(" ubidots .com"); // Définit correctement le courtier pour le compte professionnel client.setDebug(false); // Passe une valeur booléenne true ou false pour activer les messages de débogage client.wifiConnection(WIFINAME, WIFIPASS); client.begin(rappel); client. ubidots Abonnez-vous (DEVICE_LABEL, GREEN_SIREN); //Insérez le client dataSource et Variable's Labels. ubidots Abonnez-vous (DEVICE_LABEL, RED_SIREN); Série.begin(9600); } void loop() { if(!client.connected()) { client.reconnect(); client. ubidots Abonnez-vous (DEVICE_LABEL, GREEN_SIREN); //Insérez le client dataSource et Variable's Labels. ubidots Abonnez-vous (DEVICE_LABEL, RED_SIREN); } client.loop(); }

4. Vérifiez votre code dans l'IDE Arduino. Pour ce faire, dans le coin supérieur gauche de notre IDE Arduino, vous verrez l'icône « Coche » ; sélectionnez-le pour vérifier votre code.

5. Téléchargez le code dans votre « WeMos D1 » . Pour ce faire, choisissez l'icône " flèche droite" à côté de l'icône "coche".

6. Si vous n'êtes pas familier avec le module MP3, nous vous recommandons fortement de consulter ce guide , l'un des meilleurs pour commencer.

Sur la base de notre expérience, assurez-vous que vous utilisez le bon format pour la SD ainsi que pour les chansons à lire.

  • Taille de la carte Micro SD : 1 ou 2 Go maximum.
  • Format Micro SD : FAT - Nous vous recommandons de formater votre carte SD à l'aide du SD Card Formatter .
  • Format des chansons : AD4 - Nous vous recommandons d'utiliser AD4Converter .

Pour vous épargner quelques minutes de travail, vous trouverez dans ce dossier les sons de Mario Bros utilisés pour le projet.

Basé sur la logique utilisée dans le code, la première chanson identifiée dans la carte Micro SD comme "0000" reproduira le son de Mario Bros lorsqu'il gagne une pièce, et la seconde identifiée comme "0001" reproduira le son de Mario Bros. sonner quand il a perdu la vie.  

4. Câblage

REMARQUE IMPORTANTE : avant d'établir toutes les connexions en conjonction, assurez-vous que les cartes ont déjà téléchargé l'exemple de code. Assurez-vous également qu’ils fonctionnent correctement avec votre Ubidots .

Pour rendre le câblage facile à comprendre, j'ai divisé ce processus en différentes étapes. Suivez le schéma et le tableau de câblage ci-dessous pour établir les connexions appropriées.

  • Contrôle du module MP3

Pour intégrer le module relais ESP8266 + 1 canal aux sirènes nous avons dû apporter quelques modifications au câblage d'origine de chaque sirène. En gros, nous avons supprimé l'interrupteur manuel de chaque sirène pour le remplacer par le module relais.

Pour pouvoir alimenter chaque module relais ESP8266 + 1 canal, nous avons utilisé un chargeur de téléphone portable pour réguler la tension d'entrée de 110V à 5V.

Veuillez vous référer au schéma ci-dessous pour avoir une référence sur la façon d'établir la modification du câblage d'origine des sirènes, ainsi que sur la façon de mettre sous tension les modules ESP8266.

  • Contrôle du module MP3

Le module MP3 a différentes configurations . Sur la base des exigences nécessaires à ce projet, nous avons décidé d'utiliser le « circuit d'application en mode MP3 ».

Reportez-vous au tableau de câblage et au schéma ci-dessous pour établir les configurations appropriées :

  • Tout le système

Pour finir, alimentez la carte WEMOS avec la sortie 5V du régulateur utilisé :

Une fois les connexions filaires appropriées déjà établies, placez tous les composants à l’intérieur des sirènes et procédez à l’installation des sirènes. Dans notre cas, nous avons décidé de les placer sur le mur principal de notre bureau.

5. Résumé

Nous avons vraiment apprécié le temps de hack pour reconstruire la fonctionnalité des sirènes de police pour informer toute l'équipe de l'état des clients en temps réel, mais de manière amusante en utilisant les sons de Mario Bros.

Nous savons qu'il s'agit d'un projet interne qui ne pourrait pas être aussi utile à tout le monde, mais nous le trouvons pertinent pour tous ceux qui démarrent leurs chaînes YouTube, leurs logs ou même dans une entreprise et souhaitent suivre les métriques de manière conviviale et en temps réel chaque fois que vous recevez un nouvel abonné, un visiteur ou un client.

Si vous êtes un maker passionné comme nous et que vous décidez de reproduire ce projet, n'hésitez pas à le partager, mais n'oubliez pas de nous identifier à @ubidots ubidots nos réseaux sociaux ( facebook , linkedin , twitter , instagram ). Ce sera un plaisir pour nous de le partager avec Ubidots .


Projets IoT plus utiles :