Raspberry - Afficher une température sur un LCD

temperature


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

lcd-ds18b20-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

 Avant de mettre sous tension, vérifier votre cablage, une erreur pourrait etre fatale pour le Raspberry et/ou le LCD 

Nous ajoutons la sonde DS18B20

Cablage de la sonde DS18B20 voir les pages:


Câblage de la sonde DS18B20

  • Rouge = +Vcc
  • Noir = Gnd
  • Jaune = GPIO4 - Pin7

Résistance de 4700 Ohms entre +Vcc et GPIO4 - Pin7



Affichage de la température

  • lcd-ds18b20-code
  • lcd-ds18b20-temperature


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

  • lcd-date-temp-code
  • lcd-date-temp

Nous affichons la date/heure du jour et 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+
# 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

  • lcd-date-temp-led-code
  • lcd-date-temp-led-verte
  • lcd-date-telp-led-rouge


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