Outils pour utilisateurs

Outils du site


raspberry_pi_pico:micropython:ssd1306

SSD1306

Étude réalisée avec afficheur OLED 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