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:
.