0,96 OLED Display I2C - FR
0,96 OLED Display I2C - FR
0,96 OLED Display I2C - FR
Nous vous remercions d'avoir acheté notre écran AZ-Delivery OLED I2C
de 0,96 pouce. Dans les pages suivantes, vous apprendrez à utiliser et à
configurer cet appareil pratique.
Amusez-vous bien !
-1-
Sommaire
Introduction 3
Caractéristiques 4
L'adresse I2C de l'écran OLED 5
Le brochage 6
Comment configurer l'IDE Arduino 7
Comment configurer le Raspberry Pi et Python 11
Connexion de l'écran avec le microcontrôleur 12
Bibliothèque pour Arduino IDE 13
Exemple de croquis 14
Connexion de l'écran avec le Raspberry Pi 25
Activation de l'interface I2C 26
Bibliothèques et outils pour Python 27
Script Python 31
-2-
Introduction
OLED signifie "Organic Light Emitting Diodes" (diodes
électroluminescentes organiques). Les écrans OLED sont des réseaux
de LEDs empilées ensemble dans une matrice. L'écran OLED de 0,96
pouce comporte 128x64 pixels (LED). Pour contrôler ces LED, nous
avons besoin d'un circuit de pilotage ou d'une puce. L'écran possède
une puce pilote appelée SSD1306. La puce pilote possède une interface
I2C pour communiquer avec le microcontrôleur principal. L'adresse I2C
d'une puce pilote est prédéfinie, avec la valeur 0x3C.
Les performances de ces écrans sont bien meilleures que celles des
écrans LCD traditionnels. La communication I2C simple et la faible
consommation d'énergie les rendent plus adaptés à une variété
d'applications.
-3-
Caractéristiques
-4-
L'adresse I2C de l'écran OLED
Tous les écrans OLED proposés par AZ-Delivery ont la même adresse
série, 0x3C. L'écran de 0,96 pouce vous offre la possibilité de ressouder
une résistance à l'arrière de la carte de l'écran pour une autre adresse,
0x3D, mais ce n'est pas recommandé. Dans le cas où plusieurs écrans
avec une interface I2C doivent être utilisés, il est recommandé d'utiliser
un multiplexeur I2C ou simplement un écran plus grand.
-5-
-6-
Le pinout
L'écran OLED de 0,96 pouce possède quatre broches. Le brochage est
montré sur l'image suivante :
L'écran est doté d'un régulateur de tension de 3,3 V intégré. Les broches
de l'écran OLED de 0,96 pouce peuvent être connectées à une
alimentation de 3,3V ou de 5V sans danger pour l'écran lui-même.
-7-
Comment configurer l'IDE Arduino
-8-
Pour les utilisateurs de Linux, téléchargez un fichier portant l'extension
.tar.xz, qui doit être extrait. Lorsqu'il est extrait, allez dans le répertoire
extrait et ouvrez le terminal dans ce répertoire. Deux scripts .sh doivent
être exécutés, le premier appelé arduino-linux-setup.sh et le second
appelé install.sh.
-9-
Presque tous les systèmes d'exploitation sont livrés
avec un éditeur de texte préinstallé (par exemple,
Windows est livré avec Notepad, Linux Ubuntu avec
Gedit, Linux Raspbian avec Leafpad, etc.) Tous ces
éditeurs de texte conviennent parfaitement à l'objectif
de l'eBook.
-10-
-11-
Si l'Arduino IDE est utilisé sous Windows, les noms des
ports sont les suivants :
-12-
Comment configurer le Raspberry Pi et Python
-13-
Connexion de l'écran avec le microcontrôleur
Connectez l'écran OLED de 0,96 pouce au microcontrôleur comme
indiqué sur le schéma de connexion suivant :
-14-
Bibliothèque pour l'IDE Arduino
Pour utiliser l'écran avec le microcontrôleur, il est recommandé de
télécharger une bibliothèque externe pour celui-ci. La bibliothèque qui
est utilisée dans cet eBook est appelée U8g2. Pour la télécharger et
l'installer, ouvrez l'IDE Arduino et allez sur :
Outils > Gérer les bibliothèques.
Lorsqu'une nouvelle fenêtre s'ouvre, tapez u8g2 dans la boîte de
recherche et installez la bibliothèque U8g2 réalisée par Oliver, comme le
montre l'image suivante :
-15-
Exemple de croquis
#include <U8g2lib.h>
#include <Wire.h>
#define time_delay 2000
U8G2_SSD1306_128X64_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
-16-
void u8g2_string_orientation() {
u8g2.setFontDirection(0);
u8g2.drawStr(5, 15, "0");
u8g2.setFontDirection(3);
u8g2.drawStr(40, 25, "90");
u8g2.setFontDirection(2);
u8g2.drawStr(75, 15, "180");
u8g2.setFontDirection(1);
u8g2.drawStr(100, 10, "270");
}
void u8g2_line() {
u8g2.drawStr(0, 0, "drawLine");
u8g2.drawLine(7, 20, 77, 32);
}
void u8g2_triangle() {
u8g2.drawStr(0, 0, "drawTriangle");
u8g2.drawTriangle(14, 20, 45, 30, 10, 32);
}
void u8g2_unicode() {
u8g2.drawStr(0, 0, "Unicode");
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
u8g2.drawUTF8(10, 20, "☀");
-17-
#define image_width 128
#define image_height 21
static const unsigned char image_bits[] U8X8_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,
0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfe, 0x1f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x18, 0x00, 0x00,
0x0c, 0xc0, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x18, 0x00, 0x00, 0x0c, 0xc0, 0xf0, 0x1f, 0x06, 0x63, 0x80, 0xf1,
0x1f, 0xfc, 0x33, 0xc0, 0x03, 0x18, 0x00, 0x00, 0x0c, 0xc0, 0xf8, 0x3f,
0x06, 0x63, 0xc0, 0xf9, 0x3f, 0xfe, 0x33, 0xc0, 0x03, 0x18, 0x00, 0x00,
0x0c, 0xc0, 0x18, 0x30, 0x06, 0x63, 0xc0, 0x18, 0x30, 0x06, 0x30, 0xc0,
0xff, 0xff, 0xdf, 0xff, 0x0c, 0xc0, 0x18, 0x30, 0x06, 0x63, 0xe0, 0x18,
0x30, 0x06, 0x30, 0xc0, 0xff, 0xff, 0xdf, 0xff, 0x0c, 0xc0, 0x98, 0x3f,
0x06, 0x63, 0x60, 0x98, 0x3f, 0x06, 0x30, 0xc0, 0x03, 0x18, 0x0c, 0x00,
0x0c, 0xc0, 0x98, 0x1f, 0x06, 0x63, 0x70, 0x98, 0x1f, 0x06, 0x30, 0xc0,
0x03, 0x18, 0x06, 0x00, 0x0c, 0xc0, 0x18, 0x00, 0x06, 0x63, 0x38, 0x18,
0x00, 0x06, 0x30, 0xc0, 0x03, 0x18, 0x03, 0x00, 0x0c, 0xe0, 0x18, 0x00,
0x06, 0x63, 0x1c, 0x18, 0x00, 0x06, 0x30, 0xc0, 0x00, 0x80, 0x01, 0x00,
0xfc, 0x7f, 0xf8, 0x07, 0x1e, 0xe3, 0x0f, 0xf8, 0x07, 0x06, 0xf0, 0xcf,
0x00, 0xc0, 0x00, 0x00, 0xfc, 0x3f, 0xf0, 0x07, 0x1c, 0xe3, 0x07, 0xf0,
0x07, 0x06, 0xe0, 0xcf, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe0, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0xfc, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f };
-18-
void u8g2_bitmap() {
u8g2.drawXBMP(0, 5, image_width, image_height, image_bits);
}
void setup(void) {
u8g2.begin();
u8g2_prepare();
}
float i = 0.0;
void loop(void) {
u8g2.clearBuffer();
u8g2_prepare();
u8g2_box_frame();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_disc_circle();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_r_frame_box();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_prepare();
u8g2_string_orientation();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_line();
u8g2.sendBuffer();
delay(time_delay);
-19-
// one tab
u8g2.clearBuffer();
u8g2_triangle();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_prepare();
u8g2_unicode();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2_bitmap();
u8g2.sendBuffer();
delay(time_delay);
u8g2.clearBuffer();
u8g2.setCursor(0, 0);
u8g2.print(i);
i = i + 1.5;
u8g2.sendBuffer();
delay(time_delay);
}
-20-
Au début du sketch, deux bibliothèques sont importées : U8g2lib et Wire.
Ensuite, un objet appelé u8g2 est créé, avec la ligne de code suivante :
U8G2_SSD1306_128X64_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
Après cela, la fonction appelée u8g2_prepare() est créée, qui n'a pas
d'arguments et ne renvoie aucune valeur. Dans cette fonction, cinq
fonctions de la bibliothèque u8g2 sont utilisées.
-21-
La troisième fonction est appelée setDrawColor() qui a un argument et ne
renvoie aucune valeur. La valeur de l'argument est un nombre entier qui
représente un indice de couleur pour toutes les fonctions de dessin. Les
procédures de dessin de fontes utilisent cet argument pour définir la
couleur de premier plan. La valeur par défaut est 1. Si elle est fixée à 0,
alors l'espace autour du caractère est éclairé, et le caractère ne l'est pas.
La valeur 2 de l'argument peut également être utilisée, mais il n'y a pas
de différence avec 0.
-22-
La fonction appelée drawStr() possède trois arguments et ne renvoie
aucune valeur. Elle est utilisée pour afficher une chaîne de caractères
constante à l'écran. Les deux premiers arguments représentent la position
X et Y du curseur, où le texte est affiché. Le troisième argument
représente le texte lui-même, une valeur de chaîne constante. Il convient
d'utiliser les fonctions qui définissent la disposition du texte avant d'utiliser
la fonction drawStr(), sinon la fonction drawStr() utilise les paramètres par
défaut pour la fonte, la taille et la disposition générale du texte.
Pour afficher les formes, on utilise des fonctions spécifiques pour chaque
forme :
-23-
La fonction appelée drawBox() possède quatre arguments et ne renvoie
aucune valeur. Elle est utilisée pour afficher un rectangle rempli. Les deux
premiers arguments représentent la position X et Y du coin supérieur
gauche du rectangle. Les deux autres arguments représentent la largeur
et la hauteur du rectangle, respectivement.
-24-
La fonction appelée drawTriangle() possède six arguments et ne renvoie
aucune valeur. Elle est utilisée pour afficher un triangle rempli. Les deux
premiers arguments représentent la position X et Y du premier point
d'angle du triangle. Les deux seconds arguments représentent les
positions X et Y du second point d'angle du triangle. Les deux derniers
arguments représentent les positions X et Y du dernier point d'angle du
triangle.
-25-
const char COPYRIGHT_SYMBOL[] = {0xa9, '\0'}
u8g2.drawUTF8(95, 20, COPYRIGHT_SYMBOL); //COPYRIGHT SYMBOL
-26-
La troisième façon d'utiliser la fonction est
d'utiliser un nombre hexadécimal pour le caractère lui-
même, comme dans la ligne de code suivante :
u8g2.drawUTF8(115, 15, "\xb0"); // DEGREE SYMBOL
-27-
Connexion de l'écran avec Raspberry Pi
Connectez l'écran avec le Raspberry Pi comme indiqué sur le schéma
de connexion suivant :
-28-
Activation de l'interface I2C
Afin d'utiliser l'écran avec Raspberry Pi, l'interface I2C doit être activée.
Ouvrez le menu suivant :
Application Menu > Preferences > Raspberry Pi Configuration
-29-
Bibliothèques et outils pour Python
Afin d'utiliser l'écran avec le Raspberry Pi, il est recommandé de
télécharger et d'installer une bibliothèque externe. La bibliothèque qui
sera utilisée s'appelle Adafruit_Python_SSD1306.
Avant d'installer la bibliothèque principale, il faut d'abord installer
plusieurs outils et bibliothèques.
La liste suivante énumère les outils qui doivent être présents sur le
système : python3-dev, python-imaging, python3-pil,
python3-pip, python3-setuptools, python3-rpi.gpio
-30-
Afin de télécharger la bibliothèque, le git doit être
installé. Si le git n'est pas présent sur le système,
l'installation peut être faite avec les commandes
suivantes :
sudo apt install -y git
-31-
Avant d'utiliser un dispositif connecté à l'interface
I2C, l'adresse I2C doit d'abord être détectée. Pour
détecter l'adresse I2C de l'écran, la commande suivante
doit être exécutée dans le terminal : i2cdetect -y 1
-32-
Il y a plusieurs exemples de scripts fournis avec la
bibliothèque, naviguez dans le répertoire :
/Adafruit_Python_SSD1306/examples
en exécutant la commande suivante :
cd ~/Adafruit_Python_SSD1306/examples
-33-
Python script
import time
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None)
disp.begin()
disp.clear()
disp.display()
image = Image.new('1', (disp.width, disp.height))
draw = ImageDraw.Draw(image)
padding = 2
shape_width = 20
top = padding
bottom = disp.height - padding
print('Drawing a ellipse')
x = padding
draw.ellipse((x, top , x + shape_width, bottom),
outline=255, fill=0)
time.sleep(0.2)
-34-
# two tabs
print('Drawing a rectangle')
x += shape_width + padding
draw.rectangle((x, top, x + shape_width, bottom),
outline=255, fill=0)
time.sleep(0.2)
print('Drawing a triangle')
x += shape_width + padding
draw.polygon([(x, bottom), (x + shape_width / 2, top),
(x + shape_width, bottom)], outline=255, fill=0)
time.sleep(0.2)
print('Printing text')
x += shape_width + padding
my_font = ImageFont.load_default() # Load default font.
draw.text((x, top), 'AZ', font=my_font,
fill=255)
draw.text((x, top + 20), 'DLVRY', font=my_font,
fill=255)
time.sleep(0.2)
disp.image(image)
disp.display()
time.sleep(1)
-35-
# two tabs
print()
disp.clear()
disp.display()
except KeyboardInterrupt:
print('\nScript end!')
finally:
disp.clear()
disp.display()
-36-
Enregistrez le script sous le nom de "OLED.py". Pour exécuter le script,
ouvrez le terminal dans le répertoire où le script est enregistré et exécutez
la commande suivante : python3 OLED.py
-37-
Le script commence par l'importation de plusieurs bibliothèques et
fonctions.
Ensuite, un objet appelé disp est créé avec la ligne de code suivante :
disp = Adafruit_SSD1306.SSD1306_128_64(rst=None)
L'objet disp représente l'écran lui-même et cet objet est utilisé pour
envoyer des commandes à l'écran.
Pour créer une image, il faut d'abord créer une image vide aux dimensions
de l'écran. Cela se fait avec la ligne de code suivante :
image = Image.new('1', (disp.width, disp.height))
Ensuite, avec cet objet image, on crée l'objet draw, qui est utilisé pour
dessiner des formes : draw = ImageDraw.Draw(image)
-38-
Le bloc de code except qui s'exécute lorsque on appuie
sur CTRL + C sur le clavier. C'est ce qu'on appelle une
interruption de clavier et elle est utilisée pour
mettre fin au script. Lorsque ce bloc de code est
exécuté, le message Script end! s'affiche dans le
terminal.
-39-
L'argument outline représente la couleur du bord de la
forme et l'argument fill représente la couleur de la
forme elle-même. Comme les écrans OLED sont utilisés,
les couleurs sont le noir et le blanc, le noir - le
pixel est éteint (OFF), et le blanc - le pixel est
allumé (ON). Lorsque la valeur zéro est enregistrée
dans l'argument outline ou fill, cela signifie qu'il
s'agit d'une couleur noire. Lorsque toute autre valeur
supérieure à zéro est enregistrée, par exemple 255,
cela représente une couleur blanche.
-40-
argument est l'argument de contour, et le troisième
argument est l'argument de contenu.
-41-
éléments, qui représentent les positions X et Y du
curseur où le texte est affiché. Le deuxième argument
représente le texte lui-même, (une valeur de chaîne).
Le troisième argument est l'argument police, et le
quatrième argument est l'argument remplissage.
L'argument police représente la police utilisée. Pour
définir la valeur de l'argument police, la ligne de
code suivante est utilisée avec une police de
bibliothèque par défaut : font =
ImageFont.load_default()
Il est possible d'utiliser d'autres polices, mais cela
n'est pas abordé dans cet eBook.
-42-
Raspberry Pi, AZ-Delivery Vertriebs GmbH est
l'entreprise idéale pour vous les procurer. Vous
recevrez de nombreux exemples d'application, des guides
d'installation complets, des livres électroniques, des
bibliothèques et l'assistance de nos experts
techniques.
https://az-delivery.de
Amusez-vous !
Mentions légales
https://az-delivery.de/pages/about-us
-43-