Test du Shield OLED pour Wemos D1 Mini (SSD1306 64×48 pixels) avec ESP Easy et Adafruit_SSD1306 • Domotique et objets connectés à faire soi-même

Aujourd’hui, je vous propose de tester le shield OLED pour la Wemos D1 Mini. Ce shield est équipé d’un écran OLED de 64 x 48 pixels. Il utilise le micro-contrôleur SSD1306 habituel déjà présenté dans plusieurs articles.

C’est un écran de petite taille idéal pour ajouter un affichage miniature à la Wemos D1 Mini. On le trouve très facilement en direct de Chine pour moins de 5€.

Déballage du shield OLED Wemos D1 Mini

J’ai été surpris par la qualité de l’emballage. L’écran est livré dans un petit boitier transparent. Le shield est livré avec le jeu de broche habituel de 3 dimensions. L’écran OLED est directement soudé sur le PCB. La qualité de fabrication est irréprochable. Petit petit point faible à noté toutefois, l’écran est maintenu en place par une mousse autocollante. L’écran peut être légèrement tourné. Il a peut être été positionné au moment du collage, ou la mousse se déforme durant le stockage. Ce n’est pas très gênant, il suffit de le décoller délicatement et le repositionner correctement

L’écran utilise le bus I2C pour communiquer avec la Wemos. L’écran est utilisable à l’adresse 0x3C (ou 0x3D)

Code Arduino avec la librairie Adafruit_SSD1306 modifiée

La librairie Adafruit_SSD1306 est assez simple et très puissante. Elle permet de dessiner des formes simples, écrire du texte, afficher des bitmap, écrire du texte et faire de petites animations (scrolling…). La résolution de cet écran n’est pas pris en charge directement par cette librairie. Mike Causer a fait une adaptation de la librairie. Elle est disponible sur Github ici. Mc Causer a également fait une adaptation du programme de démo d’Adraduit ici.

Si vous développez d’autres projets à l’aide de la librairie Adafruit_SSD1306 officielle, le mieux est d’ajouter les 2 fichiers modifiés directement dans votre projet. Téléchargez le fichier ZIP depuis Github. Après décompression, placez les 2 fichiers Adafruit_SSD1306.cpp et Adafruit_SSD1306.h dans le répertoire de votre projet. Fermez et rechargez le projet pour prendre en compte les 2 librairies

Il faut modifier la déclaration de la librairie en début de programme pour appeler la librairie locale. C’est surtout le cas si vous utilisez déjà la librairie officielle Adafruit pour d’autres projets.

#include 

Devient

#include "Adafruit_SSD1306.h"

La modification prend simplement en compte la résolution de l’écran OLED du shield. La programmation reste parfaitement identique. Voici un petite exemple de code (minimal) qui affiche un Hello World sur la première ligne de l’écran.

Pour tester l’écran, voici un petit montage rapide qui permet de mesurer puis d’afficher la température et l’humidité mesurée à l’aide du shield DHT22. Le Shield Wemos DHT22 a déjà été présenté dans ce test. Vous pouvez rendre cette petite sonde de température autonome en la faisant fonctionner sur batterie grâce au Shield LiPo qui fera l’objet d’un prochain test.

Téléverser le code Arduino du projet

Ce petit programme qu’il vous suffit de téléverser récupère la mesure de température (en Celcius) ainsi que le taux d’humidité.

#include 
#include 
#include 
#include "Adafruit_SSD1306.h"
#include 
 
#define OLED_RESET 0  // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
 
#define DHTPIN D4
#define DHTTYPE DHT22  
DHT dht(DHTPIN, DHTTYPE);
 
void setup()   
{
  Serial.begin(115200);
  dht.begin();
  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 64x48)
  display.display();
}
 
void loop() 
{
  delay(1000);

  // Efface l'écran et positionne le curseur dans le coin supérieur gauche - clear display and set cursor on the top left corner
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  float bat = ESP.getVcc();// / 1024;
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  
  // Température en Celcius - Temperature in Celcius
  display.println("Temp.");
  display.print(t);
  display.println(" c");
  // Humidité en % - Humidity in % 
  display.println("Humidity");
  display.print(h);
  display.println(" %");
  display.display();
}

Le shield OLED permet d’afficher jusqu’à 6 lignes de texte. Avec la librairie Adafruit_SSD1306, on dispose de 10 caractères avec la taille 1.

De bas en haut : Wemos D1 Mini, Shield LiPo, Shield DHT22, Shield OLED

Comment utiliser le Shield OLED avec ESP Easy

Le shield Wemos n’est pris en charge qu’à partir de la version R147 RC8 d’ESP Easy. Suivez ce tutoriel pour installer la version Mega v2 sur la LoLin d1 Mini ou compatible

ou sans avoir besoin de l’IDE Arduino

Une fois ESP Easy installé et connecté au réseau WiFi, lancez un scan du bus I2C pour connaître l’adresse de l’écran.

Créez un device pour le DHT22. Par rapport à la version R120, les broches ont un double repérage. Le repérage Arduino GPIOx ainsi que la correspondance ESP8266 (Dx). Sur le shield DHT, le DHT22 (ou DHT11) est soudé sur la broche D4. Configurez les paramètres comme ceci :

  • Delay : choisissez une fréquence de rafraichissement. Ici 1 seconde
  • IDX un nombre différent de 0
  • GPIO le DHT22 est branché sur le D4
  • Type choisissez votre modèle (DHT11, DHT21 ou DHT22)
  • Enregistrez avec submit

Ajoutez un nouveau device pour l’écran OLED et configurez le ainsi

  • Delay 1 seconde par exemple
  • I2C choisissez l’adresse I2C sur laquelle se trouve l’écran
  • Rotation si vous n’avez que 4 lignes à afficher, vous pouvez changer d’orientation. La version 147 RC8 comporte un bug d’affichage qui n’affiche pas les 2 dernières lignes
  • Display Size : choisissez 64×48
  • Line : on appel la valeur d’une sonde entre crochets. Par exemple pour afficher la température renvoyée par le device DHT22, on fera [DHT22#temperature]. La casse n’est pas prise en compte.
  • Enregistrez avec submit

Autres remarques :

  • Le code comporte un second bug. La dernière ligne déborde sur la première ligne (ou plus)
  • Chaque ligne ne peut pas contenir plus de 8 caractères. C’est moins qu’avec la librairie Adafruit_SSD1306

Et voici l’affichage obtenu

Wemos nos propose donc ici un Shield de bonne qualité qui vient s’empiler par dessus d’autres Shields. La résolution est un peu contraignante mais les librairies habituelles ont été adaptées et permettent de programmer assez simplement un affichage.

Banggood.com

Banggood.com

6,49€

En Stock

2 neufs à partir de 6,49€

actualisé le 4 novembre 2022 13 h 02 min

Banggood.com

Banggood.com

Avez-vous aimé cet article ?