Victime de son succès, Wemos fait l’objet de nombreux clones (ou fakes comme certains diront !). Après la Wemos 1d mini, c’est au tour de la LoLin32 d’être copiée. Aujourd’hui, nous allons découvrir un clone plutôt sympa d’un fabricant inconnu (pour le moment du moins). Ce fabricant a su copié le meilleur de Wemos en proposant plusieurs cartes d’extension (shields) qui a fait le succès de la d1 mini. Cette LoLin32 construite autour de l’ESP32 (ESP-WROOM-32) d’Espressif embarque un écran OLED monochrome 0.96” (168×64 pixels) très classique. L’écran est piloté par un contrôleur SSD1306 sur le bus I2C.
Déballage du clone de la Wemos LoLin32 avec écran OLED SSD1306
On trouve plusieurs boutiques sur AliExpress qui commercialisent des clones de la Wemos LoLin32 avec écran OLED. J’ai commandé la mienne chez Face-to-Face Electronic. La LoLin32 a été livrée en 3 semaines environ, ce qui est correct pour une livraison en direct de Chine. Elle est livrée dans une petite boite en plastique avec un sur-emballage à bulles. Rien à dire, la carte est parfaitement protégée durant le transport. La carte est livrée avec un jeu de connecteur mâle à souder.
Pour intégrer l’écran OLED, le fabricant à sacrifier plusieurs broches de l’ESP32. Pour comparaison, voici le repérage de quelques cartes de développement ESP32. L’ESP32 dispose de 38 broches. Chaque fabricant expose les broches qu’il souhaite en fonction de la compacité et des fonctions qu’il souhaite mettre en avant. La fabricant de ce clone a voulu conserver l’interface permettant d’ajouter un écran tactiles (Touch 0 à 6). On dispose par la même occasion de 11 entrées analogiques ce qui nous change de la seule entrée des modules ESP8266. L’écran OLED utilise les broches 4 (SDA) et 5 (SCL) pour communiquer sur le bus I2C avec l’ESP32. On dispose enfin de 3 broches délivrant une tension de 3V3, 2 broches 5V et 2 broches GND. Au total (en comptant le bus I2C), on dispose de 19 entrées / sorties alors que l’Arduino Uno en propose 20.
Spécifications du module ESP-WROOM-32
- Module ESP32 : ESP-WROOM-32 d’Espressif.
- Microprocesseur dual core cadencé à 240MHz équipé de 4MB de mémoire flash SPI.
- Support jusqu’à 16MB de mémoire flash
- Connectivité
- WiFi 802.11 b/g/n.
- Sécurité WEP, WPA/WPA2 PSK/Enterprise.
- Puce cryptographique intégrée prenant en charge les algortithmes AES/SHA2/Elliptical Curve Cryptography/RSA-4096
- Puissance maximale pour le transfert de données : 19.5 dBm@11b, 16.5 dBm@11g, 15.5 dBm@11n
- Sensibilité max. de réception : -97 dBm
- Bluetooth 4.0 LE
- WiFi 802.11 b/g/n.
- 32 Entrées/Sorties
- 26x E/S digitales (3.3V). Toutes les sorties peuvent être PWM
- 18x entrées analogiques
- 3x UART
- 3x SPI
- 2x I2S
- 2x DAC
- 2x I2C
- Consommation en mode sommeil (Deep Sleep mode) : 5 μA
- Capteurs intégrés
- Effet Hall
- 10x entrées pour interface tactile capacitive
Test de l’écran OLED SSD1306 en I2C avec du code Arduino
Passons maintenant au test de l’écran OLED. J’ai déjà réalisé plusieurs articles sur les écrans OLED monochrome pilotés par le SSD1306.
- Adresses I2C des capteurs et actionneurs les plus courants
- Affichage OLED SSD1306 I2C sur Raspberry Pi. Code Python d’une mini station météo connectée à Jeedom avec la librairie Adafruit
- Déballage du clone Wemos ESP32 LoLin avec écran OLED monochrome 0.96” SSD1306 intégré
- Affichage OLED SSD1306 en MicroPython, exemple avec un baromètre numérique BME280 I2C
- Adafruit PiOLED, carte d’extension à écran OLED monochrome 128x32pixels pour Raspberry Pi
- Scanner WiFi portable à écran OLED (ESP8266) : force du signal, test de connection à un serveur
- Test du Shield OLED pour Wemos D1 Mini (SSD1306 64×48 pixels) avec ESP Easy et Adafruit_SSD1306
- ESP Easy R120. Ecran d’affichage OLED SSD1306 déporté avec un script Lua
- ESP Easy R120. Utiliser les Rules pour créer la consigne d’un thermostat connecté (Jeedom, Domoticz, Node-RED…)
- ESP Easy R120. Ecran d’affichage OLED SSD1306 pour Jeedom actualisé par requête HTTP
J’ai profité de l’occasion pour faire le point sur les nouvelles librairies disponibles depuis le gestionnaire de l’IDE Arduino. Depuis 2016, les choses ont pas mal évoluées. Adafruit et Sparkfun ont beaucoup contribué à l’élaboration des librairies graphiques mais les choses ont beaucoup évoluées depuis avril 2016 et le premier article sur le pilotage d’un écran OLED sur un ESP-01.
Si vous faites une recherche depuis le gestionnaire de librairies de l’IDE Aduino avec le mot clé SSD1306, vous allez trouvez trois nouvelles librairies très intéressantes :
-
Ai_Ardulib_SSD1306 est développée par le fabriquant Canadien Acrobatic (https://acrobotic.com/). Elle est limitée aux écrans SSD1306. Elle supporte les cartes Arduino, Arduino 101, AVR et ESP8266. C’est une librairie très légère surtout orientée vers l’affiche de texte simple.
- La librairie SSD1306 d’Alexey Dynda est livrée avec le code d’un jeu en bonus. Elle est supportée par les Attiny85, Attiny45, Atmega328p, Atmega168, Atmega2560, Digispark, ESP8266 et les nouveaux ESP32. Elle prend en charge les écrans i2c (128×64, 128×32), spi (128×64) et Nokia 5110 SPI PCD8544 84×48.
-
La librairie ESP8266 Oled SSD1306 développée par Daniel Eichhorn et Fabrice Weinbern du blog Squix. C’est une librairie très complète. Elle est toutefois limitée aux écrans SSD1306 sur bus I2C sur ESP8266 et ESP32. Elle est très simple à mettre en oeuvre mais très puissante.
- Enfin la librairie U8g2 (et la version légère pour afficher uniquement du texte U8glib) développée par Oliver Kraus. Actuellement, c’est la librairie la plus complète. Elle supporte un nombre impressionnant de contrôleurs d’écran (SSD1325, ST7565, ST7920, UC1608, UC1610, UC1701, PCD8544, PCF8812, KS0108, LC7981, SBN1661, SSD1306, SH1106, T6963, LD7032).
Installer le SDK ESP32 sur l’IDE Arduino
Avant de pouvoir utiliser la LoLin32 OLED, vous devez installer le SDK ESP32 d’Espressif sur l’IDE Arduino. Pour cela, suivez ce tutoriel pour Windows, macOS ou Linux
Installer la librairie ESP8266 Oled SSD1306 et tester l’affichage
Depuis le gestionnaire de librairie, installez la librairie ESP8266 Oled SSD1306. Allez ensuite dans le menu Outils -> Sélectionnez la carte Wemos LoLin32 dans la section ESP32.
Maintenant, depuis le menu Fichier -> Exemples, ouvrez un exemple livré avec la librairie. Il y en a 4 :
- Clock, une pendule
- Drawing, pour montrer les différentes primitives disponibles
- OTADemo, un exemple montrant comment afficher la progression de la mise en jour en WiFi
- SimpleDemo
- UiDemo, un exemple avec plusieurs pages d’affichage
Quelque soit l’exemple, vous devez modifier les broches du bus I2C. Les exemples sont livrés prêt à l’emploi pour un ESP8266. Trouvez la ligne SSD1306 display(0x3c, D3, D5) et remplacez D3 pour 5 et D5 par 4
SSD1306 display(0x3c, 5, 4);
L’écran se trouve à l’adresse 0x3c comme c’est souvent le cas pour les écrans OLED 0,96”. Il ne vous reste plus qu’à téléversez le code.
Test avec du code MicroPython
J’en voulu également tester la carte et l’écran avec du code MicroPython. L’installation du firmware MicroPython ne pose aucun problème. Il suffit de bien indiquer que c’est une carte de type ESP32. Vous pouvez utiliser uPiCraft sous Windows par exemple comme nous l’avons vu dans le tutoriel précédent. J’ai ensuite testé le code du tutoriel précédent en branchant un BME280 sur le bus I2C. Malheureusement, soit le scan du bus se bloque, soit aucun matériel I2C n’est détecté. J’ai testé l’astuce décrite par Alberto sur Instructable sans succès. En attendant que je trouve une solution, n’hésitez pas à partager votre solution dans les commentaires.
Pour conclure, ce clone de la Wemos LoLin32 est une carte de bonne qualité. Seul regret, elle n’est pas aussi étroite que la LoLin32 Lite. On ne dispose que d’une seule rangée de broches lorsqu’elle est installée sur une breadboard. Elle fonctionne à merveille depuis l’IDE Arduino. Elle est livrée avec un exemple de la librairie SSD1306 écrite par nos amis suisses du blog Squix pré-installé. Nous la découvrirons plus en détail dans un prochain tutoriel.
- M5Stack Atomic GPS. Tracker ESP32 TinyGPS++, export GPX sur carte SD, visualisation sur Google Maps ou VSCode
- Stocker des données sur une carte micro SD. Code Arduino compatible ESP32, ESP8266
- Débuter Arduino. Recevoir des commandes depuis le port série (compatible ESP32 ESP8266)
- Fonctions C++ print•println•printf•sprintf pour Arduino ESP32 ESP8266. Combiner•formater → port série
- String C++. concat•c_srt•indexOf•replace•subString… pour Arduino ESP32 ESP8266
- ESP32. Utiliser les Timers et alarmes avec du code Arduino
Hello aux possesseurs de cette carte avec oled intégré.
J’ai du mal a trouver les entrées analogiques, d’ailleurs au vu de mes recherches, il n’y aurait que la pin SVP (gpio36) mais je récupère des valeurs abérentes …
Pour infos, je passe par l’ide Arduino.
Savez vous si il y a d’autres pins analogiques ou pouvez-vous me confirmer que c’est la seule pin dispo ?
Merci à tous pour votre aide !
d’après mes recherches, l’ADC de ESP32 est …. compliqué.
J’ai regardé le livre de Kolban, qui est un des développeurs du SDK et qui est très compétent.http://forum.arduino.cc/index.php?topic=544964.0
Page 295 -sur >1090-, j’ai trouvé qu’un des deux ADC (chacun a plein de canaux, comme sur un Arduino uno) ne peut en aucun cas être utilisé en même temps que le wifi -ce qui divise la complexité du problème par deux (en fait, on n’a plus que 8 canaux sur 18)- La complexité est encore diminuée si deux canaux de l’ADC restant sont dédiés à un capteur à effet hall -ceci est indiqué dans le livre de Kolban, à la même page que ci dessus et la mise en oeuvre sous arduino est claire dans https://techtutorialsx.com/2017/07/16/esp32-arduino-internal-hall-sensor-measurements/ )
A noter, que, suivant une loi de Murphy, le livre de Kolban et la référence du SDK https://github.com/espressif/arduino-esp32/blob/eb46978a8d96253309148c71cc10707f2721be5e/cores/esp32/esp32-hal-adc.c#L236 indiquent que … la patte 36 sert au capteur à effet hall.
A noter aussi, selon des tonnes de résultats google, que l’ADC de l’ESP32 serait assez bruité si on ne prend pas des précautions de qualité de la masse et de filtrage passe bas assez sévères.
Comme un malheur n’arrive jamais seul, les gens se plaignent de non linéarités au voisinage du maximum (cette saturation variant suivant les lots et il reste monotone).
Au vu de tout ça, je conseillerais, si on n’a pas besoin d’une cadence infernale, d’investir dans un convertisseur externe, branché sur l’I2C -ne mange pas de pins-: je pense à un ADS 1115, qui ne partage pas la même adresse I2C que l’écran OLEd, offre 16 bits de résolution , mais est lent (800 echanitillons/(sec*canal) http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-ads1115-module-getting-started-tutorial/
IL est asse facile à trouver à Paris,https://hackspark.fr/fr/electronique/1436-ads1115-16bits-adcpga-breakout-board.html et m’a donné toute satisfaction avec un esp8266 (je préfère lire toute la doc avant de passer aux ESP32, plus complexes….)
Ceci est en fait une simple traduction d’un site en Anglais y compris les erreurs : 4 (SDA) et 5 (SCL) est en fait 5 (SDA) et 4 (SCL). Si vous voulez utiliser efficacement le i2C sur cette carte, voici un exemple avec la BMP280 :
#include
#include
#include
#include “SSD1306.h”
// Initialize the OLED display using Wire library
SSD1306 display(0x3c, 5, 4);
// Initialize the BMP280
Adafruit_BME280 bme;
void setup() {
Serial.begin(115200);
Serial.println(“Démarrage programme”);
// Init Display
display.init();
display.setContrast(255);
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16);
display.clear(); // Clear le buffer
// Init BMP280
Wire.begin(5,4); // Set I2C : 5=SDA 4=SCL
while (!bme.begin(0x76)) {
Serial.println(“Could not find a valid BME280 sensor, check wiring!”);
delay(1000);
}
}
J’ai ce modèle je cherche désespérément où sont les pins pour connecter une carte SD
SCLK ?
MISO ?
MOSI ?
Je me débrouillerais pour CS 😉
Bonjour Frou. Elles sont ici https://projetsdiy.fr/esp8266-guide-de-choix-achat-projets-diy/ au paragraphe “Correspondance des broches entre Arduino et ESP8266 (NodeMCU)”
– CLK -> D5
– MISO -> D6
– MOSI -> D7
– CS -> D8
Tu confonds… C’est pour une lolin32 oled que je cherche pas un ESP8266
4 et 5 sur la copie wemos lolin avec ecran oled
mais attention comme le oled et un autre device i2c seront sur le meme bus.
il faut peut etre gerer l’adressage ..?
Est ce que un firmware type esp easy fonctionne la dessus ?
Bonjour Victor. Non pas pour le moment ESP Easy ne fonctionne que sur la LoLin32 Lite https://projetsdiy.fr/firmware-esp-easy-mega-esp32-test-wemos-lolin32-lite-nouveautes/. J’ai testé sur un autre clone sans succès. Il faut encore attendre quelques semaines (ou quelques mois). Dès que ça fonctionne, je publierai un article. Bon week end