Full Webserver auf dem NodeMCU ESP32 mit Python installieren

Die wohl interessanteste Anwendung für den NodeMCU ESP32 ist der Webserver. Dieses Beispielscript in MicroPython realisiert einen vollständigen Webserver mit dem zunächst die LED an Pin 2 des DevKit ferngesteuert werden kann. Mit diesem Projekt steht dem weiteren Ausbau nichts mehr im Wege.

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.

Autor

About me


Mein Name ist Oliver Lohse. Ich bin diplomierter Wirtschafts-Informatiker und Organisations-Programmierer in verschiedenen Programmier-Sprachen und Markup-Dialekten, z.B. Java, JEE, COBOL, PHP, Python, MySQL, HTML, CSS, ANSI C, Lisp, Rexx, JavaScript, Scheme, ActionScript 2.0, Maschinensprache, Assembler und JCL. Seit mehr als 24 Jahren arbeite ich als Entwickler in einem großen Softwareunternehmen für Versicherungen in Hannover Niedersachsen und seit etwa 37 Jahren im EDV-Sektor mit wechselnden Aufgaben.

Meta: Instagram CMSWorkbench.de GIMP-Handbuch.de Kontakt Impressum Datenschutz