MicroPython: Afficheur OLED avec connecteur NCD (National Control Device)

Bonjour à tous,

Nous finissons la découverte du matériel NCD (et pilotes MicroPython) par l'écran OLED proposé par National Control Device et son super connecteur.
afficheur OLED de National Control Device

Nous avons déjà un pilote SSD1306 avec documentation (produit par MicroPython.org) mais cette fois, nous avons poussé l'exploration un peu plus loin pour afficher des images chargée depuis le système de fichier :-)

NCD-OLED et Pyboard
Une fois de plus, nous avons utilisé le même schéma adaptateur (que l'article sur la mesure de courant) pour brancher l'écran OLED.
source: Interface NCD (5V logic) sur MicroPython Pyboard
Et le branchement de l'OLED est en "Plug-and-Play" !

Brancher l'écran OLED SSD1306 de NCD (National Control Device) sur la Pyboard.
Compatilité Pyboard
Comme déjà précisé, MicroPython.org propose un pilote SSD1306 (j'ai testé la version pour MicroPython 1.10) qui fonctionne du tonnerre avec des ESP8266 sous MicroPython.
Côté matériel, c'est extra... par contre, j'ai eu plus de difficultés sur la Pyboard!

Figurez vous que le pilote SSD1306 utilise des "start/stop conditions" sur le bus I2C (combinaisons spéciales de SDA et SCL) et que le pilote doit donc pouvoir forcer les niveaux haut et bas sur le bus.
Du coup, il faut créer l'instance du bus I2C en mentionnant les broches en contrôle push-pull (OUT_PP).

Hors de question de faire un : i2c = I2C(2) !!!!
La bonne approche est la suivante:

# Equivalent de I2C(2) mais avec des broches en Push-Pull
pscl = Pin('Y9', Pin.OUT_PP)
psda = Pin('Y10', Pin.OUT_PP)
i2c = I2C(scl=pscl, sda=psda)
lcd = ssd1306.SSD1306_I2C( 128, 64, i2c )

Cela a bien faillit me faire devenir chèvre!


Bon... plus sérieusement, le code de test permet de charger des fichier bitmap portable (PBM).

La beauté dans tout cela réside c'est qu'il ne faut pas inclure les images dans les ressources du programme, il suffit de copier les fichiers 'ncd-mch.pbm' et
'upy-logo.pbm' dans le système de fichier de la carte MicroPython.

from machine import I2C, Pin
import ssd1306
import framebuf
import time

# --- PYBOARD ---
# Attention: Il faut absolument avoir des broches en Push-Pull (OUT_PP) sur
# le bus I2C pour que le pilote fonctionne correctement
#
pscl = Pin('Y9', Pin.OUT_PP)
psda = Pin('Y10', Pin.OUT_PP)
i2c = I2C(scl=pscl, sda=psda)
lcd = ssd1306.SSD1306_I2C( 128, 64, i2c )

lcd.fill(1) # Rempli l'écran en blanc
lcd.show()  # Afficher!

while True:
 # Code inspired from twobitarcade.net
 #   https://www.twobitarcade.net/article/displaying-images-oled-displays/
 with open('ncd-mch.pbm', 'rb' ) as f:
  f.readline() # Magic number    P4 for pbm (Portable Bitmap)
  f.readline() # Creator comment
  f.readline() # Dimensions
  data = bytearray(f.read())

 fbuf = framebuf.FrameBuffer(data, 128, 64, framebuf.MONO_HLSB)
 lcd.invert(1)
 lcd.blit(fbuf, 0, 0)
 lcd.show()

 time.sleep(3)

 with open('upy-logo.pbm', 'rb' ) as f:
  f.readline() # Magic number    P4 for pbm (Portable Bitmap)
  f.readline() # Creator comment
  f.readline() # Dimensions
  data = bytearray(f.read())

 fbuf = framebuf.FrameBuffer(data, 128, 64, framebuf.MONO_HLSB)
 lcd.invert(1)
 lcd.blit(fbuf, 0, 0)
 lcd.show()

 time.sleep(3)

Ce qui nous offre un très beau résultat... même en monochrome.
Faire du MicroPython avec un afficheur OLED de National Control Device 
Ressource

Aucun commentaire