Si vous avez suivi tous les épisodes de mon exploration de l’Internet des Objets, vous vous souvenez sans doute que j’avais d’abord tenté de commander à distance une lampe de bureau en utilisant un client MQTT pour PC. L’ordinateur recevait les commandes au format texte, puis les relayait à une carte à microcontrôleur via le port USB.

J’ai ensuite cherché à me débarrasser de cette encombrante station relais qu’était le PC, autrement dit tenté d’implanter le client MQTT directement sur la carte à  microcontrôleur. J’y suis à demi parvenu dans l’épisode précédent grâce à une bibliothèque minimale. J’aurais aimé aller plus loin, mais les fonctions de cette bibliothèque nous auront au moins permis de découvrir que la requête de connexion et la publication d’un messages MQTT sont simples à coder.
 
Pour l’instant il me manque donc toujours un système à microcontrôleur capable d’envoyer et recevoir des messages TCP/IP. J’ai opté pour le CI ESP8266, une puce utilisée dans de nombreux projets Wi-Fi. Elle est relativement simple à exploiter et se commande par commandes « AT » envoyées par interface série.
 
Pour me faciliter la tâche, je me suis également procuré le Maker Kit – Internet of Things de Fabian Kainka, coffret que vous trouverez par ailleurs dans l’e-choppe. La carte Pretzel du kit est équipée d’une puce ESP8266 et d’un ATmeag328 préprogrammé avec le chargeur de démarrage Arduino. L’interface UART de la puce ESP8266 est reliée à deux broches de l’ATmega328. Le dialogue avec l’ESP8266 nécessite un UART logiciel car l’UART matériel du microcontrôleur est déjà affecté aux communications par USB. La conversion des niveaux de tension est assurée par un petit circuit monté sur la carte.
 
Faire ses premiers pas avec la Pretzel est simple puisqu’il suffit de télécharger l’EDI Arduino et de relier la carte à un PC via USB. Je ne suis pas un inconditionnel d’Arduino et de ses bibliothèques, mais c’est la voie que j’ai suivie pour démarrer rapidement (on peut aussi programmer le microcontrôleur par ISP en soudant un connecteur 2 x 3 contacts sur la carte).
 
J’ai commencé avec le premier programme d’exemple du manuel. Une fois le code chargé dans sa mémoire (il faut sélectionner Arduino Nano comme type de carte), le microcontrôleur transmet à lESP8266 tous les caractères reçus par USB, et inversement. Autrement dit on peut utiliser un émulateur de terminal pour envoyer directement des commandes à la puce Wi-Fi de la Pretzel.
 
J’ai lancé HTerm, mon émulateur de terminal préféré, et tenté de connecter la carte à mon réseau Wi-Fi local (section 1.1 du manuel). Les commandes AT sont relativement intuitives, je suis donc vite parvenu à me connecter au réseau WLAN de mon bureau.
 
La connexion établie, je pouvais maintenant tester le protocole TCP/IP. Pour cela j’ai sauté le reste des chapitres 1 et 2 (UDP) et lancé le premier code d’exemple du chapitre 3. Le programme se comporte comme un navigateur web en ce sens qu’il reçoit le code HTML du site www.example.com via la commande HTTP GET.
 
J’ai ensuite cherché à envoyer des caractères à travers mon intranet. Comme serveur TCP recevant et affichant les chaînes de caractères, j’ai utilisé mon client MQTT (cf. épisodes précédents) et l’extension pour serveur TCP. Un clic sur le bouton TCP Listen met le serveur à l’écoute des requêtes envoyées par le client TCP (la puce ESP8266).
J’ai saisi les commandes suivantes :
 
AT + CIPSTART = "TCP", "192.168.0.15", 80
AT + CIPSEND = 3
 
La première prépare la puce ESP8266 à la connexion TCP, la seconde envoie un caractère utile (ainsi que les caractères CR et LF que le programme HTerm ajoute automatiquement aux données utiles).
 
Le caractère envoyé et reçu dans le terminal s’est également affiché dans la fenêtre de réception du serveur TCP. Tout semblait donc se dérouler normalement, mais la puce ESP8266 a presque aussitôt mis fin à la connexion et le serveur TCP n’a pas pu la rétablir. J’ai dû le fermer et le redémarrer en appuyant sur le bouton TCP Listen. C’était un peu frustrant, mais après tout il ne s’agissait là que d’une première approche. Et d’ici le prochain épisode, comptez sur moi pour ne pas en rester là !