erste Schritte mit dem Raspberry Pi Pico W

Für die ersten Schritte mit dem Raspberry Pi Pico W benutze ich den Hardwareaufbau aus dem Python GPIO Post.

Material

Ich benutze folgendes Material:

  • Raspberry Pico W
  • Breadboard fullsize
  • USB A to Micro-USB Kabel
  • Vorwiderstand 220Ω
  • PullUp Widerstand 10kΩ
  • Taster vierpolig quadratisch
  • LED rot
  • Jumper-Kabel m-m

Schaltungsaufbau

Die Anode der LED wird über den 220Ω Widerstand mit dem GPIO Pin 15 verbunden, die Kathode natürlich mit der Masse-Schiene. Der Taster wird auf der einen Seite mit Masse, auf der anderen an GPIO Pin 16 angeschlossen. Gleichzeitig wird Pin 16 über den 10kΩ Widerstand an +5V angeschlossen (Pull Up Widerstand, s.u.)

Ich programmiere Pico W komplett über meine Raspberry Pi 4B, auf dem ich DietPi mit XfcE nachinstalliert habe.

Schaltungsaufbau für die ersten Schritte mit dem Raspberry Pi Pico W
Olli Graf - raspithek.de
breadboard_verschaltungCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Schaltungsaufbau für die ersten Schritte mit dem Raspberry Pi Pico W

Micropython flashen

Der Pico W unterscheidet sich durch sein WLAN Modul vom Raspberry Pi Pico, dadurch sind einige GPIO Pins anders belegt, um das Modul anzubinden. Daraus folgt, dass du ein anderes Firmwareimage aufspielen musst.

Der Vorgang bleibt derselbe.

  • Stecke den Micro-USB Stecker in den Pico W
  • Halte den BootSel-Button auf dem Board gedrückt und
  • stecke dann den USB-A Stecker in deinen Computer.

Der Pico W verbindet sich dann als ein mountbares Blockdevice, sobald der Datenträger zugreifbar ist, kopiere das heruntergeladene .uf2 File einfach in die berste Ebene des Datenträgers. Wenn dies abgeschlossen ist, wird der Pico W automatisch einen Neustart durchführen, um das Micropython Image zu starten.

Thonny

Thonny ist eine IDE (Integrated Development Environment), die uns die Programmierung des Pico W erleichtert, gerade beim Übertragen des Programms auf den Mikrocontroller ist Thonny sehr nützlich.

Sollte Thonny noch nicht auf deinem Rechner vorhanden sein, kannst du es mit

sudo apt install thonny

nachinstallieren.Auf thonny.org kannst auch eine Version für Windows runterladen.

Olli Graf - raspithek.de
thonny-optionsCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=

Die wichtigste Konfiguration, die du bei Thonny machen musst, ist die Verbindung zum Pico herzustellen.Verbinde deinen Pico per USB mit deinem Computer und klicke in Thonny im Menü auf Tools/Options und wähle dann die Registerkarte Interpreter Wähle als Interpreter MicroPython (Raspberry Pi Pico) aus. Falls dieser nicht verfügbar sein sollte, reicht auch MicroPython (Generic). Bei Port wählst du den seriellen Port aus, mit dem das Betriebssystem deinen Pico angebunden hat. Bei mir ist es /dev/ttyACM0. Wichtig ist, dass der Benutzer, mit dem du angemeldet ist, auf die Devicedatei zugreifen darf.

sudo usermod -a -G  dialout <user>

Du musst dich einmal neu anmelden, damit diese Änderung wirksam wird.

Thonny ist im Wesentlichen in zwei Bereiche unterteilt, im oberen Bereich gibst du deinen Programmcode ein, darunter ist das Fenster für die Python Interactive Shell, in dem alle Ausgaben des laufenden Programms erscheinen.

Olli Graf - raspithek.de
thonny-mainCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=

Wenn du alles richtig eingestellt hast, meldet sich die Interactive Shell wie folgt:

MicroPython v1.20.0 on 2023-04-26; Raspberry Pi Pico W with RP2040
Type "help()" for more information.
>>> 

Hier kannst du, wie gewohnt Python-Kommandos eingeben. Der Unterschied ist nur, dass sie nicht auf deinem lokalen Rechner verarbeitet werden sondern direkt auf dem Pico W.

Onboard LED

Ein simples erstes Programm ist üblicherweise, die auf dem Pico aufgelötete LED neben der Micro-USB Buchse zum Blinken zu bringen.

from machine import Pin
from utime import sleep

led = Pin('LED', Pin.OUT)
state = False

def toggle_LED(state):
    if state:
        led.on()
    else:
        led.off()

while True:
  state =  not state
    
  toggle_LED(state)
  sleep(0.5)

Die Leuchtdiode hat keine Pinnummer sondern die Kennung LED, dies liegt an dem WLAN-Modul, hardwareseitig ist die Onboard LED mit GPIO Pin 25 verbunden. Die Methode toggle_LED() schaltet je nach übergebenen Parameter die LED ein oder aus. In einer Endlosschleife wird state zwischen True und False hin- und hergewechselt und an die Methode übergeben. Danach wird eine halbe Sekunde gewartet. Wenn du den Code in Thonny hast, kannst das Programm mit dem Start-Button (grün unterlegter Pfeil) in der Menüleiste auf dem Pico starten (alternativ geht das auch mit der Taste F5. Beendet wird das Programm mit dem Stop-Button in der Menüleiste.

Dies die interaktive Shell von MicroPython. Alle Python Kommandos, die du hier eingibst werden nicht auf dem Rechner, auf dem Thonny läuft, ausgeführt sondern direkt auf dem Pico.

PullUp Widerstand

Der Pull Up Widerstand dient dazu, den Taster zu „entprellen“, da dessen Federkontakt mitunter mehrfache Signale sendet. Der Widerstand verhindert dies, in dem er das Eingangssignal glättet.

Taster auslesen

Den Taster benutzen wir jetzt als Ende Signal. Wird er gedrückt, beendet sich das Programm. Wir erweitern es wie folgt.

from machine import Pin
from utime import sleep

led = Pin(15, Pin.OUT)
button = Pin(16, Pin.IN)
waittime = 0.2
state = False
running = True
# Setzt den Zustand der LED und wartet dann <wait> Sekunden.
def toggle_LED(state,wait):
  if state:
    led.on()
  else:
    led.off()
  sleep(wait)

#Endlosschleife
while running:
  state =  not state # state hin- und herschalten
  toggle_LED(state,waittime) # LED umschalten
  pressed = button.value()
  if pressed == 0:
      led.off()
      running = False
      print('Button gedrückt, Ende')
    

Der Pin 16 wird als Input-Pin deklariert.

button = Pin(16, Pin.IN)

Den aktuellen Zustand kannst du über button.value() abfragen. Beachte, dass der Wert 0 anzeigt, dass der Taster gedrückt ist.

  pressed = button.value()

Ist pressed == 0, schalten wir die LED aus und beenden das Programm.

WLAN

Es ist jetzt Zeit, unseren Pico W ins WLAN zu bringen. Im Gegensatz zu den Raspberry Pi SBC, haben wir hier kein Betriebssystem, dass uns die Verbindung zur Verfügung stellt. Daher müssen wir das selber programmieren.

#encoding: utf-8
import machine
import network
import socket
import rp2
from time import sleep

ssid = '<ssid' # WLAN Name
passwd = '<wlanpw>' # Zugangspasswort des WLAN
rp2.country('DE') # WLAN im deutschen Frequenzspektrum

#einfache HTML Seite als Response
html = """<!DOCTYPE html>
<html>
<head>
 <title>Willkommen</title>
</head>
<body>
 <h2> Willkommen auf dem Raspberry Pi Pico W</h2>
</head>
</html>"""
# Verbindung aufbauen 
def connect():
  
  wlan = network.WLAN(network.STA_IF)
  wlan.active(True)
  wlan.connect(ssid,passwd)
  while not wlan.isconnected(): # Wiederhlen, bis Verbindung besteht
    print('Waiting for connection...')
    sleep(1)
  print(f'connected={wlan.isconnected()}')
  return wlan.ifconfig()

# Bindet  einen Socket an die Verbindung
def open_socket(ip):
    # Socket öffnen
    s = socket.socket()
    address = socket.getaddrinfo('0.0.0.0',80)[0][-1]
    print(f'address={address}')
    s.bind(address)
    s.listen(1)
    return s

def serve(connection):
  running = True
    #Start web server
  while running:
    client, adress = connection.accept()
    request = client.recv(1024)
    print(f'1request={request}')
    request = str(request)
    print(f'2request={request}')
    try:
      request = request.split()[1]
      print(f'3request={request}')
    except IndexError:
            pass
    if request =='/stop':
      print('stopping')
      running = False

    client.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n'.encode('utf-8'))
    client.send(html.encode('utf-8'))
    client.close()

ip = connect()
print(f'ip={ip}')
s = open_socket(ip)
print(f'socket={s}')
#Hier ist jetzt die Verbindung aufgebaut und der Socket einsatzbereit.
serve(s)
s.close()

Das Programm ist ein relativ einfacher Webserver, der beim Request einfach nur den unter html abgelegten HTML-Code zurückliefert.Du musst nur den Namen deines Access Point und das WLAN Passwort in die Variablen ssid und passwd einsetzen. Die rote LED benutzen wir als Status LED, die anzeigt, dass die WLAN-Verbindung besteht.In meiner Fritz!Box taucht der Pico W dann so auf:

Auszug aus der Geräteliste im WLAN in der Fritz!Box, der Raspberry Pi Pico W hat den Namen PicoW
Olli Graf - raspithek.de
picow-connectedCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Auszug aus der Geräteliste im WLAN in der Fritz!Box, der Raspberry Pi Pico W hat den Namen PicoW

Du kannst dir jetzt mit http://picow die HTML-Seite anzeigen lassen. Ich habe noch die Möglichkeit eingebaut, den Webserver ordentlich zu beenden

Das Ärgerliche bei diesem Code ist, dass beim Stopp des Programms über Thonny der TCP Port nicht freigegeben wird. Vor jedem neuen Start des Programms musst du den PicoW komplett neu starten, indem du ihn vom USB-Port deines Arbeitsrechners trennst und wieder verbindest. Danach musst du über den Stop/Restart Button die Kommunikation zwischen Thonny und Pico wieder herstellen. Deshalb habe ich noch die Möglichkeit eingebaut, den Webserver ordentlich zu beenden und den Port wieder freizugeben. Dies geschieht mit dem URL http://picow/stop

Darauf aufbauend habe ich den led-server aus dem Python GPIO Kapitel für den PicoW portiert. Du findest ihn so wie alle anderen Sourcecodes dieses Posts im git Repo.

Pico mobil

Es macht natürlich keinen Sinn, den Raspberry Pi Pico W immer an einem Hostrechner zu betreiben. Daher speicherst du das WLAN Programm jetzt am besten mit Datei/Speichern Unter oder File/Save As auf englisch direkt auf dem Pico

Dialog zur Auswahl des Speicherorts.
Olli Graf - raspithek.de
thonny-saveasCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
Dialog zur Auswahl des Speicherorts.

Es erscheint dann der obige Dialog (der dir vermutlich vorher schon mal begegnet ist Dort wählst du MicroPython device und gibst danach als Dateinamen main.py an. Jetzt ist das Programm auf dem PicoW gespeichert und wird bei dessen Start automatisch ausgeführt.

Ich habe ein wenig in meiner Kiste gekramt und noch eine Powerbank gefunden, die 2,4A bei 5V liefern kann. Da die Stromaufnahme des Pico W im mA Bereich liegt, ist das natürlich überdimensioniert. Die Powerbank hat aber den Vorteil über einen On/Off-Schalter zu verfügen und kann mit einer Kapazität von 6700mAh den Mikrocontroller tage- wenn nicht wochenlang mit Strom versorgen.

fertige Schaltung mit Powerbank als Stromversorgung, die leuchtende rote LED zeigt an, dass die WLAN-Verbindung aufgebaut wurde.
Olli Graf - raspithek.de
picow-powerbankCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License . loading=
fertige Schaltung mit Powerbank als Stromversorgung, die leuchtende rote LED zeigt an, dass die WLAN-Verbindung aufgebaut wurde.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner