Raspberry - LCD 1602 - I2C
Le bus I2C permet aux périphériques ou aux composants équipés de l'interface I2C de communiquer entre eux avec 4 fils
- Signal de donnée : SDA
- Signal d’horloge : SCL
- Signal d'alimentation : +Vcc
- Signal de masse : Gnd
- Le Raspberry possède un bus I2C Maitre
- L'afficheur LCD 1602 I2C possède un bus I2C Esclave
Ne pas confondre le bus i2c avec le bus 1-wire
Présentation de l'interface I2C du LCD 1602
L'interface I2C du LCD 1602 possède d'un coté 4 broches
- Gnd - La masse
- Vcc - Le +5v
- SDA - Le bit de donnée SDA
- SCL - Le bit d'horloge SCL
- 1 potentiometre pour le réglage du constraste
- 3 cavaliers à souder A0, A1 et A2 pour l'adresse de l'interface I2C
Adresse de l'interface I2C
L'interface I2C est un composant électronique du type PCF8574AT ou PCF8574T qui possède son adresse.
Vous pouvez modifier l'adresse suivant vos besoins, en soudant un cavalier aux emplacements A0, A1 et A2 suivant le tableau ci-contre
PCF8574AT | PCF8574T | Cavaliers | Cavaliers | Cavaliers |
---|---|---|---|---|
Adresse I2C | Adresse I2C | A0 | A1 | A2 |
0x3f | 0x27 | |||
0x3e | 0x26 | cavalier | ||
0x3d | 0x25 | cavalier | ||
0x3c | 0x24 | cavalier | cavalier | |
0x3b | 0x23 | cavalier | ||
0x3a | 0x22 | cavalier | cavalier | |
0x39 | 0x21 | cavalier | cavalier | |
0x38 | 0x20 | cavalier | cavalier | cavalier |
Connexion du LCD 1602 - I2C au Raspberry
Relier l'afficheur LCD 1602 - I2C au Raspberry
Lcd 1602 I2C au Raspberry
- Vcc à la broche 2 # +5v
- Gnd à la broche 6 # Masse
- SDA à la broche 3 # Bus Données
- SCL à la broche 5 # Bus Horloge
Installation de la librairie Lcddriver
Nous installons la librairie lcddriver et tout le nécessaire pour le bon fonctionnement du LCD 1602 I2C
Dans un terminal saisir les commandes ci-dessous
- git clone https://github.com/the-raspberry-pi-guy/lcd # Copie de lcddriver
- ls # Visualiser ce qui à était installer
- cd lcd # Se déplacer dans le dossier lcd
- sudo sh install.sh # Exécuter le fichier install.sh
le Raspberry reboote automatiquement à la fin de l’installation
Vous trouverez des codes de démonstration dans le dossier /lcd
- cd lcd # Se déplacer dans le dossier lcd
Exécuter des codes de demonstration
- python demo_lcd.py # Exécuter les fichiers de demonstration
- python demo_clock.py
- python demo_scrolling_text.py
Si vous souhaitez voir le contenu des fichiers, vous ouvrez les fichiers avec un éditeur
En mode GUI, vous pouvez utiliser Geany
En mode console, vous pouvez utiliser nano
Erreur d'adresse I2C
Si vous avez une erreur d'adresse I2C " ERROR LCD I2C ADDRESS INVALID " lors de l'exécution des fichiers.
Vous devez vérifier l'adresse de la carte I2C. (Voir tableau ci-dessus)
Et corriger le fichier lcddriver.py en fonction de l'adresse du LCD
- nano lcddriver.py
Rechercher ADDRESS = 0x27 ou ADDRESS = 0x3f
Et remplacer l'adresse par celle de la carte I2C
Sauvegarder la modification [Ctrl]+[o] et [Enter]
Quitter l'éditeur [Ctrl]+[x]
Détection du bus i2C et de l'adresse du lCD1602
Une fois installé, vous pouvez vérifier si le bus I2C du Raspberry a bien détecté le LCD1602
Dans un terminal [ctrl]+[alt]+[t], saisir les commandes ci-dessous
Voir le device i2c
- ls /dev/i2c* # Voir le bus i2c
- /dev/i2c-1 # le -1 indique le n° du bus
- i2cdetect -l # Détection du bus i2c (-l c'est un L minuscule)
- i2c-1 # le -1 indique le n° du bus
- i2cdetect -y 1 # Détection du LCD (1 c'est le chiffre 1)
- 27 # Correspond à l'adresse du LCD 0x27
Explication du code demo_lcd.py
Le code
# Importation librairie
import lcddriver
import time
# Chargement du driver lcddriver
display = lcddriver.lcd()
try:
while True:
print("Writing to display") # Affichage d'un texte d'information dans le terminal
display.lcd_display_string("Greetings Human!", 1) # Affichage texte sur la 1ere ligne
display.lcd_display_string("Demo Pi Guy code", 2) # Affichage texte sur la 2eme ligne
time.sleep(2) # Temporisation
display.lcd_display_string("I am a display!", 1) # Affichage d'un texte different sur la 1ere ligne
time.sleep(2) # Temporisation
display.lcd_clear() # Effacement lcd
time.sleep(2) # Temporisation
except KeyboardInterrupt: # Affichage d'un texte dans le terminal et effacement du lcd
print("Cleaning up!")
display.lcd_clear()
Afficher la date sur le Lcd1602 I2c
Nous allons modifier le code demo_lcd.py pour afficher la date et l'heure.
Nous le nommerons demo_date.py
Mettre le fichier .py dans le dossier /lcd ou indiquer le chemin de lcddriver
Sinon la commande import lcddriver ne trouvera pas le lcddriver
et générera une erreur
Le code
# Import necessary libraries for communication and display use
import lcddriver
import time
# Load the driver and set it to "display"
display = lcddriver.lcd()
# Main body of code
try:
while True:
print("Affichage date/heure sur le lcd i2c") # Affichage texte d'information dans le terminal
display.lcd_display_string("Date: %s" %time.strftime("%d/%m/%Y"), 1) # Affichage de la date sur la 1ere ligne
display.lcd_display_string("Heure: %s" %time.strftime("%H:%M:%S"), 2) # Affichage de l'heure sur la 2eme ligne
except KeyboardInterrupt: # Press ctrl+c pour stopper le programme et effacer le lcd
print()
print("-----------------------------------")
print(" ARRET DU PROGRAMME PAR CTRL + C")
print("-----------------------------------")
display.lcd_clear()
Afficher la température DS18B20 sur LCD1602 I2c
Nous ajoutons à notre montage une sonde de température DS18B20
Et nous affichons la date/heure et la température
Nous utiliserons le code demo_date.py en y ajoutant le code pour la detection et l'affichage de la température. Nous le nommerons demo_temp.py
Mettre le fichier .py dans le dossier /lcd ou indiquer le chemin de lcddriver
Sinon la commande import lcddriver ne trouvera pas le lcddriver
et générera une erreur
La sonde de température DS18B20 utilise le bus 1-Wire
(Voir Raspberry - Sonde DS18B20 - Température pour installer la sonde DS18B20)
Connexion sonde DS18B20 sur Raspberry
- +Vcc sur le +5v pin 4 # ou +3.3v pin 1
- Gnd sur le Gnd pin 9
- Data sur Gpio4 pin 7
Le code
#coding:utf-8
# Import necessary libraries for communication and display use
import lcddriver
import time
# Load the driver and set it to "display"
display = lcddriver.lcd()
# Lecture température DS18B20
def lireFichier(emplacement):
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu
# Recuperation temperature DS18B20
def recupTemp(contenuFich):
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:5])
temperature = temperature / 10
return temperature
# Main body of code
try:
while True:
print("Affichage date et temperature sur lcd i2c") # Affichage texte d'information dans le terminal
# Mettre le 28-xxxxxxxxx de votre sonde
contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxx/w1_slave") # contenuFich la temperature
temperature = recupTemp(contenuFich)
# Affichage date/heure sur la 1ere ligne
display.lcd_display_string("%s" %time.strftime("%d/%m/%y %H:%M"), 1)
# Affichage de la température sur la 2eme ligne
display.lcd_display_string("Temp: " + str(temperature) + " C", 2)
except KeyboardInterrupt: # Press ctrl+c pour stopper le programme et effacer le lcd
print()
print("-----------------------------------")
print(" ARRET DU PROGRAMME PAR CTRL + C")
print("-----------------------------------")
display.lcd_clear()
Définir le chemin dans python
Définir le chemin dans un code python
Au début du code, ajouter les lignes ci-dessous
import sys
sys.append.path.("/chemin")