Les écrans à caractères LCD sont un moyen simple et économique d’afficher un texte. Grâce au contrôleur HD44780, la commande des modules est devenue très simple. Cependant, il faut occuper de nombreux GPIO pour cela. Une alternative est le bus de données I2C, ce qui signifie que seuls deux GPIO sont utilisés.
Dans ce tutoriel, un écran 20×04 à caractères HD44780 est contrôlé à l’aide d’un adaptateur d’affichage I2C. Un convertisseur logique est utilisé pour ajuster le niveau de tension du module sans endommager les GPIO.
Accessoires
Pour accéder à un écran HD47780 via I²C, j’ai utilisé les accessoires suivants :
- Écran 20×04 ou 16×02 Caractère HD44780
- Adaptateur d’écran I2C
- Convertisseur de niveau logique I2C
- Breadboard
- Câble jumper
Installation
Les GPIO Raspberry Pi ne peuvent pas obtenir plus de 3,3 V de tension, mais il y a quelques modules (comme cet écran), qui envoient et veulent recevoir des signaux de 5 V. Pour cela, un convertisseur de niveau logique peut être utilisé, lequel a deux côtés. D’un côté, les connexions qui fonctionnent à 3,3 V sont connectées et de l’autre, celles qui fonctionnent à 5 V. Vous pouvez le reconnaître à différentes caractéristiques (LV – HV), comme vous le voyez dans l’image suivante :
Les tiges sont ensuite connectées comme suit :
Raspberry Pi | Convertisseur de niveau 3,3 V | Convertisseur de niveau 5 V | Adaptateur LCD I2C |
---|---|---|---|
3,3 V (Broche 1) | LV | — | — |
5 V (Broche 2) | — | HV | VCC |
GND (Broche 6) | GND | GND | GND |
GPIO2 / SDA (Broche 3) | TX1 (ci-dessous) | — | — |
GPIO3 / SCL (Broche 5) | TX1 (ci-dessus) | — | — |
— | — | TX0 (ci-dessous) | SDA |
— | — | TX0 (ci-dessus) | SCL |
Voici un dessin schématique :
Toute tige de terre peut être prise. Par souci de clarté, j’ai choisi la tige 20 au lieu de la tige 6 sur le schéma.
Cette configuration est également utilisable avec d’autres modules qui nécessitent des signaux d’une tension supérieure à 3,3 V (dans ce cas 5 V) (horloge temps réel, etc.).
Logiciels
Avant de pouvoir commencer, deux outils I²C sont nécessaires, que nous installons :
sudo apt-get install python-smbus i2c-tools
Ensuite, nous publierons I2C (si vous l’avez déjà publié à partir de tutoriels précédents, vous pouvez l’ignorer) :
sudo raspi-config
Sous « Options d’interface »> « I2C », nous l’activons. Ajoutez maintenant les entrées correspondantes dans le fichier des modules :
sudo nano /etc/modules
Ces deux lignes sont ajoutées à la fin :
1 2 |
i2c-bcm2708 i2c-dev |
Il faut ensuite le redémarrer, afin que tous les changements prennent effet.
sudo reboot
Si vous avez déjà connecté l’écran, vous pouvez maintenant tester s’il a été détecté (si vous avez un des premiers Raspberry Pi’s [Rev.1], vous devez indiquer 0 au lieu de 1) :
sudo i2cdetect -y 1
La sortie devrait ressembler à ceci :
pi@raspberrypi ~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Si vous voyez un nombre autre que 27, vous devez le modifier dans le fichier lcddriver.py
(ADDRESS = 0x27
).
Commençons par le code :
mkdir hd44780 && cd hd44780 wget http://tutorials-raspberrypi.de/wp-content/uploads/scripts/hd44780_i2c.zip unzip hd44780_i2c.zip
À l’aide des deux scripts inclus, il est maintenant possible d’aborder l’affichage. Pour ce faire, nous ouvrons la console Python et entrons le code suivant :
sudo python
1 2 3 4 5 6 7 8 9 10 |
import lcddriver de l'importation de temps * lcd = lcddriver.lcd() lcd.lcd_clear() lcd.lcd_display_string("RaspberryPi-", 1) lcd.lcd_display_string(" Tutorials.fr", 2) lcd.lcd_display_string("", 3) lcd.lcd_display_string("HD44780 I2C Tutorial", 4) |
Le premier paramètre du lcd_display_string
est pour le texte et le second pour la ligne. Vous ne devez pas changer toutes les lignes à la fois, mais vous ne pouvez pas remplacer facilement les caractères individuels. Le texte entier (avec le caractère modifié à la position souhaitée) doit alors être retransmis.
Le contraste de mon adaptateur I2C était au début très faible. Si rien ne devait s’afficher, testez la roue au dos et regardez en oblique sur l’écran.
Code de référence : https://github.com/CaptainStouf/raspberry_lcd4x20_I2C