Raspberry Pi Pico Essentials - Ein Beispiel-Kapitel: WLAN mit dem Raspberry Pi Pico
UPDATE: Das Buch "Raspberry Pi Pico" von Dogan Ibrahim ist jetzt auch in deutscher Sprache erhältlich!
In diesem Artikel werden wir ein Projekt entwickeln, das eine WLAN-Verbindung nutzt, um die Kommunikation zwischen dem Raspberry Pi Pico und einem Smartphone herzustellen.
WLAN-Steuerung einer LED von einem Smartphone aus
Beschreibung: In diesem Projekt werden wir Befehle von einem Mobiltelefon über die WLAN-Verbindung senden, um eine LED zu steuern, die mit dem Raspberry Pi Pico verbunden ist. Die LED kann beispielsweise durch ein Relais ersetzt werden, um ein Gerät zu schalten. Die Befehle müssen mit einem Return (CR/LF oder newline) abgeschlossen werden. Gültige Befehle sind:
LON | Turn LED ON |
LOFF | Turn LED OFF |
Ziel: Das Ziel dieses Projekts ist es, die Verwendung der WLAN-Konnektivität auf dem Raspberry Pi Pico zu demonstrieren.
Pico WLAN-Konnektivität: Der Raspberry Pi Pico verfügt über kein eingebautes WLAN-Modul und kann daher nicht direkt mit einem WLAN verbunden werden. Dazu ist ein externes WLAN-Modul erforderlich. Die vielleicht einfachste und billigste Möglichkeit, dem Pico WLAN-Fähigkeit zu verleihen, ist eine ESP-01-Prozessorplatine. Das winzige Board (siehe Bild 1), das nur 2,7 cm × 1,2 cm misst, basiert auf einem ESP8266-Prozessor und kostet etwa 4...5 €. Der ESP-01 besitzt die folgenden zu Experimenten motivierenden Eigenschaften:
- Betriebsspannung: +3,3 V
- Schnittstelle: mit einfachen AT-Befehlen über serielle Schnittstelle/UART
- Integrierter TCP/IP-Protokollstack
- 802.11 b/g/n
- Keine externen Bauteile erforderlich
Das ESP-01 kommuniziert mit dem Host-Prozessor über die TX- und RX-Pins der seriellen Schnittstelle. Es handelt sich um eine 8-polige Platine mit der folgenden Pinbelegung:
Die Pins des ESP-01 sind mechanisch nicht mit einem Standard-Breadboard-kompatibel, daher wird ein Adapter benötigt, wenn die Platine auf einem Steckboard befestigt werden soll (Bild 2).
Blockschaltbild: Bild 3 zeigt das Blockschaltbild des Projekts.
Programmlisting: Listing 1 zeigt das Listing des Programms Picowifi. Es ist in der Sammeldatei enthalten, die unter Downloads auf der Elektor-Webseite zum Buch zu finden ist [1]. In der Setup-Routine wird die serielle Kommunikationsgeschwindigkeit auf 115.200 eingestellt, was der Standard-Baudrate des SP-01 entspricht. Der LED-Pin wird als Ausgang konfiguriert und ausgeschaltet. Die Funktion ConnectToWiFi wird aufgerufen, um eine Verbindung mit dem lokalen WLAN-Router herzustellen. Es werden AT-ähnliche Befehle verwendet, um das ESP-01-Board für die Verbindung mit dem WLAN-Router zu konfigurieren.
# USING WI-FI
# ===========
#
# In this project a ESP-01 chip is connected to the Raspberry
# Pi Pico. This chip is used to connect the Pico to the Wi-Fi
#
# Author: Dogan Ibrahim
# File : Picowifi.py
# Date : February 2021
#------------------------------------------------------------
from machine import Pin, UART
import utime
uart = UART(0, baudrate=115200,rx=Pin(1),tx=Pin(0))
LED = Pin(16, Pin.OUT)
LED.value(0)
#
# Send AT commands to ESP-01 to connect to local WI-Fi
#
def ConnectToWiFi():
uart.write("AT+RST\r\n")
utime.sleep(5)
uart.write("AT+CWMODE=1\r\n")
utime.sleep(1)
uart.write(’’’AT+CWJAP="BTHomeSpot-XNH","49345xyzpq"\r\n’’’)
utime.sleep(5)
uart.write("AT+CPIMUX=0\r\n")
utime.sleep(3)
uart.write(’’’AT+CIPSTART="UDP","0.0.0.0",5000,5000,2\r\n’’’)
utime.sleep(3)
ConnectToWiFi()
#
# Main program loop
#
while True:
buf = uart.readline() # Read data
dat = buf.decode(’UTF-8’) # Decode
n = dat.find("LON") # Includes LON?
if n > 0:
LED.value(1) # LED ON
n = dat.find("LOFF") # Includes OFF?
if n > 0:
LED.value(0) # LED OFF
Der Rest des Programms läuft in einer Endlosschleife, die mit einer while-Anweisung erzeugt wird. Innerhalb dieser Schleife werden Daten vom Smartphone empfangen und die LED entsprechend gesteuert. Die Befehle LON und LOFF schalten die LED ein und aus. Die Datenpakete werden mit der Funktion readline vom Smartphone empfangen. Die Funktion find sucht nach einer Teilzeichenkette in einem String und gibt einen Wert ungleich null zurück, wenn die Teilzeichenkette gefunden wird. Die Funktion find erkennt, wenn die Daten, die vom mobilen Gerät empfangen werden, das folgende Format haben: +ID0,n: data (zum Beispiel +ID0,3:LON), wobei 0 die Link-ID und n die Anzahl der empfangenen Zeichen ist. Mit der Funktion find können wir also einfach nach den Zeichenketten LON oder LOFF im empfangenen Datenpaket suchen.
Die Funktion ConnectToWiFi sendet die folgenden Befehle an den ESP-01, um eine Verbindung zum WLAN herzustellen:
Beachten Sie, dass nach jedem Befehl eine kurze Verzögerung eingefügt wird. Der Befehl AT+CWJAP erfordert eine längere Verzögerung. Das Programm kann leicht modifiziert werden, indem die Verzögerungen entfernt und stattdessen die Antworten des ESP-01 überprüft werden. Auf diese Weise wird das Programm fortgesetzt, sobald die richtige Antwort eingetroffen ist. Eventuell müssen Sie einen Hardware-Reset des ESP-01 durchführen, also das Gerät aus- und wieder einschalten, bevor Sie das Programm starten.
Testen des Programms
Das Programm kann einfach mit dem Programm PacketSender (Bild 5) auf dem PC oder mit einem Android-Smartphone nach der Installation einer UDP-Server-App getestet werden.
Von den vielen frei verfügbaren UDP-Apps im Play Store installieren und verwenden Sie UDP/TCP Widget von K.J.M (Bild 6).
Die Schritte zum Testen des Programms sind:
- Bauen Sie die Schaltung auf.
- Laden Sie das Programm auf Ihren Raspberry Pi Pico.
- Starten Sie die App UDP/TCP Widget auf Ihrem Mobiltelefon.
- Klicken Sie auf das Zahnradsymbol und stellen Sie das Protokoll auf UDP, die IP-Address auf die IP-Adresse Ihres Raspberry Pi Pico (192.168.1.160 beim Pico des Autors) und den Port auf 5000 ein, wie in Bild 7 gezeigt.
- Klicken Sie auf den Menüpunkt MESSAGE, wählen Sie Text (UTF-8) als Format und geben Sie den Befehl LON ein, um die LED einzuschalten. Wählen Sie LF\n als Terminator und klicken Sie auf das OK-Symbol (Häkchen), wie in Bild 8 dargestellt.
- Klicken Sie nun auf SEND (Bild 9), um den Befehl an den Raspberry Pi Pico zu senden. Sie sollten die Meldung Packet Sent am oberen Rand Ihres Android-Bildschirms vorübergehend angezeigt sehen.
Die IP-Adresse des ESP-01 kann durch Scannen aller Geräte im lokalen WLAN-Router ermittelt werden. Sie können beispielsweise die Android-App „Who Uses My WiFi - Network Scanner“ von Phuongpn verwenden, um die IP-Adressen aller mit Ihrem Router verbundenen Geräte zu sehen. Der ESP-01 wird wie in Bild 10 gezeigt mit dem Namen Espressif aufgelistet (IP: 192.168.1.160).
Anmerkung der Redaktion: Dieser Artikel ist ein Auszug aus dem Kapitel 10 des Buchs Raspberry Pi Pico Essentials, neu formatiert und leicht bearbeitet, um den Standards und dem Seitenlayout der Zeitschrift Elektor zu entsprechen. Da es sich um einen Auszug aus einer größeren Publikation handelt, können sich einige Begriffe in diesem Artikel auf Diskussionen an anderer Stelle des Buchs beziehen. Der Autor und die Redaktion haben jedoch ihr Bestes getan, um solche Fälle zu vermeiden, und helfen bei Rückfragen gerne weiter. Kontaktinformationen finden Sie im Kasten Fragen oder Kommentare?