jeudi 24 juin 2021

ESP32 : HELTEC WiFi Kit 32

 


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_scanner.ino

Gagné !

I2C scanning with SDA=4, CLK=15

Found device at 0x3c
Found 1 I2C devices by scanning.

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.

2.2.2.2. Le sketch

Rappel : dans le menu "Outils / Type de Carte" choisir la carte "Heltec WiFi Kit 32".

L'exemple utilisé est : ssd1306_128x64_i2c.ino

Les modifications à apporter sont mineures :

Cette portion du code d'origine :

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Est à remplacer par :

#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, RST_OLED);

Ensuite dans la fonction setup() il faut ajouter cette ligne (en gras) :

void setup() {
  Serial.begin(115200);
  Wire1.begin(SDA_OLED, SCL_OLED);
  // etc.

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 :

adafruit-ssd1306.ino

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 :

HelloServer.ino

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.git

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


4 commentaires:

  1. Merci pour ce tuto Henri. Je viens de le tester avec ma nouvelle carte et ça fonctionne parfaitement.
    J'ai vu que l'on pouvait y brancher une batterie pour qu'elle fonctionne en autonomie... Sais-tu où l'on peut en trouver ?

    RépondreSupprimer
    Réponses
    1. N'importe quelle batterie LITHIUM-ION ou LIPO conviendra. Tout dépend de l'autonomie désirée.
      La 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.

      Supprimer
  2. Bonjour. j'ai bien réussi à faire fonctionner le sketch adafruit. Merci pour votre pédagogie bien concrète ;)
    J'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

    RépondreSupprimer
    Réponses
    1. Bonjour.
      Il 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.

      Supprimer