====== SSD1306 ======= Étude réalisée avec afficheur OLED SSD1306 {{ :raspberry_pi_pico:micropython:ssd1306_i2c.png |}} ===== 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 8x8 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()