Il n'y a que quelques années que le SoC ESP8266 a été mis entre les mains des makers et sur le marché des cartes de développement où il a immédiatement rencontré un franc succès. Pour quelques euros à peine, ce système à microcontrôleur peut être incorporé dans vos projets en y apportant ses capacités Wi-Fi. À l'origine, l’ESP8266 servait surtout de deuxième contrôleur pour permettre l'accès au réseau à un premier contrôleur, via un port série. De plus en plus d’applications ont commencé à utiliser la puissance de traitement supplémentaire de la puce électronique ESP8266, peu coûteuse, pour traiter au passage des commandes d'entrées-sorties générales. Résultat : dans la plupart des cas, aucun autre processeur de contrôle n'était plus nécessaire. Ce qui a conduit Espressif, fabricant de la puce électronique, à envisager une nouvelle génération de cartes contenant un autre processeur (plus puissant) associé au module ESP8266. Ces cartes « ESP32 » de nouvelle génération comportent notamment deux processeurs 32 bits, un coprocesseur supplémentaire basse consommation, 36 broches GPIO, une interface Bluetooth et 512 Ko de mémoire SRAM, ce qui en fait une solution complète pour un très large éventail d’applications... et donc bien plus qu'une méthode commode pour incorporer des possibilités de communication en réseau dans un projet.

Projets ESP32 pour débutants...

Dogan Ibrahim a tenu compte de tous ces éléments pour rédiger son ouvrage « The Complete ESP32 Projects Guide ». Les deux premiers chapitres sont consacrés à l’ESP32 et à la carte de développement ESP32 DevKit C, très appréciée. Vous pourrez ainsi vous faire une idée des performances du SoC. Mais ce n'est pas à la théorie que l'auteur consacre le plus de temps. Au chapitre 3, il décrit comment configurer l’IDE (environnement de développement intégré) Arduino pour le contrôleur, et cette partie ne devrait guère poser de problème, même pour les parfaits débutants. Nous entrons en effet immédiatement après dans les exemples de projets. Pour commencer, quelques expérimentations ludiques avec les LED. Les novices y trouveront de quoi se familiariser avec les possibilités d'entrées-sorties de la puce électronique, illustrées par quelques structures de codage élémentaires permettant d'écrire des programmes. Le chapitre 5 décrit comment lire des mesures sur des capteurs, échantillonner des surfaces tactiles et activer un dispositif d'affichage. Y figurent également la programmation d'une carte Arduino pour réagir au changement d'état d'une broche, et l'utilisation des interruptions de temporisation.

J'ai en particulier apprécié la mise en page des descriptions de projets, structurée de manière logique. Après un résumé du projet et de ses objectifs didactiques, un schéma de principe, un schéma de circuit et une illustration des interconnexions sur un module d’essai apportent les informations précises nécessaires pour construire le dispositif. Vous trouverez ensuite une description du logiciel, assorti d'un pseudocode destiné à faciliter la compréhension, et bien sûr, un listage. Est-il nécessaire de préciser que vous pouvez télécharger le code source des projets sur le site web d’Elektor ? Pour faciliter encore les choses pour les débutants, l’e-choppe d’Elektor propose également un ensemble ESP32 Smart kit complet, contenant un module ESP32 DevKit C, deux cartes de prototypage à enficher (qu’il faut disposer côte à côte, l’ESP32 se trouvant à cheval sur l’une et l’autre), des fils de liaison et tous les composants relatifs au projet. Vous y trouverez en particulier des capteurs de lumière, d'humidité et de température, ainsi qu'un afficheur, une matrice de clavier, un servomoteur, un buzzer et un module à microphone.

... et passionnés plus avancés

Le chapitre 6 de l'ouvrage propose des projets contenant du code source plus étoffé. Vous y découvrirez entre autres un générateur de formes d'onde élémentaire ainsi qu'une application utilisant un clavier et un afficheur pour une application de calculatrice et de verrouillage par code. J'ai trouvé vraiment intéressant le projet suivant, la réalisation d'un lecteur de carte SD avec fonction de lecture-écriture, même s’il n’y a pas de lecteur SD dans le kit. De même pour le projet suivant, qui nécessite un module récepteur pour décoder les signaux infrarouges. Il pourrait être vraiment utile de prévoir ces modules, ainsi qu'une carte à relais, sous la forme d'une mise à niveau proposée dans l’e-choppe d’Elektor.

C’est à la page 276 que le livre aborde la programmation des accès réseau, à juste titre selon moi. Comme je l'ai déjà mentionné, l’ESP32 ne se limite pas à une carte interface Wi-Fi assortie de quelques périphériques supplémentaires. C'est plutôt un contrôleur à usage général, à la fois flexible et puissant, adapté aussi bien aux débutants qu’aux professionnels. Même les membres du labo d’Elektor adorent l’ESP32 et l'utilisent chaque fois que possible comme module de commande centralisé. Cet ouvrage sera donc un bon point de départ pour mieux comprendre le code source de toutes sortes de projets proposés par Elektor.

Le chapitre 7 aborde les questions de réseau (Wi-Fi, TCP, UDP et HTTP) avant de traiter l'envoi de valeurs depuis le capteur d'humidité et de température DHT11 vers la plate-forme ThingSpeak dans le nuage, qui fait l'objet du chapitre suivant.

Ma propre démo avec l'Internet des objets

Comme je suis un adepte de longue date de l'Internet des objets, j'ai repris cet exemple en le modifiant un peu. Au lieu du capteur de température et d'humidité, j'ai utilisé le petit module microphone du kit pour mesurer le niveau sonore (voir code source ci-dessous). Pour ce faire, j’échantillonne rapidement les valeurs de sortie analogiques sur le module microphone, je calcule la valeur moyenne pour 256 échantillons et je compte le nombre de fois où les valeurs d'échantillons suivantes se trouvent au-dessus ou au-dessous d'un seuil donné pour détecter les excursions de signal les plus importantes. La valeur du compteur est transmise périodiquement (quelques secondes) vers le nuage.

 


Comme pour les autres plateformes openSenseMap et AllThingsTalk dans le nuage déjà utilisées dans différents projets d’Elektor, vous devrez vous inscrire sur ThingSpeak, créer un dispositif (la carte chargée de l'acquisition des valeurs), puis indiquer les types de capteurs utilisés (un appareil peut avoir plusieurs capteurs). ThinkSpeak représente un appareil au moyen d'un canal. J'ai donc créé un nouveau canal, puis enregistré un champ pour un capteur chargé d'émettre des valeurs de niveau (voir la capture d'écran).




Dans ma série d'articles « Mon voyage dans le nuage », j'ai systématiquement utilisé MQTT pour envoyer dans le nuage les valeurs lues sur les capteurs. ThingSpeak fonctionne différemment : les valeurs mesurées sont simplement émises en utilisant une méthode de demande HTTP GET pour obtenir les informations auprès du serveur. Vous devez vous connecter au serveur ThingSpeak par TCP, puis transmettre les informations également en TCP :
 
GET /update?api_key=AAAAAAAAAAAAAAAA&field1=XXX HTTP/1.0
Host: https://api.thingspeak.com

AAAAAAAAAAAAAA est la clé d’API attribuée par ThingSpeak lors de la création d'un canal. XXX est la valeur du premier champ.
J’ai réussi (à l’aide des instructions données dans le livre, du kit et des exemples de programmes) à réaliser très rapidement l’application. Et pourtant, lors de ma première tentative, ThingSpeak n’a pas fonctionné… Fort heureusement, j’ai rapidement découvert pourquoi. Bien que l'auteur ait déclaré une chaîne APIKEY au début de l'exemple de programme – que j'ai consciencieusement remplacée par la clé d’API de ma propre page ThingSpeak – cette chaîne n'était référencée nulle part ailleurs dans le code. L'auteur avait en effet tout simplement codé en dur sa propre clé d'API ailleurs dans le corps du programme... et tant pis pour les pratiques de codage standardisées. Rien de grave, même si j'ai quand même le sentiment que le code a été copié et collé à la hâte sans envisager de mieux le structurer pour un usage plus général.
La capture d'écran montre le niveau du bruit que j'ai enregistré sur ma page ThingSpeak.
 

 

Si vous voulez comprendre l'exemple, vous devez créer votre propre canal sur ThingSpeak, puis saisir la clé d'API dans le croquis SoundToThingSpeak (téléchargement ci-après) – sans oublier le SSID et le mot de passe de votre réseau de routeur.
Il est possible d’étendre encore l’application : avec les capteurs de lumière, de température et d'humidité contenus dans le kit, vous pourriez par exemple contrôler à distance les conditions environnementales de votre logement tout en sirotant une piña colada dans un bar de plage, quelque part aux Maldives.

Je n'ai évidemment pas pu résister à bricoler le code et à adapter à ThingSpeak le croquis publié dans l'un de mes bancs d'essai. Au lieu de l'afficheur, j'ai choisi d'utiliser une LED RVB pour indiquer l'état de la connexion. J'ai aussi remplacé la photorésistance par le capteur DHT11 contenu dans le kit. Pour accéder au code, vous pouvez télécharger le fichier zip correspondant à ce banc d'essai. Si vous comparez le croquis présent avec celui du banc d'essai, vous verrez les modifications que j'ai apportées aux fonctions de l'interface graphique (la LED RVB remplace l'afficheur). Au lieu des messages MQTT, j’utilise le protocole HTTP, ce qui simplifie la boucle principale. Pour mon deuxième exemple, il n'est pas nécessaire de coder en dur le SSID et le mot de passe Wi-Fi, ainsi que la clé d'API. Mais je peux utiliser l'interface Web habituelle déjà présentée dans ma série d’articles. Indiquez la clé d’API ThingSpeak API dans la zone SENSOR ID / TOKEN. Dans BROKER ADDRESS, entrez « api.thingspeak.com ». Les fichiers contenus dans le dossier de téléchargement des bibliothèques doivent être placés dans le dossier Libraries de l’Arduino, ainsi que les bibliothèques nécessaires pour accéder au capteur DHT (Adafruit, voir dans le livre).

ESP32 pour les professionnels

Au fur et à mesure de la progression dans ce livre, les chapitres traitent d'applications plus complexes, notamment les projets de serveurs web. Vous trouverez au chapitre 13 l'utilisation des capacités Bluetooth de l’ESP32. J'ai trouvé cette partie très intéressante et je prévois de la traiter de manière plus détaillée lors d'un banc d'essai à venir.

Dans les trois derniers chapitres, Dogan Ibrahim laisse de côté l'environnement de développement intégré de l'Arduino et présente le codage en MicroPython avec l’outil IoT Development Framework (esp-idf) d’Espressif. Cette plate-forme s'appuie sur FreeRTOS pour optimiser l'utilisation des deux processeurs à grande vitesse et gérer les périphériques intégrés dans une approche basée sur les tâches. Ce sujet n'est qu'à peine effleuré en quelques pages et il mériterait véritablement un ouvrage complet pour explorer pleinement la puissance du matériel. Je suis pas certain qu'il existe aujourd'hui un livre à ce sujet.

Conclusion

En résumé, cet ouvrage constitue un guide complet que je recommande vivement (ainsi que le kit de composants), en particulier pour les débutants intéressés par les projets de mesure et de commande. Il offrira également un bon point de départ pour les amateurs de cartes Arduino (UNO, par exemple), qui souhaitent s'initier à la puissante plateforme ESP32. Si vous vous intéressez plus spécifiquement à la programmation des réseaux et à la connexion au nuage, il existe d'autres ouvrages pour aborder ces sujets en particulier.