Ces petits écrans peuvent facilement être obtenus en ligne sous la forme d'un module facile à connecter. Il existe principalement deux modèles: celui qui a été mis au point par Sparkfun, et celui qui a été conçu par Adafruit.
J'ai utilisé le modèle Sparkfun; le modèle Adafruit fonctionne tout aussi bien, sauf que ses connecteurs ne sont pas placés dans le même ordre.
Connexion à un ESP32
J'ai branché l'écran à mon module ESP32 de la façon suivante:
- Broche 1 VCC de l'écran : Broche 3.3V de l'ESP32
- Broche 2 GND de l'écran: Broche GND de l'ESP32
- Broche 3 SCE (CS) de l'écran: Broche D15 de l'ESP32
- Broche 4 RST de l'écran: Broche D4 de l'ESP32
- Broche 5 D/C de l'écran: Broche D2 de l'ESP32
- Broche 6 DN (MOSI) de l'écran: Broche D23 de l'ESP32
- Broche 7 SCLK de l'écran: Broche D18 de l'ESP32
- Broche 8 LED de l'écran: pas branchée (je n'avais pas besoin du rétroéclairage)
Connexion à un ESP8266
Avec un ESP8266, j'ai procédé de la façon suivante:
- Broche 1 VCC de l'écran : Broche 3.3V de l'ESP8266
- Broche 2 GND de l'écran: Broche GND de l'ESP8266
- Broche 3 SCE (CS) de l'écran: Broche GPIO15 (D8) de l'ESP8266
- Broche 4 RST de l'écran: Broche GPIO4 (D2) de l'ESP8266
- Broche 5 D/C de l'écran: Broche GPIO2 (D4) de l'ESP8266
- Broche 6 DN (MOSI) de l'écran: Broche GPIO13 (D7) de l'ESP8266
- Broche 7 SCLK de l'écran: Broche GPIO14 (D5) de l'ESP8266
- Broche 8 LED de l'écran: pas branchée (je n'avais pas besoin du rétroéclairage)
Installation de la bibliothèque u8g2
Afin de faciliter la programmation, j'ai utilisé la bibliothèque u8g2, qui supporte à peu près tout ce qui existe comme petit écran monochrome, et qui est parfaitement compatible avec l'ESP32 et l'ESP8266.
Les exemples fournis avec la bibliothèque (GraphicsTest ou HelloWorld, par exemple) permettent de vérifier rapidement que l'écran Nokia est fonctionnel et correctement branché. Parmi l'interminable liste de constructeurs proposée au début de chaque exemple, il faut choisir "U8G2_PCD8544_84X48_F_4W_HW_SPI" et modifier la numérotation des broches pour qu'elle corresponde à nos branchements:
U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, 15, 2, 4);
Je vous présente ci-dessous un sketch qui permet de choisir à distance, par l'entremise d'une page web, l'illustration affichée par l'écran Nokia.
Au démarrage, l'écran affiche l'adresse IP du serveur web:
Lorsqu'on accède à cette adresse au moyen d'un navigateur web, on nous propose une liste de 4 fruits.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************** | |
ESP_Nokia_web | |
L'écran Nokia relié à l'ESP32 ou ESP8266 est contrôlé par l'entremise | |
d'une page web. | |
https://electroniqueamateur.blogspot.com/2019/10/ecran-nokia-5110-et-esp32esp8266.html | |
***********************************************************************/ | |
// inclusion des bibliothèques utiles | |
// pour la communication WiFi | |
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266 | |
#include <ESP8266WiFi.h> | |
#include <ESP8266WebServer.h> | |
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32 | |
#include "WiFi.h" | |
#include <WebServer.h> | |
#endif | |
#include <WiFiClient.h> | |
// pour l'écran Nokia | |
#include <U8g2lib.h> | |
#include <Wire.h> | |
// modifiez ces deux constantes pour qu'elles contiennent les caractéristiques de | |
// votre réseau Wifi | |
const char* ssid = "**********"; | |
const char* password = "**********"; | |
#if defined ARDUINO_ARCH_ESP8266 // s'il s'agit d'un ESP8266 | |
ESP8266WebServer server(80); | |
#elif defined ARDUINO_ARCH_ESP32 // s'il s'agit d'un ESP32 | |
WebServer server(80); | |
#endif | |
U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 15, /* dc=*/ 2, /* reset=*/ 4); // Nokia 5110 Display | |
// définition des 4 illustrations bitmap: | |
static const unsigned char banane[] PROGMEM = { | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | |
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, | |
0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, | |
0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, | |
0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, | |
0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, | |
0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, | |
0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, | |
0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, | |
0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, | |
0x00, 0x00, 0x00, 0xe0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, | |
0x00, 0x00, 0x00, 0xfe, 0xff, 0x1f, 0x00, 0x00, 0x80, 0xff, 0xff, 0x0f, | |
0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, | |
0x00, 0xf0, 0xff, 0xff, 0xff, 0x03, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x00, | |
0xfe, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x0f, 0x00, | |
0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x00, | |
0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x07, 0x00, 0x00, | |
0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
}; | |
static const unsigned char fraise[] PROGMEM = { | |
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, | |
0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x19, 0x00, 0x00, | |
0x00, 0x00, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, | |
0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x3f, 0x00, | |
0x00, 0xff, 0xfc, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, | |
0x00, 0xfe, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0xfe, 0xfe, 0xff, 0x7f, 0x00, | |
0x00, 0xfe, 0xfe, 0xfd, 0xff, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xff, 0x00, | |
0x00, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0xff, 0x7f, 0xf7, 0xfb, 0x00, | |
0x00, 0xef, 0xbf, 0xf7, 0xf9, 0x00, 0x00, 0xce, 0xc7, 0xf7, 0x9b, 0x00, | |
0x00, 0xee, 0xff, 0xf7, 0xdf, 0x00, 0x00, 0xfe, 0xf7, 0x7f, 0xde, 0x00, | |
0x00, 0x7e, 0x76, 0x6e, 0xfe, 0x00, 0x00, 0x7e, 0x76, 0x4e, 0xee, 0x00, | |
0x00, 0x7e, 0x77, 0xcf, 0x67, 0x00, 0x00, 0xcc, 0xff, 0xff, 0x67, 0x00, | |
0x00, 0xdc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xdc, 0x76, 0xef, 0x3f, 0x00, | |
0x00, 0xf8, 0x76, 0xe6, 0x3e, 0x00, 0x00, 0xf8, 0x76, 0xe6, 0x1e, 0x00, | |
0x00, 0xf0, 0xf7, 0x7f, 0x0e, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xe0, 0xbe, 0xfb, 0x07, 0x00, 0x00, 0xc0, 0xbc, 0xb3, 0x03, 0x00, | |
0x00, 0xc0, 0xbd, 0x93, 0x03, 0x00, 0x00, 0x80, 0xe7, 0xdf, 0x01, 0x00, | |
0x00, 0x00, 0x67, 0xff, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x7e, 0x00, 0x00, | |
0x00, 0x00, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, | |
0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00 | |
}; | |
static const unsigned char pomme[] PROGMEM = { | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x18, 0x00, 0x00, | |
0x00, 0xf8, 0x1f, 0x1c, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x0e, 0x00, 0x00, | |
0x00, 0xf0, 0x7f, 0x07, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x03, 0x00, 0x00, | |
0x00, 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, | |
0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xbf, 0xff, 0x07, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, | |
0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x01, | |
0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, | |
0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, | |
0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, | |
0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, | |
0xc0, 0xff, 0xff, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x01, | |
0x80, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, | |
0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, | |
0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x1f, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, | |
0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x06, 0x50, 0x00, 0x00, | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 | |
}; | |
static const unsigned char poire[] PROGMEM = { | |
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xfc, 0x00, 0x00, | |
0x00, 0x00, 0xb8, 0xff, 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x07, 0x00, | |
0x00, 0x00, 0xf8, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x70, 0xff, 0x1f, 0x00, | |
0x00, 0x00, 0x70, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x60, 0xf8, 0x7f, 0x00, | |
0x00, 0x00, 0x60, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, | |
0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, | |
0x00, 0x80, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, | |
0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, | |
0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, | |
0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x3f, 0x00, 0x00, | |
0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x3f, 0x00, 0x00, | |
0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, | |
0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, | |
0x00, 0xe0, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x03, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x07, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x07, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, | |
0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x0f, 0x00, | |
0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00, | |
0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x03, 0x00, | |
0x00, 0xf0, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, | |
0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00 | |
}; | |
String quelleImage; | |
/* La fonction construitPage retourne un string qui contient toute notre page web */ | |
String construitPage() { | |
String str1, str2, str3, str4; | |
if (quelleImage == "fraise") { | |
str1 = "checked"; | |
} | |
if (quelleImage == "pomme") { | |
str2 = "checked"; | |
} | |
if (quelleImage == "poire") { | |
str3 = "checked"; | |
} | |
if (quelleImage == "banane") { | |
str4 = "checked"; | |
} | |
String page = "<html lang=fr-FR><head>"; | |
page += "<title>ESP et écran Nokia</title>"; | |
page += "<style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }</style>"; | |
page += "</head><body><h1>ESP et Écran Nokia</h1>"; | |
page += "<p>Choisir l'image à afficher:</p>"; | |
page += "<form action='/' method='POST'>"; | |
page += "<p><INPUT type='radio' name='image' value='fraise' " + str1 + ">fraise</p>"; | |
page += "<INPUT type='radio' name='image' value='pomme' " + str2 + ">pomme</p>"; | |
page += "<INPUT type='radio' name='image' value='poire' " + str3 + ">poire</p>"; | |
page += "<INPUT type='radio' name='image' value='banane' " + str4 + ">banane</p>"; | |
page += "<INPUT type='submit' value='Appliquer'><br><br>"; | |
page += "</body></html>"; | |
return page; | |
} | |
/* La fonction gestionPage affiche l'image appropriée | |
quand le bouton Appliquer a été cliqué. */ | |
void gestionPage() { | |
quelleImage = server.arg("image"); | |
afficheImage(); | |
server.send ( 200, "text/html", construitPage() ); | |
} | |
/* Affichage de la bonne image sur l'écran Nokia */ | |
void afficheImage() { | |
u8g2.clearBuffer(); // on efface ce qui se trouve déjà dans le buffer | |
if (quelleImage == "banane") { | |
u8g2.drawXBMP( 18, 0, 48, 48, banane); // position, largeur, hauteur | |
} | |
if (quelleImage == "fraise") { | |
u8g2.drawXBMP( 18, 0, 48, 48, fraise); // position, largeur, hauteur | |
} | |
if (quelleImage == "pomme") { | |
u8g2.drawXBMP( 18, 0, 48, 48, pomme); // position, largeur, hauteur | |
} | |
if (quelleImage == "poire") { | |
u8g2.drawXBMP( 18, 0, 48, 48, poire); // position, largeur, hauteur | |
} | |
u8g2.sendBuffer(); // l'image qu'on vient de construire est affichée à l'écran | |
} | |
void setup() { | |
u8g2.begin(); // initialisation de l'écran Nokia | |
u8g2.enableUTF8Print(); //nécessaire pour écrire des caractères accentués | |
u8g2.setFont(u8g2_font_6x10_tf); // choix de la police | |
// message de bienvenue | |
u8g2.clearBuffer(); | |
u8g2.setCursor(5, 15); // position du début du texte | |
u8g2.print("Connexion au"); // on écrit le texte | |
u8g2.setCursor(5, 35); // position du début du texte | |
u8g2.print("réseau WiFi"); // on écrit le texte | |
u8g2.sendBuffer(); | |
WiFi.mode(WIFI_STA); | |
// initialisation de la communication WiFi | |
WiFi.begin ( ssid, password ); | |
while ( WiFi.status() != WL_CONNECTED ) { | |
delay ( 500 ); | |
} | |
// On indique le nom de la fonction qui gère l'interraction avec la page web | |
server.on ( "/", gestionPage ); | |
server.begin(); | |
// affichage de l'adresse IP | |
u8g2.clearBuffer(); | |
u8g2.setCursor(5, 15); // position du début du texte | |
u8g2.print("Adresse IP:"); // on écrit le texte | |
u8g2.setCursor(5, 35); // position du début du texte | |
u8g2.print(WiFi.localIP()); // on écrit le texte | |
u8g2.sendBuffer(); | |
} | |
void loop() { | |
server.handleClient(); | |
} |
Pour produire les données bitmap
Pour obtenir les données qui définissent chacune des 4 illustrations, j'ai ouvert chaque image (qui était, au départ, un fichier de type .png) au moyen du logiciel GIMP. Puisque la résolution de l'écran est de 84 X 48 pixels, je les ai redimensionnées au format 48 X 48 pixels (menu Image / Échelle et taille de l'image...) avant de les exporter en format .xbm (menu Fichier / Exporter sous...).
J'ai ensuite ouvert le fichier .xbm au moyen d'un éditeur de texte, et recopié les données dans mon sketch.
À lire également
Quelques tutos expliquent comment utiliser d'autres types d'afficheurs avec un ESP32 ou un ESP8266: écran couleur SPI ST7735, écran OLED i2c SH1106 , afficheur LCD 16 X 2 et afficheur 7 segments à base de TM1638.
Quant à l'écran Nokia 5110, voyez comment l'utiliser avec un Raspberry Pi, avec un Arduino ou encore avec un MSP430 Launchpad,
Yves Pelletier (Twitter, Facebook)