Dass Modul benutzt eine Eindraht-Schnittstelle (One Wire). Wie diese Schnittstelle funktioniert, habe ich in diesem Beitrag dargestellt. Insbesondere habe ich dort auch darauf hingewiesen, dass zum Betrieb des DHT11-Sensors ein Pullup-Widerstand erforderlich ist; ein solcher Widerstand befindet sich bereits auf der Platinen-Version (KY-015).
Zur Programmierung können wir für unseren TTGO auf ein Micropython-Modul zurückgreifen, welches an dieser Stelle kurz beschrieben wird.
In diesem Beitrag zeigen wir zunächst, wie mit diesem Micropython-Modul Daten erfasst und im Terminal (von Thonny) angezeigt werden können. Anschließend wird dargestellt, wie der TTGO die Messwerte auch auf dem Display anzeigen kann.
1. Anschließen des DHT11 an den TTGO
DHT11 | TTGO |
+ | 3V |
Out | Pin 25 |
- | G |
2. Programm für Terminal-Anzeige
Code: Alles auswählen
# DHT11_messung_0.py
from time import sleep
import dht
import machine
d = dht.DHT11(machine.Pin(25))
print('DHT11')
while True:
d.measure()
t = d.temperature()
h = d.humidity()
print('Temperatur:', t, '°C ', 'Luftfeuchtigkeit:', h, '%')
sleep(2)
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
File "dht.py", line 1, in measure
OSError: [Errno 116] ETIMEDOUT
Das Time-Out ist hier darauf zurückzuführen, dass diese Pins nur als Eingang dienen können: Da sie kein Signal ausgeben können, wartet das Programm vergeblich auf eine Antwort...
Um einen solchen Fehler (oder andere wie z. B. eine falsche Verkabelung

Code: Alles auswählen
try:
d.measure()
t = d.temperature()
h = d.humidity()
print('Temperatur:', t, '°C ', 'Luftfeuchtigkeit:', h, '%')
sleep(2)
except OSError as e:
print('Fehler beim Lesen des Sensors!')
3. Programm für die Anzeige auf dem TTGO-Display
Code: Alles auswählen
# DHT11_messung_1a.py
from time import sleep
from machine import Pin, SPI
import st7789
import vga2_16x16 as font1 # normal
import vga2_bold_16x32 as font2 # fett
spi = SPI(1, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19))
display = st7789.ST7789(spi, 135, 240, reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3)
# Landscape
bg_color = 222
display.init()
display.fill(bg_color)
import dht
d = dht.DHT11(Pin(25))
print('DHT11-Messwerte:')
display.text(font2, 'DHT11', 85, 10, st7789.WHITE, bg_color)
while True:
d.measure()
t = d.temperature()
h = d.humidity()
print('Temperatur:', t, '°C ', 'Luftfeuchtigkeit:', h, '%')
t_bytes = bytes('Temp: ' + str(t) + ' ', 'UTF-8')
display.text(font1, t_bytes + b'\xF8C ', 20, 55, st7789.WHITE, bg_color)
display.text(font1, 'Hum: ' + str(h) + ' % ', 20, 80, st7789.WHITE, bg_color)
sleep(2)
4. Programm für die Anzeige auf dem TTGO-Display (wie unter Punkt 3), jedoch auch mit Speicherung der Messdaten
Code: Alles auswählen
# DHT11_messung_2.py
from time import sleep
import os
from machine import Pin, SPI
import st7789
import vga2_16x16 as font1 # normal
import vga2_bold_16x32 as font2 # fett
spi = SPI(1, baudrate=20000000, polarity=1, sck=Pin(18), mosi=Pin(19))
display = st7789.ST7789(spi, 135, 240, reset=Pin(23, Pin.OUT), cs=Pin(5, Pin.OUT), dc=Pin(16, Pin.OUT), backlight=Pin(4, Pin.OUT), rotation=3)
# Landscape
bg_color = 222
display.init()
display.fill(bg_color)
# file_name = input('Dateiname:')
file_name = 'Messreihe.txt'
def save_data(file_name, time, t, h):
f = open(file_name, 'a') # Daten an (ggf. bestehende) Datei anhängen
try:
f.write(str(time) + ',' + str(t) + ',' + str(h) + "\n")
finally:
f.close()
import dht
d = dht.DHT11(Pin(25))
print('DHT11-Messwerte:')
display.text(font2, 'DHT11', 85, 10, st7789.WHITE, bg_color)
delta_t = 60 * 30 # Messintervall in s, hier 0,5 h
nr = 0 # Nummer der Messung
while True:
d.measure()
t = d.temperature()
h = d.humidity()
time = nr * delta_t # Zeit in s
save_data(file_name, time, t, h)
print('Temperatur:', t, '°C ', 'Luftfeuchtigkeit:', h, '%')
t_bytes = bytes('Temp: ' + str(t) + ' ', 'UTF-8')
display.text(font1, t_bytes + b'\xF8C ', 20, 55, st7789.WHITE, bg_color)
display.text(font1, 'Hum: ' + str(h) + ' % ', 20, 80, st7789.WHITE, bg_color)
sleep(delta_t)
nr += 1
.