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.

Raspberry Pi Pico Essentials

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
 
 ESP-01 processor board for Raspberry Pi Pico project
Bild 1. ESP-01-Prozessorplatine mit Anschlussbelegung.

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

ESP-01 breadboard adapter for Raspberry Pi Pico project
Bild 2. Das ESP-01-Breadboard-Adapter.

Blockschaltbild: Bild 3 zeigt das Blockschaltbild des Projekts.

Block diagram of the Raspberry Pi Pico project.
Bild 3. Blockschaltbild des Projekts.
 
 
Schaltplan: Bild 4 zeigt den Schaltplan des Projekts. Für die Kommunikation mit dem ESP-01 werden die UART0-Pins TX und RX des Raspberry Pi Pico verwendet.
 
Circuit diagram of the project.
Bild 4. Schaltplan 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:

commands to the ESP-01

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.

Using the PacketSender to test the program
Bild 5. Der PacketSender wird zum Testen des Programms verwendet.

Von den vielen frei verfügbaren UDP-Apps im Play Store installieren und verwenden Sie UDP/TCP Widget von K.J.M (Bild 6).

UDP/TCP Widget apps for Android.
Bild 6. UDP/TCP-Widget-App für Android.

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.
 
 Configuring the app.
Bild 7. Konfigurieren der App.
Command to turn ON the LED.
Bild 8. Befehl zum Einschalten der LED.
Click SEND to transmit
Bild 9. Klicken Sie auf SEND, um den Befehl zu übertragen.

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

Finding the  ESP-01 IP address
Bild 10. Ermitteln der IP-Adresse des ESP-01.


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?
 

Fragen oder Kommentare zum Raspberry Pi Pico?

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Dann schreiben Sie dem Autor eine E-Mail an d.ibrahim@btinternet.com oder Elektor an editor@elektor.com.