Warning: include(../../Obj_Stat/Article.php): failed to open stream: No such file or directory in /htdocs/Projets/Projet-3-Temperature-sur-ecran-LCD-Raspberry-Francais/index.php on line 17

Warning: include(../../Obj_Stat/Article.php): failed to open stream: No such file or directory in /htdocs/Projets/Projet-3-Temperature-sur-ecran-LCD-Raspberry-Francais/index.php on line 17

Warning: include(): Failed opening '../../Obj_Stat/Article.php' for inclusion (include_path='.:/usr/share/php') in /htdocs/Projets/Projet-3-Temperature-sur-ecran-LCD-Raspberry-Francais/index.php on line 17

Projet #3 : Afficher la température sur un écran LCD 16x02


Mis à jour le : 24/03/2016


Le projet #3 que j'ai décidé de mettre en ligne est assez simple. Un internaute m'en a donné l'idée : il voulait faire de son Raspberry une "station météo" mais avait des soucis. Je vais donc expliquer ici comment afficher la température obtenue grâce à une sonde DS18B20 sur un écran 16x02.

1  Prérequis :

Pour ce projet, il faut :

  - Un Raspberry Pi
  - Une sonde DS18B20
  - Un écran LCD 16x02
  - Des fils
  - Une résistance

Une fois le matériel obtenu, il est nécessaire de suivre ces deux tutoriels avant de commencer :

   - Installer un Ecran LCD
   - Installer une sonde de température

Une fois le matériel installé, vous pouvez passer à la suite.

2  Programation

Pour afficher la température sur l'écran LCD, j'ai un peu modifié le programme du site http://www.raspberrypi-spy.co.uk/ pour notre cas. On obtient ceci :

#import
import RPi.GPIO as GPIO
import time

# Definition des GPIO pour le LCD
LCD_RS = 7
LCD_E  = 8
LCD_D4 = 25
LCD_D5 = 24
LCD_D6 = 23
LCD_D7 = 18

# Definition de valeurs constantes
LCD_WIDTH = 16    # Maximum de charactere par ligne
LCD_CHR = True
LCD_CMD = False

LCD_LINE_1 = 0x80 # adresse LCD RAM pour la 1st ligne
LCD_LINE_2 = 0xC0 # adresse LCD RAM pour la 2nd ligne

# Delais constants
E_PULSE = 0.0005
E_DELAY = 0.0005

def main():

  GPIO.setwarnings(False)
  GPIO.setmode(GPIO.BCM)       # Use BCM GPIO numbers
  GPIO.setup(LCD_E, GPIO.OUT)  # E
  GPIO.setup(LCD_RS, GPIO.OUT) # RS
  GPIO.setup(LCD_D4, GPIO.OUT) # DB4
  GPIO.setup(LCD_D5, GPIO.OUT) # DB5
  GPIO.setup(LCD_D6, GPIO.OUT) # DB6
  GPIO.setup(LCD_D7, GPIO.OUT) # DB7

  # Initialise display
  lcd_init()

  def LireTemp ():
    tfile = open("/sys/bus/w1/devices/28-000005a1211d/w1_slave")
    text = tfile.read()
    tfile.close()
    secondline = text.split("\n")[1]
    temperaturedata = secondline.split(" ")[9]
    temperature = float(temperaturedata[2:])
    temperature = temperature / 1000
    lcd_string("Temperature :",LCD_LINE_1)
    lcd_string("%s"%temperature,LCD_LINE_2)
    print temperature

  while True:
    LireTemp()


def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):

  GPIO.output(LCD_RS, mode) # RS


  GPIO.output(LCD_D4, False)
  GPIO.output(LCD_D5, False)
  GPIO.output(LCD_D6, False)
  GPIO.output(LCD_D7, False)
  if bits&0x10==0x10:
    GPIO.output(LCD_D4, True)
  if bits&0x20==0x20:
    GPIO.output(LCD_D5, True)
  if bits&0x40==0x40:
    GPIO.output(LCD_D6, True)
  if bits&0x80==0x80:
    GPIO.output(LCD_D7, True)

  lcd_toggle_enable()

  GPIO.output(LCD_D4, False)
  GPIO.output(LCD_D5, False)
  GPIO.output(LCD_D6, False)
  GPIO.output(LCD_D7, False)
  if bits&0x01==0x01:
    GPIO.output(LCD_D4, True)
  if bits&0x02==0x02:
    GPIO.output(LCD_D5, True)
  if bits&0x04==0x04:
    GPIO.output(LCD_D6, True)
  if bits&0x08==0x08:
    GPIO.output(LCD_D7, True)

  lcd_toggle_enable()

def lcd_toggle_enable():
  time.sleep(E_DELAY)
  GPIO.output(LCD_E, True)
  time.sleep(E_PULSE)
  GPIO.output(LCD_E, False)
  time.sleep(E_DELAY)

def lcd_string(message,line):

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)
    lcd_string("Goodbye!",LCD_LINE_1)
    GPIO.cleanup()

Une fois le script lancé, l'afficheur LCD affiche la température en temps réel.

Ce projet est donc fini, en espérant vous avoir aidé. Si vous avez des problèmes, n'hésitez pas à me contacter depuis l'onglet Contact. Ce projet peut être utilisé pour afficher la valeur d'autres capteurs comme l'humidité ou autre ...

Commentaires


Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /htdocs/Obj_Stat/Menu.php:126) in /htdocs/Obj_Stat/espace_commentaire.php on line 103

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /htdocs/Obj_Stat/Menu.php:126) in /htdocs/Obj_Stat/espace_commentaire.php on line 103
Commenter
Votre adresse mail ne sera pas visible sur le site.

Seuls les commentaires jugés corrects seront mis en ligne.



Composants Bien débuter sur le Raspberry PI Configurer le Raspberry Pi
Ecran LCD 16x02 Accessoires indispensables sur Raspberry Pi Connexion sans login ni mot de passe au Raspberry
Capteur de température DS18B20 Première installation et démarage Changer le Hostname du Raspberry Pi
Afficheurs 7 segments Création et execution d'un programme Python Connexion Ethernet Raspberry/ordinateur
Capteur distance HC-SR04 Connexion au bureau depuis Windows
Bouton
Servo Moteur
Capteur de présence HC-SR501
Module RFID-RC522
Caméra sur Raspberry Pi

EspaceRaspberryFrançais | Contact | A propos & Soutiens | Facebook



En tant que Partenaire Amazon, je réalise un bénéfice sur les achats remplissant les conditions requises.

Espace-raspberry-francais.fr est hebergé par SARL LWS.