raspberry_pi_pico:micropython:ssd1306
Table des matières
SSD1306
Branchement :
- GND > 0V
- VDD > 3.3V
- SCK > GP9
- SDA > GP8
Attention à ne pas se fier aux numéros des broches (ici 11 et 12).
Initialisation :
# import from machine import Pin, I2C from ssd1306 import SSD1306_I2C #initialisation i2c i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=200000) # la fréquence n'est pas obligatoire # initialisation oled oled = SSD1306_I2C(128, 64, i2c, 0x3C) # taille de l'écran 128x64 pix, addresse de l'afficheur 0x3C
Identification de l'adresse I2C de l'afficheur :
Dans l'inconnu, on peut utiliser i2c.scan pour identifier l'adresse.
print(i2c.scan())
Dans notre exemple la commande print retourne la valeur [60, 119] ⇒ l'adresse est 60 en décimal, soit 3C en hexadécimal.
Fonctions :
show :
rafraîchît l'affichage
oled.show()
invert :
Inverse l'affichage : noir sur fond blanc (0) ou (True), blanc sur fond noir (1) ou (False)
oled.invert(True) oled.invert(0)
Module framebuf :
Fonctions :
- blit : dessine un autre Framebuffer sur le framebuffer courant
- fill : rempli l'écran entier
- text : affiche un texte. Mono-police en 8×8 pixels
- pixel : affiche un pixel
- line : affiche une ligne
- hline : affiche une ligne horizontale
- vline : trace une ligne verticale
- rect : affiche un rectangle vide
- fill_rect : affiche un rectangle rempli
- scroll : défile le tableau de pixel
Initialisation :
from machine import Pin, I2C from ssd1306 import SSD1306_I2C import framebuf
fill :
oled.fill(1) permet d'afficher un écran tout blanc oled.fill(0) permet d'afficher un écran tout noir
text :
Affichage d'une chaîne de caractères avec la position x, y.
oled.fill(0) oled.text("Helllo !", 0, 0) oled. show()
pixel :
oled.pixel(20,20,1) # pos x (de 0 à 127), pos y (de 0 à 63) , blanc (1) oled.show()
Sur fond blanc on donne une couleur noir (0)
oled.fill(1) oled.pixel(20,20,0) # pos x, pos y, noir (0) oled.show()
line :
oled.line(0, 0, 127, 63, 1) # segment (A,B) : xA, yB, XB, yB en blanc (1) oled.show()
hline : vline :
oled.hline(10, 35, 50, 1) # xA, yA, longueur vers la droite en blanc oled.vline(35, 10, 50, 1) # xA, yA, longueur vers le bas en blanc oled.show()
rect / fill_rect :
oled.rect(10, 10, 50, 50, 1) # pos x, pos y, largeur, hauteur, blanc (1) oled.show()
Sur fond blanc on donne une couleur noir (0)
oled.fill(1) oled.rect(10, 10, 50, 50, 0) # 0 = noir (0) oled.show()
scroll :
from machine import Pin, I2C from ssd1306 import SSD1306_I2C import framebuf import time #initialisation i2c i2c = I2C(0, scl=Pin(9), sda=Pin(8)) # initialisation oled oled = SSD1306_I2C(128, 64, i2c, 0x3C) # Affichage d'un rectangle et scrolling oled.fill(0) oled.rect(10, 10, 50, 50, 1) oled.show() for x in range (64): oled.scroll(x, 0) # scrolling vers la droite time.sleep(0.01) # fréquence du scrolling oled.show()
Affichage d'un icone avec des pixels :
ICON = [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0], [ 0, 1, 1, 0, 0, 0, 1, 1, 0], [ 1, 1, 1, 1, 0, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1, 1, 1, 1], [ 1, 1, 1, 1, 1, 1, 1, 1, 1], [ 0, 1, 1, 1, 1, 1, 1, 1, 0], [ 0, 0, 1, 1, 1, 1, 1, 0, 0], [ 0, 0, 0, 1, 1, 1, 0, 0, 0], [ 0, 0, 0, 0, 1, 0, 0, 0, 0], ] for y, row in enumerate(ICON): for x, c in enumerate(row): oled.pixel(x+5, y+5, c) oled.show()
Affiche un logo en utilisant le buffer :
# Affiche un logo sous forme d un tableau d'octets de 32x32 buffer = None buffer = bytearray( b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xfc' b'\x00\x00\x1f\xfe\x00\x00\x01\xfe\x3f\xff\xfd\xfe\x60\x00\x05\x0e\x4f\xfe\x05\x0e\x5f\xf8\x05\xfe\x5f\x80\x05\xfe\x5e\x00\x05\x06' b'\x5c\x00\x05\xfe\x58\x00\x05\xfe\x50\x00\x05\xfe\x40\x00\x05\xfe\x40\x00\x05\xfe\x7f\xff\xfd\xfe\x7f\xff\xfd\xfe\x00\x18\x01\x3e' b'\x00\x18\x1f\x9e\x00\x18\x1f\x3e\x00\xfe\x1f\xfe\x03\xff\x9f\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ) # Charge le logo de 32 x 32 pixels dans le framebuffer avec Format de couleur monochrome fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB) # Envoie l'image du framebuffer vers l ecran à la position x = 50 et y = 24 oled.blit(fb, 48, 16) # affichage au centre de l'écran oled.show()
raspberry_pi_pico/micropython/ssd1306.txt · Dernière modification : 2023/02/27 20:39 de dan