WLAN-Wetter-Station
Verfasst: Fr 5. Mär 2021, 10:33
In dem Beitrag Wetter-Station wurde schon gezeigt, wie man die Klima-Daten Temperatur, Luftfeuchtigkeit und Luftdruck auf dem Display (und ggf. auch zusätzlich auf einem Terminal ausgeben kann. An dieser Stelle möchte ich zeigen, wie man diese Daten über WLAN in einem Browser anzeigen lassen kann. Dabei soll das TTGO-Modul als Station im Heimnetzwerk arbeiten.
Wie Daten über das WLAN an einen Browser übermittelt werden habe ich ausführlich in meinem Tutorium WLAN MIT DEM ESP32 am Beispiel eines Temperatur-Servers mit dem LM75A dargestellt (Kapitel 9). Für unseren "Klima-Server" brauchen wir das dort vorgestellte Programm sta_temp_server_0.py nur an drei Stellen ergänzen bzw. abändern:
1. Bei den Importen die Zeile
ergänzen
2. Den Block
ersetzen durch
3. Die Definition der html-Funktion ergänzen; sie lautet jetzt:
Man beachte dabei:
Der Browser meines Handys zeigt die Klima-Seite z. B. so an:
.
Wie Daten über das WLAN an einen Browser übermittelt werden habe ich ausführlich in meinem Tutorium WLAN MIT DEM ESP32 am Beispiel eines Temperatur-Servers mit dem LM75A dargestellt (Kapitel 9). Für unseren "Klima-Server" brauchen wir das dort vorgestellte Programm sta_temp_server_0.py nur an drei Stellen ergänzen bzw. abändern:
1. Bei den Importen die Zeile
Code: Alles auswählen
import Bme280 # (Das Modul bme280.py finden Sie in der Anlage; es muss vorher auf den ESP32 hochgeladen werden.)
2. Den Block
Code: Alles auswählen
i2c = I2C(scl=Pin(22), sda=Pin(21), freq= 100000)
adr = 0x48 # 7-Bit-Adresse im HEX-Format
def messwert():
rohwert = i2c.readfrom_mem(adr, 0, 2)
temp_wert = rohwert[0] + rohwert[1]/256
return str(temp_wert)
Code: Alles auswählen
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=10000)
bme = Bme280.BME280(i2c=i2c)
Code: Alles auswählen
def html():
return ''' <html>
<head>
<title>Temperaturmessung</title>
</head>
<body>
<h1>
<p> <font color='green'> Klima-Daten... </font><BR><BR>
</p><p>Temperatur:
''' + bme.temperature + ''' °C
</p><p> Luftfeuchtigkeit:
''' + bme.humidity + ''' %
</p><p>Luftdruck:
''' + bme.pressure + ''' hPa
</p></h1>
</body>
</html>
'''
- Die Properties temperature, humidity und pressure des Objekts bme liefern stets einen aktuellen Messwert.
- Das Zeichen für ° wird in html mit ° kodiert.
Code: Alles auswählen
# Klima-Daten-Server mit BME280
# Zum Beenden des Server-Programms: Ctrl-C.
# Vor dem Neustart Hard Boot mit Reset-Taster auslösen!
import network
import socket
from machine import Pin, I2C
from time import time
import Bme280 # Groß/Klein-Schreibung hier egal
# ESP32 - Pin assignment
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=10000)
bme = Bme280.BME280(i2c=i2c)
# Wlan-Zugangsdaten; hier Ihre Wlan-Daten eintragen:
ssid = 'meine SSID'' # ersetzen!
password = 'mein Passwort' #ersetzen!
def html():
return ''' <html>
<head>
<title>Temperaturmessung</title>
</head>
<body>
<h1>
<p> <font color='green'> Klima-Daten... </font><BR><BR>
</p><p>Temperatur:
''' + bme.temperature + ''' °C
</p><p> Luftfeuchtigkeit:
''' + bme.humidity + ''' %
</p><p>Luftdruck:
''' + bme.pressure + ''' hPa
</p></h1>
</body>
</html>
'''
def http_header():
return '''HTTP/1.1 200 OK\r
Content-Type: text/html\r
Connection: close\r
\r
'''
# Konfiguration des Wlans:
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
time0 = time()
while (not station.isconnected()) and (time() - time0 < 5):
pass
if station.isconnected():
# Konfiguration des Sockets
print('Wlan connected')
print(station.ifconfig()) # zur Information
s = socket.socket() # Socket des Servers
s.bind(('', 80))
s.listen(5)
print('Server listening')
print('--------------------------------------')
# Daten holen
counter = 0
while True:
connection, addr = s.accept()
print("Client connected: ", addr)
connection.send(http_header())
connection.send(html())
connection.close()
station.active(False)
print('Wlan deactivated')
print('Please reset!')
Der Browser meines Handys zeigt die Klima-Seite z. B. so an:
.