Vos objets connectés accessibles depuis l’autre bout du monde – MQTT

Sur ce blog nous avons déjà vu comment créer un serveur web en local qui permettait de contrôler votre ESP8266 du moment que vous être sur votre serveur local (en WIFI).

Aujourd’hui nous allons voir comment le faire, mais sans limites de distance ! Le seul prérequis sera d’avoir une connexion internet du côté client (sur ton téléphone). Bien entendu il en faudra aussi une du côté serveur (sur votre box internet généralement).

Sinon, vous pourrez aussi bien être à l’autre bout du monde dans un archipel paradisiaque que sur voter canapé. Vous pourrez quand même communiquer avec vos appareils connectés !

Le protocole MQTT

 

Ce protocole permet d’interconnecter des applications du moment que celles-ci possèdent une connexion internet en passant par un ‘broker MQTT’. C’est la brique de base pour construire ce que nous allons faire aujourd’hui. Quest-ce qu’un borker MQTT ?

Il s’agit une sorte de routeur public et ouvert à tous qui a pour but de rediriger les informations qu’on lui envoie !

Un broker MQTT reçois des informations depuis un publisher. Il les met en forme et les redirige généralement vers un subscriber. Le terme de publishr/subscriber décrit d’ailleurs son mode de communication (semblable au mode client/serveur).

Les avantages du protocole MQT sont sa simplicité d’utilisation. Il est cependant très peut sécuriser. Mais rassuré vous, les informations qu’on y envoie ne sont généralement pas sensibles !

Pour notre cas le publicher sera le téléphone portable qui enverra un état haut ou bas. Comme ça le subscriber sera si il faut allumer ou éteindre une LED par exemple.

Et pour le broker MQTT ?

Et bien il a plusieurs possibilités ! la meilleure et la plus avancée seraient d’en créer un sur un raspberry par exemple ! mais ce n’est pas le sujet de cet article.

On va plutôt opter pour une solution en ligne et gratuite : Adafruit.io

C’est un service super simple qui propose d’héberger nos ‘feeds’ (gestion de requête). Il offre aussi une interface graphique plutôt sympa pour générer nos connexions.

Avant d’aller plus loin sur les brokers.  nous allons déjà voir comment mettre en place le protocole MQTT sur notre ESP01 avec arduino

 

Programmation MQTT arduino

 

Pour pouvoir utiliser MQTT et Adafruit.io il faut installer quelques petites librairies (tu commences surement à avoir l’habitude 😊).

Voici la librairie pour MQTT : https://github.com/i-n-g-o/esp-mqtt-arduino

Et celle pour MQTT et adafruit : https://github.com/adafruit/Adafruit_MQTT_Library

Rappelons tout de même comment installer ces librairies. Il faut que tu dézippes ces archives dans le dossier ‘libraire’ de l’IDE Arduino. Il se trouve généralement dans ‘Document’ si tu n’as rien changé.

Pour ce premier article sur MQTT nous verrons uniquement la partie subscriber, celle qui nous intéresse pour recevoir des directives !

 

Le code

A NOTER

Dans ce tuto j’utilise un ESP01, mais ce que j’explique s’applique aussi pour tout module ESP8266.

Comme tous les programmes arduino, il faut commencer par inclure les librairies ESP8266WiFi et PubSubClient.

Pour permettre une lecture du programme plus simple et modulable plus facilement j’ai écrit un gros bloc pour définir tous les paramètres dont nous aurons besoin.

Il faut d’abord commencer par définir tes paramètres WIFI : ssid, password

Puis le serveur et le port de notre broker MQTT : SERVER, SERVERPORT (si tu es aussi sur adafruit.io ne change rien).

Ensuite il faut préciser le nom d’utilisateur et la clé MQTT que vous pourrez retrouver dans la section suivante sur adafruit.io : MQTT_USERNAME, MQTT_KEY

Et enfin les 3 dernières sont en réalité le chemin d’accès à votre feed (nous verrons plus tard cette partie plus en détail) : USERNAME, PREAMBULE, T_COMMAND

On créer ensuite le client MQTT PubSub

Pour le début de la fonction setup() rien de nouveau ! On lance la lecture du port serial, pour débugger en cas de besoins, je définis aussi le pinMode de la LED intégrer dans l’ESP pour pouvoir tester le programme et la connexion au WIFI.

Pour finir cette fonction, il ne nous reste plus qu’à préciser sur quelle broker MQTT on se trouve et appeler la fonction callback.

C’est quoi la fonction callback ?

Et bien c’est la fonction qui écoutera si un message arrive depuis le broker. Si c’est le cas, alors elle lira le message. Étant donné que le message est sous forme de bit, il faudra donc le parcourir avec une fonction ‘for’ pour le décoder ! Ensuite c’est à vous de le traiter selon vos envies. Pour ma part je décide d’allumer la LED si c’est un message « on » et de l’éteindre si c’est un message « off »

Dans la condition if () on remarque que je prends ma première position de payload, qui correspond à la seconde lettre du message envoyé par le broker (on commence à 0). C’est c’est off on envois « OFF » il faudra donc détecter l’arrivée d’un « F » et pour on d’un « O »

 

La feed c’est le chemin (un peut comme dans un dossier de votre PC) qui permet d’accèder aux commandes de votre client MQTT.

 

Adafruit.io

 

Sur adafruit.io tu peux créer plusieurs feed selon les usages. Pour créer un feed tu devras commencer par créer une nouvelle dashboard :

Puis une fois dedans c’est à toi de créer les entrées/sortie que tu as besoin pour ton projet. Dans mon cas j’ai ajouté un switch on/off dans le but de contrôler la LED de l’ESP.

Pour le paramétrer, il suffira de lui donner un nom et un titre.

Si vous avez bien suivi, vous avez maintenant votre feed. tonPseudo/feeds/leNomDeL’entréeSortie

Et voici notre programme terminé ! Si vous se passe bien vous pouvez contrôler la LED de l’ESP01 depuis le tableau de bord de adafruit.io désormais.

C’est super, mais disons que dans la plupart des cas vous ne vous balader pas avec un ordinateur. En plus, sur smartphone c’est pas très pratique de se connecter sur adafruit.io…

 

Client MQTT Smartphone

J’utilise l’application MQTT Dash ! À la première ouverture vous devrez d’abord définir votre serveur MQTT (nom, adresse, port, key) pas de difficulté particulière ! Puis on arrivera sur une interface très similaire que celle de adafruit.io ou tu pourras sélectionner le type d’entrée/sortie que tu souhaites ajouter.

Pour le switch la configuration est très simple, il te suffit de préciser le nom du bloc (optionnel) le feed dans lequel envoyer les données, et le message à envoyer selon l’état du switch (« ON » ou « OFF »). Vous avez aussi la possibilité de choisir une icône on et off et de modifier sa couleur.

Il ne te reste plus qu’à tester si comme depuis le tableau de bord d’adafruit.io le switch fonctionne.

Ce nouveau service ouvre la porte à plein de nouvelles possibilités et le site d’adafruit.io facilité l’implémentation de certaines d’entre elles telle que le service IFTTT qui m’intéresse de plus en plus et que vous verrez surement dans un prochain article.

Se sera tout pour MQTT aujourd’hui! On a fait un grand tour des bases pour MQTT en mode subscriber. Nous y retournerons très probablement dans un prochain article!

Reçois 1 un petit guide de réalisation DIY par semaine!

+

Du contenu bonus offert à chaque nouvel article!