MICROPYTHON-MOD-OLED
Introduction
En cours de traduction/élaboration. |
Matériel utilisé
Pour réaliser ce test, nous avons utilisé:
Description | Quantité | |
ESP8266-EVB |
ESP8266 Evaluation Board d'Olimex disponible ici chez MCHobby |
1 |
MOD-IO |
Carte MOD-IO d'Olimex disponible ici chez MCHobby |
1 |
UEXT-SPLITTER |
Multiplicateur de port UEXT. Permettra de brancher la carte + Interface USB-Serie disponible ici chez MCHobby |
1 |
USB-SERIE-TTL |
Un cable console pour pouvoir communiquer avec l'ESP8266 disponible ici chez MCHobby |
1 |
Raccordements
Les raccordements sont effectués comme suit:
Fichier:MICROPYTHON-MOD-OLED-20.png
Attention: ne pas appliquer plus de 5V sur la carte d'évaluation ESP8266-EVB |
Le raccordement du convertisseur USB-Série est identique à celui décrit dans le tutoriel ESP8266-DEV sous MicroPython.
Etant donné que le l'ESP8266-DEV (et donc ESP8266-EVB) ne disposent pas de convertisseur USB-Série, il sera donc nécessaire d'utiliser un câble console (USB-Série-TTL) pour communiquer avec la carte ESP8266.
Flasher MicroPython
Pour flasher MicroPython sur l'ESP8266-DEV (module ESP8266) qui équipe la carte d'évaluation d'Olimex (ESP8266-EVB), nous vous proposons les lectures suivantes:
Utiliser MicroPython sur ESP8266 nécessite de Flasher le MicroContrôleur avec le Firmware et d'utiliser des outils appropriés pour communiquer avec lui. Vous trouverez ci-dessous une sélection de tutoriel pour vous préparer. Nous recommandons vivement l'usage de RSHell, même si Ampy reste une solution plus simpliste (mais aussi nettement plus limitée).
Apprenez comment charger le Firmware MicroPython sur une carte Pyboard, ESP8266 (Feather, Wemos, NodeMcu), etc.
Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.
Outil simplifié de transfert de fichiers et de contrôlez de carte depuis une connexion série. ESP8266 compatible.
RShell sur ESP8266
Une petite pointe de rappel pour l'utilisation des ESP8266 avec RShell...
Il est impératif de réduire la taille du buffer à 128 octets sur un ESP8266 sinon vous risquez d'écraser le système de fichier votre ESP8266... auquel cas il faudra reflasher votre carte |
rshell --port /dev/ttyUSB0 --baud 115200 --buffer-size 128 --editor nano
Nous avons également un petit script shell rsheel-esp8266.sh pour faciliter faciliter le démarrage de rshell pour un esp8266.
Installer la bibliothèque
Cette bibliothèque est un pilote SSD1306 I2C et SPI (MicroPyhton GitHub) pour écran OLED ssd1306 pouvant être utilisé avec MicroPython.
L'utilisation de ce pilote requière l'installation d'une bibliothèque spécifique. Vous la trouverez ici:
Le pilote pour bus I2C utilise l'adresse 0x3c par défaut.
Vous devrez copier les fichiers suivant sur votre carte MicroPython
- ssd1306.py dans le répertoire racine.
Pour savoir comment copier vos fichiers sur votre carte MicroPython, vous pouvez vous référer aux ressources suivantes:
Outil simplifié de transfert de fichiers et de contrôlez de carte depuis une connexion série. ESP8266 compatible.
Transférez des fichiers et contrôlez votre carte depuis une simple connexion série. ESP8266 compatible.
Puis utiliser le code suivant pour faire fonctionner votre interface. Tester le code dans une session REPL ou WebREPL.
Utiliser
Pour tester la bibliothèque, il faut créer une instance du pilote SSD1306.
Celle-ci sera stockée dans le variable lcd. Voir la section "Créer lcd" correspondant à votre cas de figure puis poursuivre dans la section "Tester lcd".
Détecter l'adresse I2C
Si vous ne connaissez pas l'adresse I2C utilisé par votre écran OLED, vous pouvez faire un scan du bus I2C.
from machine import Pin, I2C
i2c = I2C( sda=Pin(2), scl=Pin(4) )
i2c.scan()
Ce qui produit le résultat suivant correspondant à 0x3C dans le cas du module OLED:
[60]
Créer LCD
pour Module MOD-OLED-128x64
Fichier:MICROPYTHON-OLED-10b.png
from machine import Pin, I2C
i2c = I2C( sda=Pin(2), scl=Pin(4) )
import ssd1306
lcd = ssd1306.SSD1306_I2C( 128, 64, i2c )
Tester la bibliothèque
Dans les exemples ci-dessous, voici les paramètres que vous retrouverez dans les différents appels de fonction:
- x : position du point par rapport au côté gauche de l'écran.
- y : position du point par rapport au dessus de l'écran.
- w : largeur (du mot Width).
- h : hauteur (du mot Height).
- c : couleur (1=point allumé, 0=point éteint)
Remplir
Remplir un écran ou un rectangle de point blanc (allume tous les Pixels) ou points noir (éteint les pixels).
lcd.fill(1) # Rempli l'écran en blanc
lcd.show() # Afficher!
# Remplis un rectangle en noir
# fill_rect( x, y, w, h, c )
lcd.fill_rect( 10,10, 20, 4, 0 )
lcd.show() # Afficher!
Autres méthodes
Exemple : dessiner une image
from machine import Pin, I2C
import time
i2c = I2C( sda=Pin(2), scl=Pin(4) )
import ssd1306
lcd = ssd1306.SSD1306_I2C( 128, 64, i2c )
lcd.fill( 0 )
lcd.show()
# a: Alpha Channel (pas dessiné)
a = None
FB_ICON = [
[a,a,1,1,1,1,1,1,1,1,1,1,1,1,1,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,a,a],
[a,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,a],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1],
[1,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1],
[1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,0,0,1],
[1,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,0,0,0,0],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[a,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,a],
[a,a,1,1,1,1,1,1,1,1,1,1,1,1,1,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,a,a] ]
def draw_icon( lcd, from_x, from_y, icon ):
for y, row in enumerate( icon ):
for x, color in enumerate( row ):
if color==None:
continue
lcd.pixel( from_x+x,
from_y+y,
color )
def randrange( max ):
assert max < 256
import urandom
r = urandom.getrandbits(8)
while r > max:
r = urandom.getrandbits(8)
return r
def random_icon( lcd, icon, count ):
range_x = lcd.width - len(icon[0])
range_y = lcd.height - len(icon)
for i in range( count ):
draw_icon( lcd,
randrange( range_x ),
randrange( range_y ),
icon
)
# affichage de 30 icones (avec canal Alpha )
lcd.fill( 0 )
for i in range( 8 ):
random_icon( lcd, FB_ICON, 1 )
lcd.show()
time.sleep( 2 )
lcd.fill( 0 )