Je me suis mis en tête de faire fonctionner un petit écran oled que j'avais déjà testé sur arduino, sur la carte micropython en SPI, histoire de faire fonctionner un premier hardware sur cette carte. |
J'ai pas mal cherché sur le web s'il y avait déjà eu des expériences du genre, mon but étant d'afficher du graphisme et pas seulement du texte.
J'ai quand même trouvé un super tutoriel de chez adafruit de Tonny Dicola qui se rapproche très fort de ce que je veux faire, celui ci fait référence au ESP8266, du coup un bon point pour la librairie en python, mais il existe des différences entre la pyboard 1.1 et l'ESP8266. Il va falloir vérifier quels sont les connectiques à faire entre la carte pyb et l'écran oled. L'écran oled que j'utilises étant différent de celui proposé dans le tutoriel.
Voici le matériel dont je dispose:
Ecran OLED I2C/SPI, 128x64 pixel
série 12864, 0.96 pouces,
module d'affichage SSD1306
|
Analyse de l'écran OLED:
Il existe plusieurs sortes d'écrans OLEDS avec différents annotations sur les pinouts. Cette version-ci est SPI et I2C. Sur les versions I2C seules, on trouvera 4 pinouts (VCC,GND,SDL,SDA). Les versions SPI ont d'autres sorties, parfois nommées différemment. Voici un tableau comparatifs des différentes nomenclatures des sorties SPI sur ce genre d'écran:
pin OLED > | GND | VCC | D0 | D1 | RES | DC | CS |
SPI | masse | 3v3, 5v | CLK (clock) | MOSI | Reset | Data Command | Cable Select |
I2C | masse | 3v3, 5v | SCL | SDA | - | - | - |
Analyse de la connectique SPI de la carte micropython pyb v 1.1:
On peut observer que cette carte a plusieurs ports SPI disponibles.
/SS (CS)
|
SCK
|
MISO
|
MOSI
|
|
SPI (1)
|
X5
|
X6
|
X7
|
X8
|
(cpu name)
|
A4
|
A5
|
A6
|
A7
|
SPI (2)
|
Y5
|
Y6
|
Y7
|
Y8
|
(cpu name)
|
B12
|
B13
|
B14
|
B15
|
Il existe plusieurs notations pour le port SPI (exemple de notation sur le wiki).
On notera ici que l'écran OLED ne reprends pas les notations standard.
J'ai opté pour mon test du port SPI (2), (cela aura de l'importance dans le code lors de l'initialisation du port SPI) ce qui donne ceci pour la connectique:
J'ai opté pour mon test du port SPI (2), (cela aura de l'importance dans le code lors de l'initialisation du port SPI) ce qui donne ceci pour la connectique:
pin OLED > | GND | VCC | D0 | D1 | RES | DC | CS |
noms SPI | CLK (clock) | MOSI | Reset | Data Command | Cable Select | ||
pin PyBoard > | GND | 3v3 | Y6 (SCK) | Y8 | Y1 | Y2 | Y3 (/SS) |
Ce qui est curieux, c'est qu'il semblerait que le D1 ne soit pas le DI (data in), mais plutot le MOSI
Idem pour le CS, Y3 alors que le SS est en Y5 sur la carte, ( software ? à vérifier ).
Idem pour le CS, Y3 alors que le SS est en Y5 sur la carte, ( software ? à vérifier ).
Code:
J'ai repris deux librairies que j'ai un peu adapté et compilée en une seule, les code originaux de la librarie SSD1306.py et gfx.py de chez adafruit.
Les modifs consistent en la suppression de la partie I2C du code SSD1306. Pour la partie GFX, je n'ai gardé que tout ce qui concerne le remplissage de forme, et j'ai ajouté la notion de polygones à 4 cotés pour mon application.
Le premier code est le main.py a copier dans la pyboard.
On note que dans le code lors de la définition du SPI, j'ai opté pour le Y3 pour le Chip Select(CS) et le Y2 pour le data command (DC).
Le second est la lib oled.
Les modifs consistent en la suppression de la partie I2C du code SSD1306. Pour la partie GFX, je n'ai gardé que tout ce qui concerne le remplissage de forme, et j'ai ajouté la notion de polygones à 4 cotés pour mon application.
Le premier code est le main.py a copier dans la pyboard.
On note que dans le code lors de la définition du SPI, j'ai opté pour le Y3 pour le Chip Select(CS) et le Y2 pour le data command (DC).
Le second est la lib oled.
Vous devriez voir un petit carré qui se balade sur l'écran avec un mot qui le suit a droite ou a gauche.
Notez bien:
spi = SPI('Y', mode=SPI.MASTER, baudrate=8000000, polarity=0, phase=0)
Le 'Y', correspond au second port SPI, comme décrit dans la doc pour la définition du constructeur du port.
spi = SPI('Y', mode=SPI.MASTER, baudrate=8000000, polarity=0, phase=0)
Le 'Y', correspond au second port SPI, comme décrit dans la doc pour la définition du constructeur du port.
Références:
- SPI sur wiki
- SPI pour la pyboard
- Tutoriel youtube ESP8266 et ecran OLED Adafruit Industries, tonny Dicola
- Tutoriel Adafruit ESP8266 + écran OLED, tonny Dicola
- Tutoriel youtube Oled sur arduino
- La carte Micropyhton (site officiel)
- La library code officielle de la pyboard
- Quick reference de la pyboard
- Code github original python driver adafruit SSD1306.py
- Tutoriel adafruit de la lib gfx.py
- Code github original python lib graphique adafruit gfx.py
Aucun commentaire:
Enregistrer un commentaire