vendredi 13 janvier 2017

Notifications par email, SMS ou Twitter avec ESP8266 et Carriots

Il y a quelques années, je vous avais présenté Carriots, un site web auquel vous pouvez envoyer des données issues de vos capteurs, afin de pouvoir les consulter à distance, et d'être averti par email, SMS ou Twitter lorsqu'une situation particulière se produit.

À l'époque, nous avions utilisé une carte Arduino et un Shield ethernet:  notre montage devait donc être relié par câble à un routeur.

Aujourd'hui, nous reprenons l'exercice mais, cette fois, nous programmerons un ESP8266 à l'aide de l'IDE Arduino pour qu'il envoie les données à Carriots par WiFi. (Ironiquement, en plus d'être beaucoup plus pratique, un module ESP8266 coûte beaucoup moins cher que la combinaison Arduino/Shield Ethernet que nous avions utilisé à l'époque.)

Notre dispositif

Nous reprendrons le même dispositif que dans l'article initial:  un capteur analogique (dans les faits:  un simple potentiomètre) est branché à la pin "ADC" de l'ESP8266.  Une LED est branchée à la pin GPIO04.

Aussi longtemps que la tension de la pin ADC (contrôlée par le potentiomètre) demeure en-dessous d'un certain seuil (que nous choisissons), la LED demeure éteinte.  Lorsque la tension de la pin ADC dépasse le seuil, la LED s'allume.  Chaque fois que la LED change d'état, nous envoyons un message à Carriots, qui se charge de nous envoyer un email (ou si vous préférez:  un tweet ou un sms) pour nous alerter.

Bien entendu, le potentiomètre peut être remplacé par n'importe quel autre capteur analogique (une photorésistance, par exemple).  Le notification peut aussi être déclenchée par une entrée numérique (au moyen d'un interrupteur, par exemple), il s'agira de modifier quelques lignes de code.  Si une seule entrée analogique ne vous suffit pas, vous pouvez vous référer à l'article "8 capteurs analogiques sur un même ESP8266".

À partir de là, les applications ne sont limitées que par votre imagination:  une boîte à lettre qui vous envoie un email pour vous aviser du passage du facteur, un système d'alarme qui vous avise par SMS qu'un mouvement a été détecté à l'intérieur de votre domicile, etc.

Le circuit

Puisque j'utilise un signal analogique. il me faut une version de l'ESP8266 qui comporte une entrée ADC, comme par exemple l'ESP-12.  Si vous ne disposez que du modeste ESP-01, qui ne comporte pas d'accès à l'entrée analogique, vous devrez modifier un peu le sketch pour que l'action soit accomplie lors d'un changement d'état d'une entrée numérique.


Le module est branché à un ordinateur par l'entremise d'un convertisseur USB-UART fonctionnant en 3,3 V, mais la forte consommation de l'ESP8266 nous oblige à l'alimenter avec une source externe plutôt qu'à la sortie 3,3 V du convertisseur USB-UART,

La pin GPIO0 doit être reliée au GND pour que le module puisse être programmé, mais il est préférable de la relier à 3,3 V pendant le fonctionnement du sketch.  Un reset est généralement nécessaire avant de téléverser le sketch (on fait un reset en branchant temporairement la pin RST à GND).

Une fois passée la phase de programmation et de débogage, le convertisseur USB-UART peut évidemment être retiré du circuit.

Un aspect agaçant de l'entrée analogique "ADC/TOUT" de l'ESP8266, c'est qu'elle accepte un signal analogique variant entre 0 et 1 V.   Je dois donc ajouter une résistance en série avec mon potentiomètre pour que la valeur maximale de l'entrée analogique soit de 1 V et non de 3,3 V. Pour un potentiomètre de 10 kΩ, une résistance de 23 kΩ fait l'affaire.  La valeur de résistance appropriée devra évidemment être calculée en fonction du capteur que vous utilisez:  assurez-vous que la tension transmise à la pin ADC/TOUT ne dépasse jamais 1 V.

La LED, associée à une résistance de protection, est branchée à la pin GPIO04.

Inscription à Carriots

À moins que ce ne soit déjà fait, le temps est venu d'ouvrir un compte gratuit chez Carriots,  Lorsque c'est fait, deux informations sont nécessaires pour qu'on puisse ensuite les intégrer à notre sketch: votre apikey, ainsi que le numéro d'identification de votre appareil.

Pour connaître votre apikey, vous cliquez sur "SETTINGS" dans le menu de gauche, puis sur "Apikeys".


Votre apikey est une interminable chaîne de caractères.  "Automatic apikey default" fait parfaitement l'affaire.  Un bouton bleu vous permet de la copier.


Vous devez également connaître le nom de votre appareil ("device").  Pour ce faire, accédez à la section "Devices"...


Vous pouvez créer un nouvel appareil, ou utiliser l'appareil par défaut qui a été automatiquement créé lors de votre inscription.  Ce qu'il vous faut, c'est le "id.Developer", qui est de la forme "nomDelappareil@votreNomDUtilisateur".



Le sketch

Je suppose ici que votre IDE Arduino a déjà été configuré pour permettre la programmation de l'ESP8266.  Si ce n'est pas le cas, je vous réfère à cette marche à suivre.

Avant de télécharger le sketch dans votre ESP8266, vous devez impérativement le modifier pour que 4 constantes comportent la bonne valeur:

ssid:  (acronyme de "service set identifier") le nom du réseau sans fil auquel l'ESP8266 se branchera.
password:  le mot de passe qui permettra à l'ESP8266 de se brancher au réseau sans fil
APIKEY:  l'apikey qui vous a été assignée par Carriots
DEVICE:  le nom de votre appareil sur le site de Carriots


Exécution du sketch

Pour vérifier que tout fonctionne normalement, il est préférable d'afficher le moniteur série (attention: vitesse de 115200 bauds).

Si le sketch ne s'exécute pas automatiquement, reliez la pin GPIO 0 à 3,3 V, puis faites un reset (branchez temporairement la pin reset à GND, puis branchez-la à nouveau à 3,3 V).

Si la connexion à votre réseau WiFi s'effectue correctement, vous devriez voir apparaître le message "Connexion au reseau en cours...", puis "Connecte au reseau:  (nom de votre réseau)".


En tournant le potentiomètre, vous devriez pouvoir allumer et éteindre la LED.  Chaque fois que la LED change d'état, vous devriez voir apparaître dans le moniteur série plusieurs lignes de données, qui commencent par "Envoi du Stream à Carriots", et qui se termine par ( "response": "OK").


Dans mon sketch, j'envoie une notification à Carriots à chaque changement d'état de la LED.  Bien entendu, je pourrais modifier mon sketch afin d'envoyer un message uniquement quand la LED s'allume, ou uniquement quand elle s'éteint.

Retournons maintenant sur le site de Carriots, et allons dans la section "Streams":
Vous devriez voir une ligne différente pour chaque message que votre ESP8266 a envoyé à Carriots:


Création d'un listener

La dernière étape, mais non la moindre, consiste à assigner un "listener" à notre appareil. C'est à dire un chien de garde qui s'occupera de nous envoyer une alerte (email, SMS ou tweet), chaque fois que notre ESP8266 enverra un message à Carriots.

Si votre intention est d'envoyer des tweets, vous devez d'abord autoriser Carriots à se connecter à votre compte Twitter.  C'est simple et rapide.



La façon la plus simple de créer un listener est d'utiliser le "Listener Wizard".


Première étape:  vous pouvez laisser les valeurs par défaut (le listener s'appliquera alors à tous vos appareils), ou sélectionner "Device" pour "Entity Type" et le nom de votre appareil pour"Id".


Deuxième étape:  vous choisissez si le listener vous enverra un email, un SMS ou un tweet.  Si vous choisissez "email", vous devez indiquer l'adresse email.  Si vous choisissez "SMS", on vous demande le numéro de téléphone.  Si vous choisissez "tweet", on vous demander le contenu du message à twitter.

Attention:  avec un compte gratuit, vous êtes limité à l'envoi de 5 SMS par jour (alors que vous pouvez envoyer 100 emails).


Dans une dernière étape, vous cliquez sur le bouton "Create Listener".  Vous devriez maintenant être avisé par la méthode choisie chaque fois que la LED change d'état.

Si ça ne fonctionne pas, vérifiez si vous trouvez des messages d'erreur dans la section "Alarms".

Yves Pelletier   (TwitterFacebook)

2 commentaires:

  1. Merci, super tuto en français, un atout majeur quant on parle pas anglais, comme moi. Je débute et bredouille péniblement avec arduino.
    Savez où je peux trouver une documentation sur Carriots, le principe, ce que l'on peut en faire? Peut-on commander un objet arduino? ...

    RépondreSupprimer
  2. Merci beaucoup pour ton tutoriel
    Est-il possible de faire cela avec un capteur d'empreinte digitale?

    RépondreSupprimer