Différences entre versions de « RASP-PiOLED-Utiliser »
(23 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
{{RASP-PiOLED-NAV}} | {{RASP-PiOLED-NAV}} | ||
− | |||
− | |||
== Introduction == | == Introduction == | ||
Ligne 13 : | Ligne 11 : | ||
Installer la bibliothèque RPi.GPIO en exécutant la ligne de commande: | Installer la bibliothèque RPi.GPIO en exécutant la ligne de commande: | ||
− | <syntaxhighlight lang=" | + | <syntaxhighlight lang="bash"> |
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install build-essential python-dev python-pip | sudo apt-get install build-essential python-dev python-pip | ||
Ligne 38 : | Ligne 36 : | ||
{{ADFImage|RASP-PiOLED-Utiliser-01.png|640px}} | {{ADFImage|RASP-PiOLED-Utiliser-01.png|640px}} | ||
− | == | + | == Etape 2. Activer I2C == |
− | + | [[Rasp-Hack-GPIO_Configurer_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 {{fname|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. | |
− | + | <syntaxhighlight lang="bash"> | |
+ | sudo i2cdetect -y 1 | ||
+ | </syntaxhighlight> | ||
− | + | Vous devriez voir le résultat suivant indiquant que l'adresse '''0x3c''' (l'afficheur OLED) à été trouvé. | |
{{ADFImage|RASP-PiOLED-Utiliser-02.png|640px}} | {{ADFImage|RASP-PiOLED-Utiliser-02.png|640px}} | ||
− | == | + | == 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 {{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 60 : | Ligne 62 : | ||
{{ADFImage|RASP-PiOLED-Utiliser-04.jpg|640px}} | {{ADFImage|RASP-PiOLED-Utiliser-04.jpg|640px}} | ||
− | == | + | == 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é {{fname|'''sudo nano /etc/rc.local'''}} et ajouter la ligne | |
− | < | + | <syntaxhighlight lang="bash"> |
+ | sudo python /home/pi/Adafruit_Python_SSD1306/examples/stats.py & | ||
+ | </syntaxhighlight> | ||
− | + | '''juste avant le {{fname|exit 0}}''' | |
− | + | 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}} | ||
− | + | === 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}} | ||
− | == | + | == Utilisation de la bibliothèque == |
− | + | 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. | |
− | + | 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 95 : | Ligne 116 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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 | + | # 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 | + | # Note: uniquement utilisé avec bus SPI: |
DC = 23 | DC = 23 | ||
SPI_PORT = 0 | SPI_PORT = 0 | ||
SPI_DEVICE = 0 | SPI_DEVICE = 0 | ||
− | # 128x32 | + | # Afficheur 128x32 sur bus I2C matériel: |
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) | disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) | ||
− | # 128x64 | + | # Afficheur 128x64 sur bus I2C matériel: |
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) | # 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) | # disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_bus=2) | ||
− | # 128x32 | + | # 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 | + | # 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)) | ||
− | # | + | # Vous pouvez également spécifier un SPI logiciel en fournissant |
− | # digital | + | # 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) | # disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, sclk=18, din=25, cs=22) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Etant donné que l'afficheur PiOLED est un afficheur OLED 128x32 sur bus (uniquement), vous devez uniquement utiliser le code: | |
− | + | <syntaxhighlight lang="python"> | |
+ | # afficheur 128x32 avec bus I2C matériel: | ||
+ | disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) | ||
+ | </syntaxhighlight> | ||
− | + | Le restant du code peut rester en commentaire. | |
− | + | 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". | |
− | |||
− | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
− | # | + | # initialiser la bibliothèque d'affichage. |
disp.begin() | disp.begin() | ||
− | # | + | # Effacer l'affichage. |
disp.clear() | disp.clear() | ||
disp.display() | disp.display() | ||
− | # | + | # Créer une image vierge pour dessiner dessus. |
− | # | + | # 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)) | ||
− | # | + | # Obtenir un objet ImageDraw (dessiner sur l'image) |
+ | # pour l'image. | ||
draw = ImageDraw.Draw(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) | draw.rectangle((0,0,width,height), outline=0, fill=0) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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()}} . | |
− | + | 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. | |
− | + | 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"> | ||
− | # | + | # Charger la font par défaut. |
font = ImageFont.load_default() | 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) | #font = ImageFont.truetype('Minecraftia.ttf', 8) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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 | |
− | + | 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: | ||
− | # | + | # 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) | ||
− | # | + | # 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 193 : | Ligne 226 : | ||
Disk = subprocess.check_output(cmd, shell = True ) | 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), "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 200 : | Ligne 232 : | ||
draw.text((x, top+25), str(Disk), 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.image(image) | ||
disp.display() | disp.display() | ||
− | time.sleep(.1) | + | # pause de 100 millisecondes |
+ | time.sleep(.1) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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}}. | |
+ | |||
+ | Assurez-vous d'éditer chacun des exemples (avec '''nano animate.py''' par exemple) et trouvez la ligne mentionnant: | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Ligne 216 : | Ligne 253 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | et la changer en : | |
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
# Raspberry Pi pin configuration: | # Raspberry Pi pin configuration: | ||
− | RST = None # PiOLED | + | RST = None # PiOLED n'a pas besoin de la broche Reset |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | puis assurez vous que la configuration section utilise la déclaration correspond à votre afficheur PiOled... comme ceci: | |
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Ligne 239 : | Ligne 276 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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 | |
− | + | <syntaxhighlight lang="python"> | |
+ | dtparam=i2c_baudrate=1000000 | ||
+ | </syntaxhighlight> | ||
{{ADFImage|RASP-PiOLED-Utiliser-06.png|640px}} | {{ADFImage|RASP-PiOLED-Utiliser-06.png|640px}} | ||
− | + | 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!
Ce guide par du principe que vous disposez d'un Raspberry-Pi avec un système d'exploitation configuré, une connectivité réseau et SSH! |
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
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é.
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:
Crédit: AdaFruit Industries www.adafruit.com
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!
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.
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
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