Raspberry - Afficher une température sur un LCD
Nous allons afficher la température sur un afficheur LCD.
Nous avons besoin des matériels ci-dessous:
- un Raspberry
- un afficher LCD 1602
- une sonde de température DS18B20
Pour le cablage et le paramétrage de la sonde DS18B20 voir les pages:
Raspberry - Sonde DS18B20 - Température et Raspberry
Raspberry - Sonde de température DS18B20
Pour le cablage et le paramétrage de l'afficheur LCD voir la page:
Raspberry - Afficheur LCD 1602
Le schema
Cablage du LCD 1602 voir la page:
Raspberry - Afficheur LCD 1602
Câblage avec le Raspberry en Mode 4 bit
LCD1602 - Raspberry (Mode Board)
- Broche 1 (Vss) sur Pin 6 (Masse)
- Broche 2 (Vdd) sur Pin 2 (+5v)
- Broche 3 (V0) sur curseur du potentiomètre 10 KOhms
- Broche 4 (RS) sur Pin 37
- Broche 5 (R/W) sur le Gnd - Masse
- Broche 6 (E) sur Pin 35
- Broche 11 (DB4 - Data) sur Pin 33
- Broche 12 (DB5 - Data) sur Pin 31
- Broche 13 (DB6 - Data) sur Pin 29
- Broche 14 (DB7 - Data) sur Pin 23
- Broche 15 (A - Anode rétro-éclairage) sur résistance de 220 Ohms puis +5v
- Broche 16 (K - Cathode rétro-éclairage) sur le Gnd - Masse
- Rouge = +Vcc
- Noir = Gnd
- Jaune = GPIO4 - Pin7
Résistance de 4700 Ohms entre +Vcc et GPIO4 - Pin7
Affichage de la température
Nous affichons la température relevée par la sonde DS18B20 sur l'afficheur LCD 1602
Le code:
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
#
from RPLCD.gpio import CharLCD
from time import sleep
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
def lireFichier(emplacement):
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu
def recupTemp(contenuFich):
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:5])
temperature = temperature / 10
return temperature
while True: # Mettre le 28-xxxxxxxxx de votre sonde
contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxxx/w1_slave") # contenuFich la temperature
temperature = recupTemp(contenuFich)
lcd.cursor_pos = (0, 0)
lcd.write_string("Temperature :")
lcd.cursor_pos = (1, 0)
resultat = str(temperature) + " C" # Variable resultat contient la temperature
lcd.write_string(resultat) # Affichage de la temperature sur LCD
sleep(5)
Affichage Date/Heure et Température
Le code:
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
# Affichage date/heure et température
# avec clignotement du lcd
from RPLCD.gpio import CharLCD
import time
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
def lireFichier(emplacement):
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu
def recupTemp(contenuFich):
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:5])
temperature = temperature / 10
return temperature
while True:
# Mettre le 28-xxxxxxxxx de votre sonde
contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxxx/w1_slave") # contenuFich la temperature
temperature = recupTemp(contenuFich)
# Affichage date/heure sur la même ligne
# %y affiche l'année sur 2 digit
lcd.cursor_pos = (0, 0)
lcd.write_string("%s" %time.strftime("%d/%m/%y %H:%M"))
# Affichage de la température
lcd.cursor_pos = (1, 0)
lcd.write_string("Temp.")
lcd.cursor_pos = (1, 6)
resultat = str(temperature) + " C" # Variable resultat contient la temperature
lcd.write_string(resultat) # Affichage de la temperature sur LCD
time.sleep(2)
lcd.clear() # Effacement LCD
Affichage Date/Heure, Température et Led
Nous ajoutons à notre montage deux leds (Rouge/Verte) et deux résistances de 220 Ohms pour nous indiquer la plage de température relevée par la sonde.
Température inférieure à 18°C
- Led Rouge allumée
- Led Verte éteinte
Température supèrieure à 18°C
- Led Rouge étiente
- Led Verte allumée
La led verte est reliée au GPIO17 - pin 11
La led rouge est reliée au GPIO18 - pin 12
Le code:
# coding:utf-8
# Utilisation d'un afficheur LCD 1602 sur Raspberry 3 B+
# Affichage date/heure et température
# avec clignotement du lcd et led verte et rouge
import RPi.GPIO as GPIO
from RPLCD.gpio import CharLCD
import time
vert=11 # Led verte
rouge=12 # Led rouge
GPIO.setmode(GPIO.BOARD) # Numérotation BOARD
GPIO.setwarnings(False)
GPIO.setup(11, GPIO.OUT) # led rouge
GPIO.setup(12, GPIO.OUT) # led verte
GPIO.output(rouge, 0) # initialisation led rouge = 0
GPIO.output(vert,0) # initialisation led verte = 0
lcd = CharLCD(cols=16, rows=2, pin_rs=37, pin_e=35, pins_data=[33, 31, 29, 23])
def lireFichier(emplacement):
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu
def recupTemp(contenuFich):
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:5])
temperature = temperature / 10
return temperature
try:
while True:
# Mettre le 28-xxxxxxxxx de votre sonde
contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxxx/w1_slave") # contenuFich la temperature
temperature = recupTemp(contenuFich)
# Affichage date/heure sur la même ligne
# %y affiche l'année sur 2 digit
lcd.cursor_pos = (0, 0)
lcd.write_string("%s" %time.strftime("%d/%m/%y %H:%M"))
# Affichage de la température
lcd.cursor_pos = (1, 0)
lcd.write_string("Temp.")
lcd.cursor_pos = (1, 6)
resultat = str(temperature) + " C" # Variable resultat contient la temperature
lcd.write_string(resultat) # Affichage de la temperature sur LCD
time.sleep(2)
lcd.clear() # Effacement LCD
# Test de la temperature - si < 20° = led rouge allumée / si > 20° led verte allumée
if temperature <= 20:
GPIO.output(rouge, 1)
GPIO.output(vert,0)
else:
GPIO.output(rouge, 0)
GPIO.output(vert,1)
except:
GPIO.cleanup() # Mise à zéro du GPIO