Différences entre versions de « RASP-PiOLED-Utiliser »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(21 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{RASP-PiOLED-NAV}}
 
{{RASP-PiOLED-NAV}}
 
{{traduction}}
 
  
 
== Introduction ==
 
== Introduction ==
Ligne 55 : Ligne 53 :
 
{{ADFImage|RASP-PiOLED-Utiliser-02.png|640px}}
 
{{ADFImage|RASP-PiOLED-Utiliser-02.png|640px}}
  
== Step 3. Verify I2C Device ==
+
== Etape 3. Vérifier le périphérique I2C ==
While in the '''Adafruit_Python_SSD1306''' folder, you can run our stats example, which will query the Pi for details on CPU load, disk space, etc. and print it on the OLED.
+
Une dois dans le répertoire '''Adafruit_Python_SSD1306''', vous pouvez exécuter l'exemple stats d'Adafruit. Cet exemple extrait des données statistiques sur la charge CPU du Pi, l'espace disque, etc -ET- affiche ces informations sur l'OLED.
  
Run <code>sudo python examples/stats.py</code> to run the demo, you should see something like the below:
+
Exécutez {{fname|sudo python examples/stats.py}} pour démarrer la démo, vous devriez vois quelque-chose comme ceci:
  
 
{{ADFImage|RASP-PiOLED-Utiliser-03.png|640px}}
 
{{ADFImage|RASP-PiOLED-Utiliser-03.png|640px}}
Ligne 64 : Ligne 62 :
 
{{ADFImage|RASP-PiOLED-Utiliser-04.jpg|640px}}
 
{{ADFImage|RASP-PiOLED-Utiliser-04.jpg|640px}}
  
== Running Stats on Boot ==
+
== Démarrer stats.py au Boot ==
You can pretty easily make it so this handy program runs every time you boot your Pi.
+
 
 +
=== Raspbian Wheezy - avant SystemD ===
 +
Il est très facile de démarrer le script à chaque au boot du Raspberry-Pi.
  
The fastest/easiest way is to put it in '''/etc/rc.local'''
+
L'approche la plus simple est de le mettre dans '''/etc/rc.local'''
  
Run '''sudo nano /etc/rc.local''' and add the line
+
Exécuté {{fname|'''sudo nano /etc/rc.local'''}} et ajouter la ligne
  
<code>sudo python /home/pi/Adafruit_Python_SSD1306/examples/stats.py  &</code>
+
<syntaxhighlight lang="bash">
 +
sudo python /home/pi/Adafruit_Python_SSD1306/examples/stats.py  &
 +
</syntaxhighlight>
  
on its own line right before '''exit 0'''
+
'''juste avant le {{fname|exit 0}}'''
  
Then save and exit. Reboot to verify that the screen comes up on boot!
+
Puis sauver et quitter l'éditeur nano. Redémarrer le Pi afin de voir si l'information apparaît à l'écran!
  
 
{{ADFImage|RASP-PiOLED-Utiliser-05.png|640px}}
 
{{ADFImage|RASP-PiOLED-Utiliser-05.png|640px}}
  
<a href="../../../../running-programs-automatically-on-your-tiny-computer/">For more advanced usage, check out our linux system services guide</a>
+
=== Raspbian Jessy - avec SystemD ===
 +
 
 +
Sur base des informations ci-dessus, vous pouvez adapter le démarrage pour SystemD.
 +
 
 +
Nous avons un tutoriel dévolu au démarrage de script Python avec SystemD.
 +
 
 +
{{ttuto-begin}}
 +
 
 +
{{ttuto
 +
  |label=Démarrage automatique
 +
  |descr=Démarrer automatiquement un script Python sous Raspbian.
 +
  |img=tlogo-autostart-script.jpg
 +
  |link=Rasp-AutoStart-Script
 +
}}
 +
 
 +
{{ttuto-end}}
  
== Library Usage ==
+
== Utilisation de la bibliothèque ==
Inside the examples subdirectory you'll find python scripts which demonstrate the usage of the library. <a href="../../../../ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black/">These are covered in more detail in our OLED guide here, so do check them out.</a>
+
Vous trouverez des scripts python d'exemple dans le sous répertoire {{fname|examples}} qui montre comment utiliser la bibliothèque. Adafruit [https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black/ Ce guide OLED d'Adafruit (''anglais'') couvre plus de détails concernant l'utilisation des afficheurs], n'hésitez pas à le consulter.
  
To help you get started, I'll walk through the '''stats.py''' code below, that way you can use this file as the basis of a future project.
+
Pour débuter plus facilement, nous allons réviser le code de {{fname|stats.py}}. De sorte, vous pourrez utiliser ce script comme base de départ pour vos propres projets.
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 99 : Ligne 116 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
First a few modules are imported, including the '''Adafruit_SSD1306''' module which contains the OLED display driver classes. You can also see some of the '''P'''ython '''I'''maging '''L'''ibrary modules like '''Image''', '''ImageDraw''', and''' ImageFont''' being imported. Those are, as you can imagine, are for drawing images, shapes and text/fonts!
+
Nous commençons par importer quelques modules, y compris le module '''Adafruit_SSD1306''' qui contient le pilote de l'afficheur OLED.  
 +
 
 +
Vous pouvez également noter l'importation de quelques éléments de la bibliothèque'' '''P'''ython '''I'''maging '''L'''ibrary'' comme '''Image''', '''ImageDraw''' et  '''ImageFont'''. Comme vous pouvez l'imaginer, ces éléments servirons a dessiner des images, des formes et du texte/font!
 +
 
 +
Ci dessous les différentes valeurs de configuration et classe pour les afficheurs OLED. Il y a 4 variantes d'afficheur OLED, avec 128x32 pixels ou 128x64 pixels -ET- avec I2C ou avec SPI.
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
# Raspberry Pi pin configuration:
+
# Commentaire traduis par Meurisse D. pour faciliter la compréhension du code.
 +
# -- shop.mchobby.be --
 +
 
 +
# Configuration des broches du Raspberry Pi:
 
RST = None
 
RST = None
# Note the following are only used with SPI:
+
# Note: uniquement utilisé avec bus SPI:
 
DC = 23
 
DC = 23
 
SPI_PORT = 0
 
SPI_PORT = 0
 
SPI_DEVICE = 0
 
SPI_DEVICE = 0
  
# 128x32 display with hardware I2C:
+
# Afficheur 128x32 sur bus I2C matériel:
 
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
 
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
  
# 128x64 display with hardware I2C:
+
# Afficheur 128x64 sur bus I2C matériel:
 
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
 
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
  
# Alternatively you can specify an explicit I2C bus number, for example
+
# Alternativement, vous pouvez spécifier le n° de bus I2C, par exemple
# with the 128x32 display you would use:
+
# avec l'afficheur 128x32, vous pouvez utiliser:
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2)
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2)
  
# 128x32 display with hardware SPI:
+
# Afficheur 128x32 avec bus SPI matériel:
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
  
# 128x64 display with hardware SPI:
+
# Afficheur 128x64 avec bus SPI matériel:
 
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
 
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
  
# Alternatively you can specify a software SPI implementation by providing
+
# Vous pouvez également spécifier un SPI logiciel en fournissant
# digital GPIO pin numbers for all the required display pins. For example
+
# les numéros de broches GPIO digital (pour toutes les broches
# on a Raspberry Pi with the 128x32 display you might use:
+
# utilisées par l'afficheur). Par exemple:
 +
# Sur un Raspberry Pi avec afficher 128x32 vous pourriez utiliser:
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, sclk=18, din=25, cs=22)
 
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, sclk=18, din=25, cs=22)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Below the configuration values is the display class setup. There are 4 variants of OLED displays, with 128x32 pixels or 128x64 pixels, and with I2C or with SPI. 
+
Etant donné que l'afficheur PiOLED est un afficheur OLED 128x32 sur bus (uniquement), vous devez uniquement utiliser le code:
  
However since the PiOLED is a 128x32 I2C display ''only'' you should only use the
+
<syntaxhighlight lang="python">
 +
# afficheur 128x32 avec bus I2C matériel:
 +
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
 +
</syntaxhighlight>
  
<code># 128x32 display with hardware I2C:</code><br><code>disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)</code>
+
Le restant du code peut rester en commentaire.
  
variant for creating the display object! The rest can remain commented out.
+
Notez que ci-dessus, nous avons initialisé {{fname|1=RST = None}} parce que le PiOLED ne nécessite pas l'utilisation de la broche "reset".
 
 
Note that above, we initialize <code>RST = None</code> because the PiOLED does not require a reset pin.
 
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
# Initialize library.
+
# initialiser la bibliothèque d'affichage.
 
disp.begin()
 
disp.begin()
  
# Clear display.
+
# Effacer l'affichage.
 
disp.clear()
 
disp.clear()
 
disp.display()
 
disp.display()
  
# Create blank image for drawing.
+
# Créer une image vierge pour dessiner dessus.
# Make sure to create image with mode '1' for 1-bit color.
+
# L'image doit être créé avec mode '1' (couleur 1-bit).
 
width = disp.width
 
width = disp.width
 
height = disp.height
 
height = disp.height
 
image = Image.new('1', (width, height))
 
image = Image.new('1', (width, height))
  
# Get drawing object to draw on image.
+
# Obtenir un objet ImageDraw (dessiner sur l'image)
 +
# pour l'image.
 
draw = ImageDraw.Draw(image)
 
draw = ImageDraw.Draw(image)
  
# Draw a black filled box to clear the image.
+
# Dessiner un rectangle noir (rempli) pour effacer
 +
# le fond de l'image (sinon cela allumera les Pixels).
 
draw.rectangle((0,0,width,height), outline=0, fill=0)
 
draw.rectangle((0,0,width,height), outline=0, fill=0)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The next bit of code will initialize the display library with <code>begin()</code> and clear the display with <code>clear()</code>and <code>display()</code>.
+
La portion de code ci-dessus, initialise la bibliothèque d'affichage avec {{fname|begin()}} et efface le contenu avec {{fname|clear()}} et {{fname|display()}} .
  
Then it will configure a PIL drawing class to prepare for drawing graphics. Notice that the image buffer is created in 1-bit mode with the <code>'1'</code> parameter, this is important because the display only supports black and white colors.
+
Ensuite, nous configurons une classe PIL drawing pour dessiner des graphiques. La mémoire tampon de l'image est crée avec un bit de profondeur (mode avec paramètre {{fname|'1'}}. Ce mode est important puisque l'afficheur ne propose que deux couleurs noir et blanc.
  
We then re-draw a large black rectangle to clear the screen. In theory we don't have to clear the screen again, but its a good example of how to draw a shape!
+
Ensuite nous redessinons un grand rectangle noir pour effacer effacer le contenu de l'écran (éteindre tous les pixels). En théorie, il n'est pas nécessaire d'effacer une seconde fois l'écran... mais c'est toujours un bonne idée de savoir comment dessiner une forme!
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
# Load default font.
+
# Charger la font par défaut.
 
font = ImageFont.load_default()
 
font = ImageFont.load_default()
  
# Alternatively load a TTF font.
+
# Chargement d'une autre font TTF.
# Some other nice fonts to try: http://www.dafont.com/bitmap.php
+
# D'autres fonts sont disponibles sur: http://www.dafont.com/bitmap.php
 
#font = ImageFont.truetype('Minecraftia.ttf', 8)
 
#font = ImageFont.truetype('Minecraftia.ttf', 8)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Once the display is initialized and a drawing object is prepared, you can draw shapes, text and graphics using <a href="http://effbot.org/imagingbook/imagedraw.htm">PIL's drawing commands</a>. Here we are loading the <code>default</code> font, which works fine, but there's other fonts you can load.
+
Une fois l'afficheur initialisé et un objet dessin (ImageDrawing) préparé, vous pouvez dessiner des formes, du texte et des graphiques en utilisant [http://effbot.org/imagingbook/imagedraw.htm des commandes de dessin PIL] (''effbot.org, anglais''). Dans le cas présent, le code charge la font {{fname|par défaut}} qui est parfaite mais vous pouvez également charger d'autres fonts. Il es possible de charger des fonts TrueType et de les utiliser pour faire du rendu de texte de tout style
  
Next the code loads a built-in default font and draws a few lines of text. You can also load your own TrueType font and use it to render fancy text in any style you like
+
Une fois la font par défaut chargée, il est possible d'afficher quelques lignes de texte.  
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
while True:
 
while True:
  
     # Draw a black filled box to clear the image.
+
     # Afficher un rectangle noir pour effacer l'image de l'écran.
 
     draw.rectangle((0,0,width,height), outline=0, fill=0)
 
     draw.rectangle((0,0,width,height), outline=0, fill=0)
  
     # Shell scripts for system monitoring from here : https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
+
     # Script shell pour surveiller les paramètres système :  
 +
    # https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
 
     cmd = "hostname -I | cut -d\' \' -f1"
 
     cmd = "hostname -I | cut -d\' \' -f1"
 
     IP = subprocess.check_output(cmd, shell = True )
 
     IP = subprocess.check_output(cmd, shell = True )
Ligne 197 : Ligne 226 :
 
     Disk = subprocess.check_output(cmd, shell = True )
 
     Disk = subprocess.check_output(cmd, shell = True )
  
     # Write two lines of text.
+
     # Ecrire quatre lignes de texte
 
 
 
     draw.text((x, top),      "IP: " + str(IP),  font=font, fill=255)
 
     draw.text((x, top),      "IP: " + str(IP),  font=font, fill=255)
 
     draw.text((x, top+8),    str(CPU), font=font, fill=255)
 
     draw.text((x, top+8),    str(CPU), font=font, fill=255)
Ligne 204 : Ligne 232 :
 
     draw.text((x, top+25),    str(Disk),  font=font, fill=255)
 
     draw.text((x, top+25),    str(Disk),  font=font, fill=255)
  
     # Display image.
+
     # Afficher l'image sur l'écran
 
     disp.image(image)
 
     disp.image(image)
 
     disp.display()
 
     disp.display()
     time.sleep(.1)
+
    # pause de 100 millisecondes
 +
     time.sleep(.1)  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Using the subprocess class, python can utilize linux commands to access the Pi's system information. This loop updates the screen at 10 times a second.<br><br>That's all there is to the '''stats.py''' code!
+
En utilisant la classe subprocess, python peut utiliser des commandes Linux pour accéder aux informations systèmes du Pi. La boucle {{fname|while}} effectue un rafraîchissement de l'écran 10 fois par seconde.  
 +
 
 +
Voilà, c'est tout en ce qui concerne le code de '''stats.py''' !
 +
 
 +
== Plus d'exemples ==
 +
Vous pouvez consulter les autres exemples du sous-répertoire {{fname|examples}}.
  
== More Demos & Examples ==
+
Assurez-vous d'éditer chacun des exemples (avec '''nano animate.py''' par exemple) et trouvez la ligne mentionnant:
You can check out our other examples in the example, just make sure to edit each one with '''nano animate.py''' for example, and find the line that says:
 
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 220 : Ligne 253 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
and change it to:
+
et la changer en :
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
# Raspberry Pi pin configuration:
 
# Raspberry Pi pin configuration:
RST = None # PiOLED does not require reset pin
+
RST = None # PiOLED n'a pas besoin de la broche Reset
 
</syntaxhighlight>
 
</syntaxhighlight>
  
and make sure that the configuration section where you choose which type of display, looks like this
+
puis assurez vous que la configuration section utilise la déclaration correspond à votre afficheur PiOled... comme ceci:
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 243 : Ligne 276 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
That is, we'll be using I2C 128x32 display!
+
Voila, le script d'exemple utilise maintenant un afficheur I2C 128x32 pixels (sans broche Reset)!
  
== Speeding Up the Display ==
+
== Améliorer la vitesse de l'afficheur ==
For the best performance, especially if you are doing fast animations, you'll want to tweak the I2C core to run at 1MHz. By default it may be 100KHz or 400KHz
+
Pour de meilleures performances, plus spécialement si vous avez besoin d'animation rapide, vous pouvez optimiser le fonctionnement du bus I2C pour qu'il fonctionne 1MHz. En effet, le bus est configuré à la fréquence 100KHz ou 400KHz
  
To do this edit the config with '''sudo nano /boot/config.txt'''
+
Pour modifier la vitesse du bus, éditez le fichier de configuration avec '''sudo nano /boot/config.txt'''
  
and add to the end of the file
+
et ajoutez la ligne suivante à la fin du fichier
  
'''dtparam=i2c_baudrate=1000000'''
+
<syntaxhighlight lang="python">
 +
dtparam=i2c_baudrate=1000000
 +
</syntaxhighlight>
  
 
{{ADFImage|RASP-PiOLED-Utiliser-06.png|640px}}
 
{{ADFImage|RASP-PiOLED-Utiliser-06.png|640px}}
  
reboot to 'set' the change.
+
Redémarrer le Pi pour appliquer les modifications.
 
 
  
 
{{RASP-PiOLED-TRAILER}}
 
{{RASP-PiOLED-TRAILER}}

Version actuelle datée du 9 février 2018 à 13:17

Introduction

Nous allons utiliser Python pour contrôler l'afficheur. En théorie, vous pouvez utiliser n'importe quel langage offrant un accès au bus I2C de l'ordinateur mais Adafruit ne fournit qu'une bibliothèque Python!

Etape 1. Les dépendances

Avant d'utiliser la bibliothèque Adafruit, vous devez vous assurer d'avoir les différentes dépendances installées. Connectez vous en SSH sur votre Pi et suivez les étapes suivantes:

Installer la bibliothèque RPi.GPIO en exécutant la ligne de commande:

sudo apt-get update
sudo apt-get install build-essential python-dev python-pip

sudo pip install RPi.GPIO

Pour finir, installer la bibliothèque Python Imaging Library (PIL) et bibliothèque smbus en exécutant :

sudo apt-get install python-imaging python-smbus

Vous pouvez maintenant instlaller la dernière version de la bibliothèque Python SSD1306 d'Adafruit (et les exemples). Exécutez les commandes suivantes:

sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

cd Adafruit_Python_SSD1306
sudo python setup.py install

RASP-PiOLED-Utiliser-01.png
Crédit: AdaFruit Industries www.adafruit.com

Etape 2. Activer I2C

Suivez ce guide pour activer le support I2C sur votre Raspberry-Pi.

Après avoir activer le support I2C, il sera nécessaire d'arrêter le Pi à l'aide de la commande sudo halt.

Une fois à l'arrêt, branchez le PiOled puis remettez le Pi sous tension.

Connectez vous à nouveau sur votre Pi et exécutez la commande suivante dans un terminal pour scanner et détecter les périphériques I2C.

sudo i2cdetect -y 1

Vous devriez voir le résultat suivant indiquant que l'adresse 0x3c (l'afficheur OLED) à été trouvé.

RASP-PiOLED-Utiliser-02.png
Crédit: AdaFruit Industries www.adafruit.com

Etape 3. Vérifier le périphérique I2C

Une dois dans le répertoire Adafruit_Python_SSD1306, vous pouvez exécuter l'exemple stats d'Adafruit. Cet exemple extrait des données statistiques sur la charge CPU du Pi, l'espace disque, etc -ET- affiche ces informations sur l'OLED.

Exécutez sudo python examples/stats.py pour démarrer la démo, vous devriez vois quelque-chose comme ceci:

RASP-PiOLED-Utiliser-03.png
Crédit: AdaFruit Industries www.adafruit.com

RASP-PiOLED-Utiliser-04.jpg
Crédit: AdaFruit Industries www.adafruit.com

Démarrer stats.py au Boot

Raspbian Wheezy - avant SystemD

Il est très facile de démarrer le script à chaque au boot du Raspberry-Pi.

L'approche la plus simple est de le mettre dans /etc/rc.local

Exécuté sudo nano /etc/rc.local et ajouter la ligne

sudo python /home/pi/Adafruit_Python_SSD1306/examples/stats.py  &

juste avant le exit 0

Puis sauver et quitter l'éditeur nano. Redémarrer le Pi afin de voir si l'information apparaît à l'écran!

RASP-PiOLED-Utiliser-05.png
Crédit: AdaFruit Industries www.adafruit.com

Raspbian Jessy - avec SystemD

Sur base des informations ci-dessus, vous pouvez adapter le démarrage pour SystemD.

Nous avons un tutoriel dévolu au démarrage de script Python avec SystemD.

Démarrage automatique

Tlogo-autostart-script.jpg

Démarrer automatiquement un script Python sous Raspbian.

 

Utilisation de la bibliothèque

Vous trouverez des scripts python d'exemple dans le sous répertoire examples qui montre comment utiliser la bibliothèque. Adafruit Ce guide OLED d'Adafruit (anglais) couvre plus de détails concernant l'utilisation des afficheurs, n'hésitez pas à le consulter.

Pour débuter plus facilement, nous allons réviser le code de stats.py. De sorte, vous pourrez utiliser ce script comme base de départ pour vos propres projets.

import time

import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

import subprocess

Nous commençons par importer quelques modules, y compris le module Adafruit_SSD1306 qui contient le pilote de l'afficheur OLED.

Vous pouvez également noter l'importation de quelques éléments de la bibliothèque Python Imaging Library comme Image, ImageDraw et ImageFont. Comme vous pouvez l'imaginer, ces éléments servirons a dessiner des images, des formes et du texte/font!

Ci dessous les différentes valeurs de configuration et classe pour les afficheurs OLED. Il y a 4 variantes d'afficheur OLED, avec 128x32 pixels ou 128x64 pixels -ET- avec I2C ou avec SPI.

# Commentaire traduis par Meurisse D. pour faciliter la compréhension du code.
# -- shop.mchobby.be -- 

# Configuration des broches du Raspberry Pi:
RST = None
# Note: uniquement utilisé avec bus SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0

# Afficheur 128x32 sur bus I2C matériel:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

# Afficheur 128x64 sur bus I2C matériel:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

# Alternativement, vous pouvez spécifier le n° de bus I2C, par exemple
# avec l'afficheur 128x32, vous pouvez utiliser:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2)

# Afficheur 128x32 avec bus SPI matériel:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# Afficheur 128x64 avec bus SPI matériel:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))

# Vous pouvez également spécifier un SPI logiciel en fournissant
# les numéros de broches GPIO digital (pour toutes les broches 
# utilisées par l'afficheur). Par exemple:
# Sur un Raspberry Pi avec afficher 128x32 vous pourriez utiliser:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, sclk=18, din=25, cs=22)

Etant donné que l'afficheur PiOLED est un afficheur OLED 128x32 sur bus (uniquement), vous devez uniquement utiliser le code:

# afficheur 128x32 avec bus I2C matériel:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

Le restant du code peut rester en commentaire.

Notez que ci-dessus, nous avons initialisé RST = None parce que le PiOLED ne nécessite pas l'utilisation de la broche "reset".

# initialiser la bibliothèque d'affichage.
disp.begin()

# Effacer l'affichage.
disp.clear()
disp.display()

# Créer une image vierge pour dessiner dessus.
# L'image doit être créé avec mode '1' (couleur 1-bit).
width = disp.width
height = disp.height
image = Image.new('1', (width, height))

# Obtenir un objet ImageDraw (dessiner sur l'image)
# pour l'image.
draw = ImageDraw.Draw(image)

# Dessiner un rectangle noir (rempli) pour effacer
# le fond de l'image (sinon cela allumera les Pixels).
draw.rectangle((0,0,width,height), outline=0, fill=0)

La portion de code ci-dessus, initialise la bibliothèque d'affichage avec begin() et efface le contenu avec clear() et display() .

Ensuite, nous configurons une classe PIL drawing pour dessiner des graphiques. La mémoire tampon de l'image est crée avec un bit de profondeur (mode avec paramètre '1'. Ce mode est important puisque l'afficheur ne propose que deux couleurs noir et blanc.

Ensuite nous redessinons un grand rectangle noir pour effacer effacer le contenu de l'écran (éteindre tous les pixels). En théorie, il n'est pas nécessaire d'effacer une seconde fois l'écran... mais c'est toujours un bonne idée de savoir comment dessiner une forme!

# Charger la font par défaut.
font = ImageFont.load_default()

# Chargement d'une autre font TTF.
# D'autres fonts sont disponibles sur: http://www.dafont.com/bitmap.php
#font = ImageFont.truetype('Minecraftia.ttf', 8)

Une fois l'afficheur initialisé et un objet dessin (ImageDrawing) préparé, vous pouvez dessiner des formes, du texte et des graphiques en utilisant des commandes de dessin PIL (effbot.org, anglais). Dans le cas présent, le code charge la font par défaut qui est parfaite mais vous pouvez également charger d'autres fonts. Il es possible de charger des fonts TrueType et de les utiliser pour faire du rendu de texte de tout style

Une fois la font par défaut chargée, il est possible d'afficher quelques lignes de texte.

while True:

    # Afficher un rectangle noir pour effacer l'image de l'écran.
    draw.rectangle((0,0,width,height), outline=0, fill=0)

    # Script shell pour surveiller les paramètres système : 
    # https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load
    cmd = "hostname -I | cut -d\' \' -f1"
    IP = subprocess.check_output(cmd, shell = True )
    cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
    CPU = subprocess.check_output(cmd, shell = True )
    cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
    MemUsage = subprocess.check_output(cmd, shell = True )
    cmd = "df -h | awk '$NF==\"/\"{printf \"Disk: %d/%dGB %s\", $3,$2,$5}'"
    Disk = subprocess.check_output(cmd, shell = True )

    # Ecrire quatre lignes de texte
    draw.text((x, top),       "IP: " + str(IP),  font=font, fill=255)
    draw.text((x, top+8),     str(CPU), font=font, fill=255)
    draw.text((x, top+16),    str(MemUsage),  font=font, fill=255)
    draw.text((x, top+25),    str(Disk),  font=font, fill=255)

    # Afficher l'image sur l'écran
    disp.image(image)
    disp.display()
    # pause de 100 millisecondes
    time.sleep(.1)

En utilisant la classe subprocess, python peut utiliser des commandes Linux pour accéder aux informations systèmes du Pi. La boucle while effectue un rafraîchissement de l'écran 10 fois par seconde.

Voilà, c'est tout en ce qui concerne le code de stats.py !

Plus d'exemples

Vous pouvez consulter les autres exemples du sous-répertoire examples.

Assurez-vous d'éditer chacun des exemples (avec nano animate.py par exemple) et trouvez la ligne mentionnant:

# Raspberry Pi pin configuration:
RST = 24

et la changer en :

# Raspberry Pi pin configuration:
RST = None # PiOLED n'a pas besoin de la broche Reset

puis assurez vous que la configuration section utilise la déclaration correspond à votre afficheur PiOled... comme ceci:

# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)

# 128x64 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

# 128x32 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_POR$

# 128x64 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_POR$

Voila, le script d'exemple utilise maintenant un afficheur I2C 128x32 pixels (sans broche Reset)!

Améliorer la vitesse de l'afficheur

Pour de meilleures performances, plus spécialement si vous avez besoin d'animation rapide, vous pouvez optimiser le fonctionnement du bus I2C pour qu'il fonctionne 1MHz. En effet, le bus est configuré à la fréquence 100KHz ou 400KHz

Pour modifier la vitesse du bus, éditez le fichier de configuration avec sudo nano /boot/config.txt

et ajoutez la ligne suivante à la fin du fichier

dtparam=i2c_baudrate=1000000

RASP-PiOLED-Utiliser-06.png
Crédit: AdaFruit Industries www.adafruit.com

Redémarrer le Pi pour appliquer les modifications.


Source: Adafruit PiOLED - 128x32 Mini OLED for Raspberry Pi
Créé par Lady Ada et Danny Nosonowitz pour AdaFruit Industries.

Traduction réalisée par Meurisse D. pour MCHobby.be.

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com