Raspberry Pi: Temperatur & Luftfeuchtigkeit auf einem LCD-Display

Zielgruppe:

Pfadfinderinnen- und Pfadfinderstufe

Zielsetzung:

Mit dem Temperatur/Luftfeuchtigkeits-Sensor messen wir die Werte in der Umgebung und geben das Ergebnis auf einem LCD-Display aus.

Dauer:

ca. 60 Minuten

Material:

  • Raspberry Pi
  • Breadboard
  • Temperatur/Luftfeuchtigkeits-Sensor
  • LCD-Modul
  • Jumper-Kabel
  • Kabel

lcd-modul_dht11_raspberrypi_material_steckplatine

benötigte Bibliotheken:

Die Vorbereitungen zum Temperatur/Luftfeuchtigkeits-Sensor müssen unbedingt angeschlossen sein!
Der Blog-Beitrag ist Voraussetzung:

Raspberry Pi: Temperatur & Luftfeuchtigkeit messen

Aufbau

Für das Experiment wird ein fertiger Temperatur/Luftfeuchtigkeits-Sensor verwendet.

IMG_5666Für den Versuch ist es wichtig, dass die Anschlüsse auf dem Temperatur/Luftfeuchtigkeits-Sensor richtig verdrahtet werden!

Anschlüsse Temperatur/Luftfeuchtigkeits-Sensor

IMG_5663_rtempfeuchte_kabel

  • Braun – Masse (GND)
  • Rot – +5 Volt
  • Neon-Gelb – Signal

Anschlüsse LCD-Modul

display_anschluesse_IMG_5677

Die Verkabelung ist einfach:

  • GND wird mit dem GND Kontakt
  • VCC mit dem 5V Kontakt
  • SDA mit dem SDA Kontakt
  • SCL mit dem SCL Kontakt

für den I²C-Bus auf dm Display benötigen wir noch die passenden Erweiterungen in Python.
Öffne das Terminal und führe folgende Befehle aus:
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus

Standardmäßig ist der I²C-Bus deaktiviert. Für den Versuch aktiviere den I²C-Bus.
Die kannst du direkt in der grafischen Oberfläche erledigen.

#!/usr/bin/python
import time
import smbus
import Adafruit_DHT

sensor = Adafruit_DHT.DHT11
pin = 4

# Define some device parameters
I2C_ADDR  = 0x27 # I2C device address
LCD_WIDTH = 16   # Maximum characters per line

# Define some device constants
LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On
#LCD_BACKLIGHT = 0x00  # Off

ENABLE = 0b00000100 # Enable bit

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005

#Open I2C interface
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
bus = smbus.SMBus(1) # Rev 2 Pi uses 1

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):
  # Send byte to data pins
  # bits = the data
  # mode = 1 for data
  #        0 for command

  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT

  # High bits
  bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)

  # Low bits
  bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  # Toggle enable
  time.sleep(E_DELAY)
  bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

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

def main():
  # Main program block

  # Initialise display
  lcd_init()

  lcd_string("",LCD_LINE_1)
  lcd_string("",LCD_LINE_2)

  while True:

    
    time.sleep(1)
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
    if humidity is not None and temperature is not None:
    			lcd_string('Temp.: {0:0.1f} C'.format(temperature),LCD_LINE_1)
			lcd_string('Humidity: {0:0.1f} %'.format(humidity),LCD_LINE_2)
                        #print('Temp={0:0.1f}*C  Feuchtigkeit={1:0.1f}%'.format(temperature, humidity))
    else:
                        print('Fehler beim Einlesen der Daten. Starte einen weiteren Versuch!')

time.sleep(1)

if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)

Arbeitsblatt & Programmcode zum Download

Wie starte ich das Python-Skript auf meinem Raspbery Pi?

  1. Öffne IDLE von der Hauptnavigation (Menu>Entwicklung>Python 2 (IDLE).
  2. Erstelle eine neue Datei: Klicke auf File > New file.
  3. Speichere die neue Datei: Klicke auf File > Save. Speichere die Datei als dht11-lcd-i2c.py.
  4. Kopiere den Programmcode in die neue Datei. Speichere die Änderungen.
  5. Starte das Programm mit F5.

Nach ein paar Sekunden sollte eine Anzeige auf dem LCD-Display erfolgen.

20161008_204801_web

 

Kommentare sind geschlossen.