ESP32 : HELTEC WiFi Kit 32
Certains d'entre vous ont certainement remarqué ces petites cartes HELTEC équipées d'un ESP32 et d'un écran OLED 0.96".
On les trouve chez différents revendeurs, y compris sous d'autres marques.
Celle-ci par exemple, fabriquée par DIYMORE, que j'ai acheté :
https://fr.aliexpress.com/item/32847022581.html?spm=a2g0s.9042311.0.0.63436c37qjZ3Li
Il s'agit d'un clone, strictement identique à l'original :
https://heltec.org/project/wifi-kit-32/
Ses caractéristiques :
- ESP32 dual-core 240MHz
- 4MB de mémoire FLASH
- 520 KB de mémoire RAM
- convertisseur USB CP2102
- écran OLED I2C SSD1306 128x64
- LED blanche utilisateur (LED_BUILTIN)
Sa largeur est la même que celle de la WEMOS D1 LOLIN32, ce qui permet de l'enficher sur une breadboard, tout en disposant de deux rangées de broches libres sur les côtés pour les raccordements de fils DUPONT. C'est appréciable.
D'autre part, cette carte est une bonne alternative d'affichage pour certaines personnes qui s'obstinent, encore à notre époque, à utiliser, y compris sur ESP8266 ou ESP32, des écrans LCD alphanumériques 2x16 ou 4x20, gros, moches et dépassés.
1. Le WIFI
Apparemment cette carte a un petit peu plus de mal à se connecter à mon réseau WIFI qu'une WEMOS D1 MINI. Même une carte ESP32 DevKit C fait mieux.
Depuis mon bureau, assez mal situé d'un point de vue WIFI, la connexion avec la HELTEC est impossible. Depuis la chambre voisine, 3 mètres plus près, c'est OK.
On va conclure que dans une situation normale, la carte fonctionne plutôt bien, sans être exceptionnelle.
2. L'écran OLED
On pourrait croire qu'il suffit d'installer le package ESP32 et une librairie SSD1306 pour faire fonctionner cette carte.
C'est possible, mais ce n'est pas la solution la plus aisée. Heureusement, HELTEC fournit un package pour sa carte.
2.1. La méthode facile
Pour utiliser ces cartes, il suffit d'installer la librairie HELTEC. Elle est directement installable depuis le Gestionnaire de Bibliothèques de l'IDE ARDUINO : il suffit de rechercher Heltec ESP32 Dev-Boards.
Ensuite, redémarrer l'IDE pour voir apparaître les exemples dans le menu "Fichiers / Exemples / Heltec ESP32 Dev-Boards.
Il sera possible ainsi à peu de frais de commencer à s'amuser avec cette carte.
Il y a un inconvénient : le nombre de polices de caractères est très limité.
2.2. La méthode compliquée
Après tout, ces modules sont de vulgaires cartes ESP32 équipées d'un écran OLED SSD1306. Il n'y a pas de raison d'installer un package particulier pour si peu de chose. On devrait pouvoir s'en sortir avec le package ESP32 standard et la librairie SSD1306 de notre choix.
Tout d'abord, dans le menu "Outils / Type de Carte" choisissons la carte "Heltec WiFi Kit 32". Car elle existe dans le package ESP32 standard !
2.2.1. L'écran I2C
Le premier réflexe qui vient à l'esprit lorsque l'on connecte un écran I2C à un microcontrôleur est d'utiliser le logiciel I2C_Scanner pour vérifier que l'écran est bien visible sur le bus. Or, avec cette carte cela ne donne aucun résultat.
Le schéma nous apprend que SDA et SCL sont situés sur les GPIOs 4 et 15, au lieu de 21 et 22.
Un second essai en configurant Wire pour utiliser 4 et 15 ne donne aucun résultat non plus.
Surprise : dans les exemples Heltec il y a un exemple "Heltec ESP32 Dev-Boards / ESP32 / I2C_scanner. Ce sketch affiche bien un device I2C en 0x3C.
En examinant le code de la librairie, la broche RST de l'écran est configurée en sortie et basculée à HIGH. Essayons de faire la même chose avec un code classique I2C_Scanner légèrement modifié :
I2C scanning with SDA=4, CLK=15
2.2.2. La librairie AdaFruit
Maintenant le but de la manip est de déterminer si la librairie Adafruit_SSD1306 est compatible avec cette carte. A priori il n'y a pas de raison d'en douter.
2.2.2.1. Installation
Il faut installer la librairie à l'aide du Gestionnaire de bibliothèques : rechercher Adafruit SSD1306.
Il faut également installer Adafruit GFX Library.
Cette librairie a pas mal évolué ces derniers temps et il n'est plus nécessaire de modifier le fichier Adafruit_SSD1306.h pour préciser quelle est la taille de l'écran utilisé : elle alloue son buffer écran dynamiquement, ce qui n'est pas plus mal.
Elle permet également l'utilisation d'un bus I2C autre que le bus par défaut, ce qui va grandement nous aider.
Les manipulations décrites ci-dessous ne fonctionneront qu'avec les dernières versions de la librairie.
Rappel : dans le menu "Outils / Type de Carte" choisir la carte "Heltec WiFi Kit 32".
Les modifications à apporter sont mineures :
Cette portion du code d'origine :
Est à remplacer par :
Ensuite dans la fonction setup() il faut ajouter cette ligne (en gras) :
Les constantes SDA_OLED, SCL_OLED et RST_OLED sont déclarées dans le package ESP32 pour la carte HELTEC WIFI KIT 32. Il n'y a pas à s'en soucier.
Explications : au lieu d'utiliser l'objet standard Wire, nous utilisons un autre objet, Wire1, qui sera initialisé à l'aide des bonnes broches SDA et SCL dans la fonction setup().
Le sketch complet :
Et l'image de départ de la démo Adafruit :
3. Hello server
Petit bonus : un petit serveur HTTP qui permet de se connecter à un point d'accès et d'afficher le résultat de la connexion sur l'écran OLED :
Avant de compiler il faut renseigner ssid et password, et choisir la carte "Heltec WiFi Kit 32".
Son fonctionnement :
- au démarrage :
- il affiche "Connecting to SSID"
- la LED blanche s'allume
- à la connexion :
- il affiche "Connected to SSID" et l'adresse IP
- la LED blanche s'éteint
- en cas de perte de connexion WIFI :
- il affiche "Reconnecting to SSID"
- la LED blanche se rallume
- à la reconnexion :
- il affiche "Connected to SSID" et l'adresse IP
- la LED blanche s'éteint
Le mécanisme de reconnexion utilise les événements de connexion / déconnexion WIFI.
Accessoirement on peut se connecter à l'adresse IP avec un navigateur pour allumer ou étendre la LED.
Il sera ainsi facile de placer la carte à différents endroits de l'habitation pour vérifier que la couverture WIFI est correcte, et que le serveur a un temps de réaction raisonnable.
4. Téléchargements
Le projet se trouve ici :
https://bitbucket.org/henri_bachetti/heltec-wifi-kit-32
5. Conclusion
Nous voilà donc à même de pouvoir utiliser soit le package HELTEC, soit le package standard ESP32 + la librairie Adafruit.
La librairie Adafruit est intéressante à plus d'un titre :
Tout d'abord beaucoup de développeurs sur ARDUINO, ESP8266 ou ESP32 l'utilisent. Ils ne seront donc pas dépaysés.
La librairie Adafruit est maintenue et évolue fréquemment, et en bien, et même en très bien.
Elle propose un nombre de polices de caractères important, et il est possible de convertir des polices TTF existantes.
https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts
Voici une petite carte bien sympathique qui devrait plaire à beaucoup. Son petit format est intéressant.
Cordialement
Henri
6. Mises à jour
26/06/2021 : 3. Hello server
Merci pour ce tuto Henri. Je viens de le tester avec ma nouvelle carte et ça fonctionne parfaitement.
RépondreSupprimerJ'ai vu que l'on pouvait y brancher une batterie pour qu'elle fonctionne en autonomie... Sais-tu où l'on peut en trouver ?
N'importe quelle batterie LITHIUM-ION ou LIPO conviendra. Tout dépend de l'autonomie désirée.
SupprimerLa batterie doit être équipée d'un câble avec un connecteur SH1.25. On trouve même des câbles tout faits sur AliExpress.
Le pôle + est repéré sur la carte.
Ensuite tout dépend de l'utilisation. Si l'ESP32 est utilisé comme serveur WEB, la consommation est d'environ 80mA, ce qui autorise environ 10H de fonctionnement avec une batterie de 1000mAH.
Bonjour. j'ai bien réussi à faire fonctionner le sketch adafruit. Merci pour votre pédagogie bien concrète ;)
RépondreSupprimerJ'aimerai pouvoir recevoir (et plus tard en envoyer) des informations envoyées par le protocole OSC depuis le wifi de mon ordinateur qui a cette adresse 127.0.0.1. Seriez vous comment faire? Bien à vous, benjamin
Bonjour.
SupprimerIl faut chercher protocole OSC ESP32. Il existe des choses :
https://reso-nance.org/wiki/ateliers/esp-osc/accueil
Votre PC n'a pas l'adresse IP 127.0.0.1, cette adresse est la boucle locale, appelée loopback. Il a forcément une autre adresse, WIFI, Ethernet ou les deux.