Raspberry Pi PICO WiFi ESP8266 Webserver mit der NodeMCU

Einen WLAN Webserver mit dem Raspberry Pi Pico und dem ESP8266 NodeMCU

Einkaufsliste zum Beitrag

In diesem Beitrag erfahren wir, wie Sie das ESP8266-WLAN-Modul mit dem RP2040-Raspberry-Pi-Pico-Board unter Verwendung von MicroPython-Code verwenden und unseren eigenen Webserver erstellen.

Über den RP2040

Das Raspberry Pi Pico RP2040-Board verfügt über einen Dual-Core-Arm-Cortex-M0+-Prozessor mit 264 KB internem RAM und bis zu 16 MB Off-Chip-Flash. Der RP2040 ist im Vergleich zu Arduino viel schneller, hat jedoch eine Einschränkung der drahtlosen Netzwerkkonnektivität. Aus diesem Grund kann Raspberry Pi Pico allein nicht für drahtlose und IoT-bezogene Anwendungen verwendet werden. Daher könnte ein kostengünstiges ESP8266-WLAN-Modul eine gute Wahl sein, um Raspberry Pi Pico um drahtlose Konnektivität zu erweitern.

AT Befehle

Hier in diesem Tutorial demonstrieren wir die einfache Webserver-Funktionalität von Raspberry Pi Pico mit dem ESP8266 WiFi-Modul. Der Satz von AT-Befehlen ist im Programmspeicher des ESP8266 vorinstalliert und erfordert keine zusätzliche Programmierung. Wir werden diese spezifischen Befehle über die serielle Schnittstelle (UART) von Raspberry Pi Pico senden. Die Codierung erfolgt in MicroPython und das Gerät wird mit der Thonny IDE programmiert. Der Webserver zeigt den Messwert des On-Chip-Temperatursensors auf einer Webseite an, die im Webbrowser ausgeführt wird.

Einkaufsliste

Die Einkaufsliste finden Sie rechts oben neben dem Beitrag.

Schaltungsaufbau

Lassen Sie uns nun sehen, wie wir das ESP8266 WiFi-Modul mit dem RP2040 Raspberry Pi Pico Board verbinden können. Hier ist ein einfacher Anschlussplan.

ESP8266 und Raspberry Pi Pico als WebserverESP8266 und Raspberry Pi Pico als Webserver

Der Raspberry Pi Pico hat zwei eingebaute UART. In diesem Design verwenden wir UART-0. In ähnlicher Weise beträgt die Standard-Baudrate des ESP8266 115200. Wir müssen den Raspberry Pi Pico mit derselben Baudrate konfigurieren, um die Synchronisierung mit dem ESP8266 aufrechtzuerhalten.

Verbinden Sie den VCC- und EN-Pin des ESP8266 mit dem Pico 3,3-V-Pin und verbinden Sie GND mit GND. Verbinden Sie in ähnlicher Weise Tx und RX von ESP8266 mit Pico UART-O Pin, dh Rx & Tx.

ESP8266 und Raspberry Pi Pico als WebserverVerkabelung

Der Quellcode des Webservers mit dem Pico

Hier ist der vollständige MicroPython-Code für den RP2040 Raspberry Pi Pico-Webserver mit ESP8266. Der Code muss nicht geändert werden, da wir keine Verbindung zu einem WLAN-Netzwerk herstellen, sondern den Webserver über den vom ESP-Modul erstellten Zugangspunkt erstellen.

Wir lesen die Temperaturdaten vom internen Temperatursensor und senden sie über eine Webseite, die von jedem Webbrowser abgerufen werden kann.

...  #Code for Simple Rasberry Pi PICO Web server
...  #Using ESP8266 wifi module
...  from machine import UART
...  import machine
...  import _thread
...  import time
...  uart = UART(0,115200)
...  print('UART Serial')
...  print('>', end='')
...  def uartSerialRxMonitor(command):
...      recv=bytes()
...      while uart.any()>0:
...          recv+=uart.read(1)
...      res=recv.decode('utf-8')
...      erase_len=len(command)+5
...      res = res[erase_len:]
...      return res
...  #configure as SoftAP+station mode
...  send='AT+CWMODE=3'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  #Set SoftAP name
...  send='AT+CWSAP="RPI-AP","",11,0,3'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  res=uartSerialRxMonitor(send)
...  print(res)
...  #enable multi connection mode
...  send='AT+CIPMUX=1'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  res=uartSerialRxMonitor(send)
...  print("Configured as Dual mode ->" + res)
...  # Enable the TCP server with port 80,
...  send='AT+CIPSERVER=1,80'
...  uart.write(send+'\r\n')
...  time.sleep(2)
...  res=uartSerialRxMonitor(send)
...  print("Server configured successfully-> "+res)
...  #temperature reading
...  sensor_temp = machine.ADC(4)
...  conversion_factor = 3.3 / (65535)
...  #Here the code runs indefinitely
...  while True:
...      #temperature reading
...      reading_temp = sensor_temp.read_u16() * conversion_factor
...      temperature = 27 - (reading_temp - 0.706)/0.001721
...      #Place basic code for HTML page display
...      val='<head><title>Pi Pico Server</title></head><body><p>Temperature: '+str(int(temperature))+' deg'+'</p></body>'
...      print(val)
...      length=str(len(val))
...   
...      send='AT+CIPSEND=1,'+length
...      uart.write(send+'\r\n')
...      time.sleep(2)
...      res=uartSerialRxMonitor(send)
...      print("Data sent-> "+res)
...      send=val
...      uart.write(send+'\r\n')
...      time.sleep(10)

Beschreibung des Codes

Zunächst werden die benötigten Bibliotheken des MicroPython geladen.

...  from machine import UART
...  import machine
...  import _thread
...  import time

Dann konfigurieren wir UART-0 von Raspberry Pi Pico mit einer Baudrate von 115200 und Druckstatus in einem seriellen Terminal.

...  uart = UART(0,115200)
...  print('UART Serial')
...  print('>', end='')

Dann konfigurieren wir den ESP8266 im Soft AP+ Station Modus mit dem Befehl AT+CWMODE=3. Dieser Befehl wird über den UART von Pico gesendet. Um den Namen des Access Points festzulegen, verwenden wir AT+CWSAP (ich habe den Namen RPI-AP gewählt). Für die aktuelle Konfiguration ist kein Passwort gesetzt.

...  send='AT+CWMODE=3'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  #Set SoftAP name
...  send='AT+CWSAP="RPI-AP","",11,0,3'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  res=uartSerialRxMonitor(send)
...  print(res)

Aktivieren Sie mit AT+CIPMUX=1 die Mehrfachverbindung für das ESP-Modul.

...  #enable multi connection mode
...  send='AT+CIPMUX=1'
...  uart.write(send+'\r\n')
...  time.sleep(1)
...  res=uartSerialRxMonitor(send)
...  print("Configured as Dual mode ->" + res)

Starten Sie dann den Server, der auf Port 80 ausgeführt wird. Drucken Sie auch den Status auf dem seriellen Terminal aus.

...  send='AT+CIPSERVER=1,80'
...  uart.write(send+'\r\n')
...  time.sleep(2)
...  res=uartSerialRxMonitor(send)
...  print("Server configured successfully-> "+res)

Lesen Sie die internen Temperatursensordaten der Pico-Platine und konvertieren Sie sie mit der eingebauten Funktion von Python in eine 16-Bit-Ganzzahl ohne Vorzeichen. Sie können im vorherigen Beitrag mehr über den internen Temperatursensor erfahren.

...  sensor_temp = machine.ADC(4)
...  conversion_factor = 3.3 / (65535)

Dann starten wir die Endlosschleife. Die Funktion time.sleep() bietet ein gewisses Anhalten/Warten vor der Ausführung der nächsten Zeile. Der Befehl AT+CIPSEND leitet die Datenübertragung ein. Nachdem dieser Befehl an ESP gesendet wurde, wird als nächstes die Datenfolge gesendet. Der HTML-Code in val zeigt Daten auf einer Webseite an.

...  while True:
...      #temperature reading
...      reading_temp = sensor_temp.read_u16() * conversion_factor
...      temperature = 27 - (reading_temp - 0.706)/0.001721
...      #Place basic code for HTML page display
...      val='<head><title>Rasberry Pi Pico Server</title></head><body><p>Temperature is: '+str(int(temperature))+' deg'+'</p></body>'
...      print(val)
...      length=str(len(val))
...   
...      send='AT+CIPSEND=1,'+length
...      uart.write(send+'\r\n')
...      time.sleep(2)
...      res=uartSerialRxMonitor(send)
...      print("Data sent-> "+res)
...      send=val
...      uart.write(send+'\r\n')
...      time.sleep(10)

Testen des Raspberry Pi Pico WiFi Webserver mit ESP8266

Zunächst ist es wichtig, den Code als main.py zu speichern, nicht als boot.py! Wenn Sie den Code auf dem Raspberry Pi Pico speichern und starten, erscheinen einige Ausgaben auf der Konsole der Thonny-IDE. Die einzelnen Schritte und Verarbeitungen der AT-Befehle werden ausgegeben.

Starten Sie die Netzwerkansicht unter Windows oder verbinden sich mit dem Access-Point RPI-AP den Sie im Code festgelegt haben. Danach öffnen Sie den Web-Browser und geben die IP-Adresse 192.168.4.1 in der Adresszeile ein. Nach wenigen Sekunden erhalten Sie die kontinuierliche Ausgabe der CPU-Temperatur des Raspberry Pi als Webseitenansicht.

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