Einkaufsliste zum Beitrag
Der Webserver auf der NodeMCU ESP32 ist in zwei Datein unterteilt. Die Definitionen und Initialisierungen finden beim Bootvorgang statt (boot.py) da diese immer als erstes gestartet wird. Im Anchluss daran wird der Hauptteil des Programmes ausgeführt (main.py).
boot.py
Das Bootscript ist das erste Script das die ESP32 nach dem Starten ausführt.
001 try:
002 import usocket as socket
003 except:
004 import socket
005
006 from machine import Pin
007 import network
008
009 import esp
010 esp.osdebug(None)
011
012 import gc
013 gc.collect()
014
015 ssid = 'Vodafone-941C'
016 password = 'xmasxmas'
017
018 station = network.WLAN(network.STA_IF)
019
020 station.active(True)
021 station.connect(ssid, password)
022
023 while station.isconnected() == False:
024 pass
025
026 print('Connection successful')
027 print(station.ifconfig())
028
029 led = Pin(2, Pin.OUT)
Das Boot-Script läd zunächst alle benötigten Bibliotheken und spannt das WLAN der ESP auf.
main.py
Im Anschluss an den Bootvorgang prüft die ESP32 ob es eine main.py gibt die sie dann ebenfalls startet und deren Anweisungen ausführt.
001 def web_page():
002 if led.value() == 1:
003 gpio_state="ON"
004 else:
005 gpio_state="OFF"
006
007 html = """<html><head> <title>ESP Web Server</title>
008 <meta name="viewport" content="width=device-width, initial-scale=1">
009 <link rel="icon" href="data:,">
010 <style>html{font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;}
011 h1{color: #0F3376; padding: 2vh;}
012 p{font-size: 1.5rem;}
013 .button{display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
014 .button2{background-color: #4286f4;}</style>
015 </head><body>
016 <h1>ESP Web Server</h1>
017 <p>GPIO state: <strong>""" + gpio_state + """</strong></p>
018 <p><a href="/?led=on"><button class="button">ON</button></a></p>
019 <p><a href="/?led=off"><button class="button button2">OFF</button></a></p></body></html>"""
020 return html
021
022 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
023 s.bind(('', 80))
024 s.listen(5)
025
026 while True:
027 conn, addr = s.accept()
028 print('Got a connection from %s' % str(addr))
029 request = conn.recv(1024)
030 request = str(request)
031 print('Content = %s' % request)
032 led_on = request.find('/?led=on')
033 led_off = request.find('/?led=off')
034 if led_on == 6:
035 print('LED ON')
036 led.value(1)
037 if led_off == 6:
038 print('LED OFF')
039 led.value(0)
040
041 response = web_page()
042 conn.send('HTTP/1.1 200 OK\n')
043 conn.send('Content-Type: text/html\n')
044 conn.send('Connection: close\n\n')
045 conn.sendall(response)
046 conn.close()
Server starten
Um den Server und die beiden Programme zu starten, müssen Sie kurz die EN-Taste drücken, damit der ESP32 vollständig durchstartet und beide Scripte im Arbeitsspeicher nacheinander ausführt. In der REPL des Thonny erscheint die IP Adresse mit der Sie sich via Smartphone oder PC verbinden können.
Der Server der ESP32 meldet sich im Browser mit dem oben zu sehenden Bildschirm, über den die interne LED ein und ausgeschaltet werden kann.