L'ECRAN OLED SSD1306
L'écran OLED comporte un afficheur graphique ayant une diagonale de 3,3 cm pour une résolution de 128 X 64 pixels. Cet écran monochrome piloté par un circuit intégré SSD1306 permet d'afficher du texte, de dessiner des formes (traits, rectangles, cercles) et des images au format bitmap.
Ce module fonctionnant sous 3,3 à 5V, communique grâce à une liaison I2C et peut être programmé facilement par des fonctions contenues dans les bibliothèques Adafruit_SSD1306 téléchargeable ici et Adafruit_GFX téléchargeable ici.
Image2cpp, utilitaire présent ici, convertit les images au format bmp en une chaîne de caractères exploitables par le programme Arduino. Cet utilitaire permet de :
-
modifier la taille en pixel de l'image d'origine
-
ajuster le niveau de luminosité des pixels
-
inverser le fond d'écran (blanc ou noir)
-
de centrer horizontalement et/ou verticalement l'image
-
générer le code Arduino
Image2cpp est compatible avec toutes sortes d'afficheurs quelque soit leur résolution.
Les principales fonctions des deux bibliothèques sont :
-
Adafruit_SSD1306 afficheur(OLED_RESET) permet d'initialiser l'objet afficheur, OLED_RESET étant la broche de reset du driver SSD1306.
-
display() actualise l'affichage après l'envoi des commandes d'affichage.
-
clearDisplay() efface l'écran.
-
invertDisplay(valeur) inverse l'affichage avec valeur égale à 0 ou 1.
-
drawPixel(X, Y, couleur) dessine un point de coordonnées (X,Y) avec la couleur noire (0) ou blanche (1).
-
drawLine(X0, Y0, X1, Y1, couleur) dessine une ligne du point de coordonnées (X0,Y0) au point de coordonnées (X1, Y1) avec la couleur noire (0) ou blanche (1).
-
drawRect(X, Y, L, H, couleur) dessine un rectangle à partir du point de coordonnées (X,Y) avec une largeur L, une hauteur H et avec la couleur noire (0) ou blanche (1).
-
fillRect(X, Y, L, H, couleur) dessine un rectangle plein à partir du point de coordonnées (X,Y) avec une largeur L, une hauteur H et avec la couleur noire (0) ou blanche (1).
-
drawCircle(X, Y, R, couleur) dessine un cercle à partir du point de coordonnées (X,Y) avec un rayon R et avec la couleur noire (0) ou blanche (1).
-
fillCircle(X, Y, R, couleur) dessine un cercle plein à partir du point de coordonnées (X,Y) avec un rayon R et avec la couleur noire (0) ou blanche (1).
-
drawRoundRect(X, Y, L, H, R, couleur) dessine un rectangle avec un arrondi de rayon R à partir du point de coordonnées (X,Y) avec une largeur L, une hauteur H et avec la couleur noire (0) ou blanche (1).
-
fillRoundRect(X, Y, L, H, R, couleur) dessine un rectangle plein avec un arrondi de rayon R à partir du point de coordonnées (X,Y) avec une largeur L, une hauteur H et avec la couleur noire (0) ou blanche (1).
-
drawTriangle(X0, Y0, X1, Y1, X2, Y2, couleur) dessine un triangle dont les sommets sont situés aux points de coordonnées (X0,Y0), (X1,Y1) et (X2,Y2)et avec la couleur noire (0) ou blanche (1).
-
fillTriangle(X0, Y0, X1, Y1, X2, Y2, couleur) dessine un triangle dont les sommets sont situés aux points de coordonnées (X0,Y0), (X1,Y1) et (X2,Y2)et avec la couleur noire (0) ou blanche (1).
-
drawBitmap(X, Y, image, L, H, couleur) dessine une image à partir du point de coordonnées (X,Y) avec une largeur L, une hauteur H et avec la couleur noire (0) ou blanche (1).
-
setTextSize(taille) définit la taille (0 à 5) des caractères.
-
setTextColor(couleur) définit la couleur (0 ou 1) des caractères.
-
setCursor(X, Y) définit la position (X,Y) des caractères.
-
print("Message") affiche le message.
-
println("Message") affiche le message puis le curseur est positionné au début de la ligne suivante.
Exemple :
Nous souhaitons afficher une image et un texte.
Liste du matériel :
-
1 Arduino Uno
-
1 plaquette d'essai
-
1 écran SSD1306
Câblage :
Programme :
/* SSD1306 est un programme qui affiche l'image I Love et le texte ARDUINO */
// Appel des bibliothèques
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 afficheur(OLED_RESET); // création de l'objet afficheur
// code de l'image 'love', 64x32px
const unsigned char love [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xf0, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x7f, 0xfc, 0xff, 0xf8, 0x00,
0x00, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00,
0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x3f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x00,
0x00, 0x03, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0x00,
0x00, 0x01, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0x00,
0x00, 0x00, 0xfe, 0x7f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xff, 0xff, 0xe0, 0x00,
0x00, 0x00, 0x7f, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0x03, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x3f, 0x90, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x3f, 0xf0, 0x00, 0x00,
0x00, 0x00, 0xff, 0xfc, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x03, 0x00, 0x00, 0x00,
0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup()
{
afficheur.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialisation de l'objet afficheur
afficheur.clearDisplay(); // effacement de l'écran
afficheur.setTextSize(2); // choix de la taille des caractères
afficheur.setTextColor(1); // caractères en blanc
afficheur.setCursor(43,19); // positionnement du curseur
afficheur.print("ARDUINO"); // affichage de ARDUINO
afficheur.drawBitmap(0, 0, love, 64, 32, 1); // affichage de l'image love
afficheur.display(); // validation
}
void loop()
{
}