Raspberry Pi Pico und Pico W
29.11.2023, Version 1.03Der Raspberry Pi Pico eignet sich für einfache Steuerungen, ist im Gegensatz zum Raspberry Pi aber kein Computer, auf dem ein Betriebssystem installiert werden kann und der über LAN, Bluetooth, HDMI und mehrere USB Anschlüsse verfügt. Dafür besitzt der Pico bereits einen AD Wandler und kann analoge Signale direkt in Digitalwerte umwandeln. Der Raspberry Pi benötigt dafür ein Zusatzmodul. Weitere Vorteile des Pico sind seine Größe (Platine: 51 x 21 mm) sowie der geringe Stromverbrauch. Nicht zu vergessen der sehr günstige Preis ab 3,90 Euro. Inzwischen gibt es auch einen Pico W, der zusätzlich eine 2.4 GHz WLAN Schnittstelle (802.11n) beinhaltet.
Raspberry Pi Pico
Raspberry Pi Pico W
Grundlagen
Grundlagen
Für die ersten Gehversuche mit dem Pico reichen der Raspberry Pi Pico (kurz Pico genannt), ein Standard microUSB Kabel und ein Computer. Lötkenntnisse sind für den Einstieg nicht erforderlich.
Neben dem microUSB Anschluss (blau umrahmt), befinden sich auf der Platine ein kleiner Taster (gelb umrahmt, mit BOOTSEL "Boot Selector" beschriftet) und eine grün leuchtende LED (rot umrahmt). Programmiert werden kann der Pico entweder mit C++ oder microPython. Für Anfänger ist microPython sicherlich die bessere Wahl. Die dafür erforderliche Laufzeitumgebung muss zuerst aus dem Internet heruntergeladen werden. Dazu auf der Seite https://www.raspberrypi.com/documentation/microcontrollers/ MicroPython auswählen und die MicroPython UF2 Datei herunterladen (wird in Windows üblicherweise in Downloads abgelegt). Auf dieser Seite werden immer die aktuellsten Versionen bereitgestellt, die manchmal mit unstable gekennzeichnet sind. Wer eine stabile Version einsetzten möchte:
Pico Stand Oktober 2023 Version 1.21.0: RPI_PICO-20231005-v1.21.0.uf2, April 2023: Version 1.20.
Pico W Stand Oktober 2023 Version 1.21.0: RPI_PICO_W-20231005-v1.21.0.uf2, April 2023: Version 1.20.
Wichtig: die Laufzeitumgebungen für Pico und Pico W unterscheiden sich! Abhängig vom eingesetzten Pico die richtige UF2 Datei herunterladen.
Die nächsten Schritte:
Damit ist der Pico einsatzbereit. Die oben aufgeführten Schritte lassen sich beliebig oft wiederholen, um z.B. eine neuere Version von MicroPython herunterzuladen oder mit C++ zu arbeiten. Wie aber kann ich jetzt programmieren und den Programmcode auf dem Pico ausführen? Dafür bietet sich die einfach gehaltene Thonny Python IDE Entwicklungsumgebung an. Auf der Seite https://thonny.org/
die Installationsdatei über den Windows Link herunterladen (alternativ Version 4.1.4 hier, 21 MB, Stand: 11/2023), installieren und Thonny starten. Bei der erstmaligen Nutzung kann die Sprache ausgewählt werden (z.B. Deutsch, ich bevorzuge Englisch). Nach der Bestätigung der Sprache steht Thonny zur Verfügung:
Thonny ist jetzt fast einsatzbereit. Es muss lediglich noch der richtige Interpreter eingestellt werden. Im Menü Tools - Options... auswählen:
... und im Reiter Interpreter MicroPython für den Pico auswählen:
Ein schnellerer Weg den Interpreter auszuwählen: rechts unten in Thonny auf Local Python 3 klicken und Micro Python (Raspberry Pi Pico) auswählen.
Im unteren Teil von Thonny, der sogenannten Shell sollte sich jetzt der MicroPython Interpreter vom Pico melden (hier in der Version v1.21):
Ein einfacher Python Befehl zur Ausgabe von Text am Bildschirm ist print und kann für einen ersten Test benutzt werden:
print("Pico bereit")
Dieser Python Befehl gibt den in Anführungszeichen gesetzten Text aus:
Interessanter wird es die auf dem Pico (nicht Pico W - siehe unten) vorhandene LED einzuschalten. Dazu sind lediglich drei Zeilen Code erforderlich:
import machine
led = machine.Pin(25, machine.Pin.OUT)
led.value(1)
Entweder den Code Zeile für Zeile in der Shell eingeben und jeweils mit der [Enter] Taste bestätigen oder den Code (mit Cut-and-Paste) in das Code Fenster kopieren (alternativ eintippen) und den Code ausführen (entweder auf klicken oder die Funktionstaste F5 drücken).
Ausgeschaltet wird die LED mit:
led.value(0)
Während der Befehl print fester Bestandteil der Programmiersprache Python ist, müssen Erweiterungen der Programmiersprache als Module mit dem Befehl import eingebunden werden. Für den Zugriff auf die LED (und alle GPIO Pins) wird das Modul machine benötigt. Die aufgelötete LED ist über den Pin 25 zu erreichen. In der zweiten Zeile wird der Pin 25 als Ausgang (OUT) definiert und dem Objekt led zugewiesen. In der dritten Zeile muss der Wert dieses Objektes nur noch auf 1 gesetzt werden.
Hinweise:
Zum Speichern des Programmcodes auf das Disketten Symbol klicken (alternativ im Menü: File - Save oder Tastenkombination [Strg]+[S]):
Nach Auswahl von Raspberry Pi Pico muss nur noch ein Dateiname eingegeben werden (hier: LED.py):
Hinweis:
Der Programmcode sollte nicht nur auf dem Pico gespeichert werden, sondern auch auf dem Computer!
Zum Abschluss der Grundlagen noch eine kleine Erweiterung: die LED soll blinken. Der Code dafür:
import machine
import utime
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.value(1)
utime.sleep(1)
led.value(0)
utime.sleep(0.5)
Für die Zeit, die zwischen Ein- und Ausschalten gewartet werden soll, wird die Bibliothek utime benötigt (import utime). Das Blinken soll dauerhaft erfolgen. Dafür braucht man die Schleifenfunktion while. Im Gegensatz zu vielen anderen Programmiersprachen wird der Inhalt einer Schleife nicht in Klammern gesetzt oder mit einem Schlüsselwort beendet. Die Schleife beginnt mit while, der Schleifeninhalt wird mit Tabulator eingerückt. Der Wert in utime.sleep(1) entspricht der Wartezeit in Sekunden bis der Programmcode fortgesetzt wird. Zeiten kleiner als eine Sekunde müssen als Dezimalzahl eingegeben werden. Das Dezimaltrennzeichen ist der Punkt, nicht das Komma.
In diesem Beispiel wird die LED eingeschaltet led.value(1), dann wartet das Programm 1 Sekunde utime.sleep(1) bevor über led.value(0) die LED wieder ausgeschaltet wird. Nach einer Pause von einer halben Sekunde utime.sleep(0.5) beginnt die Schleife wieder von vorne. Zum Abbrechen des Programms auf das rote Stopschild klicken (oder [Strg]+[F2]).
Für die ersten Gehversuche mit dem Pico reichen der Raspberry Pi Pico (kurz Pico genannt), ein Standard microUSB Kabel und ein Computer. Lötkenntnisse sind für den Einstieg nicht erforderlich.
Neben dem microUSB Anschluss (blau umrahmt), befinden sich auf der Platine ein kleiner Taster (gelb umrahmt, mit BOOTSEL "Boot Selector" beschriftet) und eine grün leuchtende LED (rot umrahmt). Programmiert werden kann der Pico entweder mit C++ oder microPython. Für Anfänger ist microPython sicherlich die bessere Wahl. Die dafür erforderliche Laufzeitumgebung muss zuerst aus dem Internet heruntergeladen werden. Dazu auf der Seite https://www.raspberrypi.com/documentation/microcontrollers/ MicroPython auswählen und die MicroPython UF2 Datei herunterladen (wird in Windows üblicherweise in Downloads abgelegt). Auf dieser Seite werden immer die aktuellsten Versionen bereitgestellt, die manchmal mit unstable gekennzeichnet sind. Wer eine stabile Version einsetzten möchte:
Pico Stand Oktober 2023 Version 1.21.0: RPI_PICO-20231005-v1.21.0.uf2, April 2023: Version 1.20.
Pico W Stand Oktober 2023 Version 1.21.0: RPI_PICO_W-20231005-v1.21.0.uf2, April 2023: Version 1.20.
Wichtig: die Laufzeitumgebungen für Pico und Pico W unterscheiden sich! Abhängig vom eingesetzten Pico die richtige UF2 Datei herunterladen.
Die nächsten Schritte:
- microUSB Kabel am Pico einstecken, aber noch nicht am Computer
- Taste BOOTSEL auf dem Pico drücken und gedrückt halten
- micro USB Kabel mit dem Computer verbinden.
- Der Pico wird jetzt als externer Massenspeicher erkannt und eingebunden
- Taster loslassen.
- Den Datei Explorer starten (abhängig von der Computer Konfiguration startet dieser eventuell auch automatisch)
- Im Explorer erscheint der Pico jetzt unter dem Namen RPI-RP2
Sollte der Pico nicht angezeigt werden, nutzen Sie voraussichtlich ein USB Kabel, das nur für die Stromversorgung genutzt werden kann und die Datenleitungen nicht verbunden sind. Leider sieht man das dem USB Kabel nicht an! - Der zugewiesene Laufwerksbuchstaben (hier E:) hängt vom Computer und der angeschlossenen Hardware ab
- Mit Drag and Drop die heruntergeladene UF2 Datei auf den Pico ziehen (hier auf Laufwerk E:)
- Der Pico Bootloader erkennt die UF2 Datei, meldet den Pico als externen Massenspeicher ab und installiert den MicroPython Interpreter auf dem Pico
Damit ist der Pico einsatzbereit. Die oben aufgeführten Schritte lassen sich beliebig oft wiederholen, um z.B. eine neuere Version von MicroPython herunterzuladen oder mit C++ zu arbeiten. Wie aber kann ich jetzt programmieren und den Programmcode auf dem Pico ausführen? Dafür bietet sich die einfach gehaltene Thonny Python IDE Entwicklungsumgebung an. Auf der Seite https://thonny.org/
die Installationsdatei über den Windows Link herunterladen (alternativ Version 4.1.4 hier, 21 MB, Stand: 11/2023), installieren und Thonny starten. Bei der erstmaligen Nutzung kann die Sprache ausgewählt werden (z.B. Deutsch, ich bevorzuge Englisch). Nach der Bestätigung der Sprache steht Thonny zur Verfügung:
Thonny ist jetzt fast einsatzbereit. Es muss lediglich noch der richtige Interpreter eingestellt werden. Im Menü Tools - Options... auswählen:
... und im Reiter Interpreter MicroPython für den Pico auswählen:
Ein schnellerer Weg den Interpreter auszuwählen: rechts unten in Thonny auf Local Python 3 klicken und Micro Python (Raspberry Pi Pico) auswählen.
Im unteren Teil von Thonny, der sogenannten Shell sollte sich jetzt der MicroPython Interpreter vom Pico melden (hier in der Version v1.21):
Ein einfacher Python Befehl zur Ausgabe von Text am Bildschirm ist print und kann für einen ersten Test benutzt werden:
Dieser Python Befehl gibt den in Anführungszeichen gesetzten Text aus:
Interessanter wird es die auf dem Pico (nicht Pico W - siehe unten) vorhandene LED einzuschalten. Dazu sind lediglich drei Zeilen Code erforderlich:
led = machine.Pin(25, machine.Pin.OUT)
led.value(1)
Entweder den Code Zeile für Zeile in der Shell eingeben und jeweils mit der [Enter] Taste bestätigen oder den Code (mit Cut-and-Paste) in das Code Fenster kopieren (alternativ eintippen) und den Code ausführen (entweder auf klicken oder die Funktionstaste F5 drücken).
Ausgeschaltet wird die LED mit:
Während der Befehl print fester Bestandteil der Programmiersprache Python ist, müssen Erweiterungen der Programmiersprache als Module mit dem Befehl import eingebunden werden. Für den Zugriff auf die LED (und alle GPIO Pins) wird das Modul machine benötigt. Die aufgelötete LED ist über den Pin 25 zu erreichen. In der zweiten Zeile wird der Pin 25 als Ausgang (OUT) definiert und dem Objekt led zugewiesen. In der dritten Zeile muss der Wert dieses Objektes nur noch auf 1 gesetzt werden.
Hinweise:
- Gerade Anfänger sind verwirrt, wenn im Internet nach Pico Programmierung gesucht wird. In diesem einfachen Beispiel wird aus dem Modul machine nur Pin benötigt. Es ist
daher möglich, nur diesen Teil zu importieren:
from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1) - Beim Pico W funktioniert dieser Code nicht. Hier muss die interne LED folgendermaßen angesprochen werden:
from machine import Pin
led = Pin("LED", Pin.OUT)
led.value(1) - Alternativ zu
led.value(1) kann die LED mitled.on() eingeschaltet werden. Ausschalten mit led.value(0) bzw. led.off() - Bei led handelt es sich um einen Variablennamen, der frei gewählt werden kann. Allerdings muss man sich an bestimmte regeln halten:
- Der Name muss mit einem Buchstaben oder einem Unterstrich beginnen
- Der Name darf nur alphanumerische Zeichen (A bis Z bzw. a bis z, 0 bis 9) und Unterstriche enthalten
- Die Python Sprachreferenz (in Englisch) ist großteils auch für MicroPython gültig.
Zum Speichern des Programmcodes auf das Disketten Symbol klicken (alternativ im Menü: File - Save oder Tastenkombination [Strg]+[S]):
Nach Auswahl von Raspberry Pi Pico muss nur noch ein Dateiname eingegeben werden (hier: LED.py):
Hinweis:
Der Programmcode sollte nicht nur auf dem Pico gespeichert werden, sondern auch auf dem Computer!
Zum Abschluss der Grundlagen noch eine kleine Erweiterung: die LED soll blinken. Der Code dafür:
import utime
led = machine.Pin(25, machine.Pin.OUT)
while True:
led.value(1)
utime.sleep(1)
led.value(0)
utime.sleep(0.5)
Für die Zeit, die zwischen Ein- und Ausschalten gewartet werden soll, wird die Bibliothek utime benötigt (import utime). Das Blinken soll dauerhaft erfolgen. Dafür braucht man die Schleifenfunktion while. Im Gegensatz zu vielen anderen Programmiersprachen wird der Inhalt einer Schleife nicht in Klammern gesetzt oder mit einem Schlüsselwort beendet. Die Schleife beginnt mit while, der Schleifeninhalt wird mit Tabulator eingerückt. Der Wert in utime.sleep(1) entspricht der Wartezeit in Sekunden bis der Programmcode fortgesetzt wird. Zeiten kleiner als eine Sekunde müssen als Dezimalzahl eingegeben werden. Das Dezimaltrennzeichen ist der Punkt, nicht das Komma.
In diesem Beispiel wird die LED eingeschaltet led.value(1), dann wartet das Programm 1 Sekunde utime.sleep(1) bevor über led.value(0) die LED wieder ausgeschaltet wird. Nach einer Pause von einer halben Sekunde utime.sleep(0.5) beginnt die Schleife wieder von vorne. Zum Abbrechen des Programms auf das rote Stopschild klicken (oder [Strg]+[F2]).
Autostart
Autostart
Wurde die Anwendung ausgiebig getestet, soll das Programm automatisch gestartet werden, wenn der Pico mit Spannung versorgt wird, ohne dass dieser mit dem Computer verbunden ist. Die Lösung ist einfach. Das Programm muss unter dem Namen main.py gespeichert werden. Pico vom Computer trennen und mit einem Standard USB Netzteil verbinden: das Programm startet automatisch. Testweise kann der Pico auch wieder mit dem Computer verbunden werden!
Hinweis:
S ignifikanter Nachteil: der Pico kann über Thonny nicht mehr angesprochen werden! Um den Autostart zu entfernen muss der MicroPython Interpreter neu installiert werden. Dabei wird auch der auf dem Pico gespeicherte Python Code überschrieben. Dieser sollte auf dem PC gesichert werden, bevor der Autostart aktiviert wird.
Wurde die Anwendung ausgiebig getestet, soll das Programm automatisch gestartet werden, wenn der Pico mit Spannung versorgt wird, ohne dass dieser mit dem Computer verbunden ist. Die Lösung ist einfach. Das Programm muss unter dem Namen main.py gespeichert werden. Pico vom Computer trennen und mit einem Standard USB Netzteil verbinden: das Programm startet automatisch. Testweise kann der Pico auch wieder mit dem Computer verbunden werden!
Hinweis:
S ignifikanter Nachteil: der Pico kann über Thonny nicht mehr angesprochen werden! Um den Autostart zu entfernen muss der MicroPython Interpreter neu installiert werden. Dabei wird auch der auf dem Pico gespeicherte Python Code überschrieben. Dieser sollte auf dem PC gesichert werden, bevor der Autostart aktiviert wird.
Stromversorgung
Stromversorgung
Für die Installation der Laufzeitumgebung wird ein USB Kabel mit Micro-USB Anschluss für den Pico benötigt. Über dieses USB Kabel wird der Pico auch mit Strom versorgt. Alternativ zu der Stromversorgung über den Micro-USB Anschluss können auch folgende Anschlüsse genutzt werden:
Neben dem GND Anschluss an Pin 38, kann auch einer der anderen GND Kontakte genutzt werden: 3, 8, 13, 18, 23, 28, 33 oder 38.
Hinweis: Wird der Pico über 5 V versorgt, stellt der internet Spannungswandler am Pin 36 eine Spannung von 3,3 V zur Verfügung, die mit maximal 300 mA belastet werden kann. Wichtig für Beschaltung mit externen Bauelementen (Relais, Sensoren, ...)
Für die Installation der Laufzeitumgebung wird ein USB Kabel mit Micro-USB Anschluss für den Pico benötigt. Über dieses USB Kabel wird der Pico auch mit Strom versorgt. Alternativ zu der Stromversorgung über den Micro-USB Anschluss können auch folgende Anschlüsse genutzt werden:
- 5 V Steckernetzteil mit Micro-USB Kabel mit dem Micro-USB Anschluss verbinden
- 5 V Spannungsversorgung an Pin 40
- Die Spannungsversorgung an Pin 39 kann zwischen 1,8 Vund 5,5 V liegen (z.B. für Batteriebetrieb)
- 3,3 V Spannungsversorgung an Pin 36
Neben dem GND Anschluss an Pin 38, kann auch einer der anderen GND Kontakte genutzt werden: 3, 8, 13, 18, 23, 28, 33 oder 38.
Hinweis: Wird der Pico über 5 V versorgt, stellt der internet Spannungswandler am Pin 36 eine Spannung von 3,3 V zur Verfügung, die mit maximal 300 mA belastet werden kann. Wichtig für Beschaltung mit externen Bauelementen (Relais, Sensoren, ...)
Pinbelegung
Pinbelegung
Die Belegung der 40 Pins beim Pico und Pico W ist identisch:
Beim Pico befinden sich die drei Debug Pins an einer anderen Position.
Die Belegung der 40 Pins beim Pico und Pico W ist identisch:
Beim Pico befinden sich die drei Debug Pins an einer anderen Position.
Taster abfragen
Taster abfragen
Die GPIO Ports können nicht nur als Ausgänge (z.B. LED ein-/ausschalten), sondern auch als Eingänge geschaltet werden. Mit folgendem Code wird ein Eingang in einer Endlosschleife abgefragt. Ist an dem Eingang z.B. ein Taster angeschlossen, wird beim Drücken die auf dem Board vorhandene LED eingeschaltet. Nach dem Loslassen wird die LED weider ausggeschaltet.
from machine import Pin
led = Pin("LED", Pin.OUT)
taster = Pin(16, Pin.IN, Pin.PULL_DOWN)
while True:
if taster.value() == 1:
led.on()
else:
led.off()
Beim Pico befinden sich die drei Debug Pins an einer anderen Position.
Die GPIO Ports können nicht nur als Ausgänge (z.B. LED ein-/ausschalten), sondern auch als Eingänge geschaltet werden. Mit folgendem Code wird ein Eingang in einer Endlosschleife abgefragt. Ist an dem Eingang z.B. ein Taster angeschlossen, wird beim Drücken die auf dem Board vorhandene LED eingeschaltet. Nach dem Loslassen wird die LED weider ausggeschaltet.
led = Pin("LED", Pin.OUT)
taster = Pin(16, Pin.IN, Pin.PULL_DOWN)
while True:
if taster.value() == 1:
led.on()
else:
led.off()
Beim Pico befinden sich die drei Debug Pins an einer anderen Position.
Relais
Relais
Eine LED, die vergleichsweise wenig Strom benötigt, kann direkt über einen GPIO Pin ein- und ausgeschaltet werden. Sollen Verbraucher geschaltet werden, die mehr Strom und/oder höhere Spannungen benötigen, benötigt man ein Relais Modul. Diese Module gibt es in verschiedenen Varianten. Ein paar Beispiele:
Links ein Modul mit zwei Relais, daneben ein Einzelmodul mit zwei LEDs, eine Variante mit Schraubanschlüssen für Ein- und Ausgänge und ganz rechts eine Version, die direkt auf das Breadboard gesteckt werden kann. Darüber hinaus gibt es Module mit 4, 8 oder 16 Relais und weitere Varianten. Soll mit dem Relais ein 230 V Verbraucher geschaltet werden, muss das Relais dafür auch geeignet sein. Die Angabe von z.B. 10A 250VAC bedeutet, dass damit maximal 10 Ampere bei 250 V Wechselspannung geschaltet werden können (10 A * 250 V = 2500 Watt). Vorsicht! bei 230 V besteht Lebensgefahr.
Gemeinsam ist allen Relais Modulen, dass ausgangsseitig drei Anschlüsse vorhanden sind, die nicht immer eindeutig beschrift sind. Am gängigsten sind die Bezeichnung COM, NC und NO. COM steht für Common, also den gemeinsamen Anschluss, NC für Normally Closed und NO for Normally Open. Im ausgeschalteten Zustand besteht zwischen COM und NC eine Verbindung. Um einen Verbraucher über das Relais zu schalten, werden daher üblicherweise die Anschlüsse COM und NO benutzt. Der Verbraucher soll ja über den Pico aktiv eingeschaltet werden.
Für den Versuchsaufbau nutze ich das Einzelrelais ganz rechts im Bild, das direkt auf das Breadboard gesteckt werden kann:
In der Draufsicht (linkes Bild) sind das dominante Relais (blau) mit den drei Schraubanschlüssen für den Verbraucher (oben), den drei Steckeingängen (unten) und der links neben diesen Anschlüssen gelegenen Leuchtdiode (ON Led) gut zu erkennen. Dieses Relais Modul kennzeichnet die Eingänge mit S, + und - (zweites Bild). Alternative Bezeichnungen sind DC+, DC- und IN1 oder VCC, GND und IN. Das dritte Bild zeigt die Schraubanschlüsse. Die Bezeichnungen NO und NC (COM in der Mitte ist nicht beschriftet) lassen sich nur erahnen. Anmerkung: Dieses Relais besitzt keinen Aufdruck mit den maximalen Leistungsdaten (Direktimport aus China) und sollte aus Sicherheitsgründen daher nur für Niederspannungsschaltungen benutzt werden!
Versuchsaufbau:
Das Relais wird über drei Anschlüsse mit dem Pico verbunden: GND, 5 V und einem beliebigen GPIO Port. In diesem Versuchsaufbau führe ich die 5 Volt vom Pin 40 (VBUS) auf die rote + Leiste und GND vom Pin 38 auf die blaue - Leiste. Natürlich kann man die Pins 40 und 38 auch direkt mit dem Relais verbinden.
Das Relais wird von der blauen Leiste mit - verbunden (weißes Kabel) und von der roten Leiste (5 V) mit + (rotes Kabel). Der Schalteingang S wird mit einem beliebigen GPIO Pin verbunden. In diesem Beispiel geht das grüne Kabel auf Pin 21 (GP16).
Mit wenigen Zeilen Python Code kann das Ein- und Ausschalten des Relais getestet werden.
from machine import Pin
relais = Pin(16,Pin.OUT)
relais.on()
relais.on() schaltet das Relais ein. Das Einschalten des Relais ist auch zu hören und zusätzlich leuchtet am Relais eine rote LED. Zu Testzwecken habe ich an den Relais Ausgängen einen elektronischen Summer (Niederspannung, daher keine isolierten Kabel) an COM und NO angeschlossen. Ausgeschaltet wird das Relais mit relais.off().
Anmerkungen:
Eine LED, die vergleichsweise wenig Strom benötigt, kann direkt über einen GPIO Pin ein- und ausgeschaltet werden. Sollen Verbraucher geschaltet werden, die mehr Strom und/oder höhere Spannungen benötigen, benötigt man ein Relais Modul. Diese Module gibt es in verschiedenen Varianten. Ein paar Beispiele:
Links ein Modul mit zwei Relais, daneben ein Einzelmodul mit zwei LEDs, eine Variante mit Schraubanschlüssen für Ein- und Ausgänge und ganz rechts eine Version, die direkt auf das Breadboard gesteckt werden kann. Darüber hinaus gibt es Module mit 4, 8 oder 16 Relais und weitere Varianten. Soll mit dem Relais ein 230 V Verbraucher geschaltet werden, muss das Relais dafür auch geeignet sein. Die Angabe von z.B. 10A 250VAC bedeutet, dass damit maximal 10 Ampere bei 250 V Wechselspannung geschaltet werden können (10 A * 250 V = 2500 Watt). Vorsicht! bei 230 V besteht Lebensgefahr.
Gemeinsam ist allen Relais Modulen, dass ausgangsseitig drei Anschlüsse vorhanden sind, die nicht immer eindeutig beschrift sind. Am gängigsten sind die Bezeichnung COM, NC und NO. COM steht für Common, also den gemeinsamen Anschluss, NC für Normally Closed und NO for Normally Open. Im ausgeschalteten Zustand besteht zwischen COM und NC eine Verbindung. Um einen Verbraucher über das Relais zu schalten, werden daher üblicherweise die Anschlüsse COM und NO benutzt. Der Verbraucher soll ja über den Pico aktiv eingeschaltet werden.
Für den Versuchsaufbau nutze ich das Einzelrelais ganz rechts im Bild, das direkt auf das Breadboard gesteckt werden kann:
In der Draufsicht (linkes Bild) sind das dominante Relais (blau) mit den drei Schraubanschlüssen für den Verbraucher (oben), den drei Steckeingängen (unten) und der links neben diesen Anschlüssen gelegenen Leuchtdiode (ON Led) gut zu erkennen. Dieses Relais Modul kennzeichnet die Eingänge mit S, + und - (zweites Bild). Alternative Bezeichnungen sind DC+, DC- und IN1 oder VCC, GND und IN. Das dritte Bild zeigt die Schraubanschlüsse. Die Bezeichnungen NO und NC (COM in der Mitte ist nicht beschriftet) lassen sich nur erahnen. Anmerkung: Dieses Relais besitzt keinen Aufdruck mit den maximalen Leistungsdaten (Direktimport aus China) und sollte aus Sicherheitsgründen daher nur für Niederspannungsschaltungen benutzt werden!
Versuchsaufbau:
Das Relais wird über drei Anschlüsse mit dem Pico verbunden: GND, 5 V und einem beliebigen GPIO Port. In diesem Versuchsaufbau führe ich die 5 Volt vom Pin 40 (VBUS) auf die rote + Leiste und GND vom Pin 38 auf die blaue - Leiste. Natürlich kann man die Pins 40 und 38 auch direkt mit dem Relais verbinden.
Das Relais wird von der blauen Leiste mit - verbunden (weißes Kabel) und von der roten Leiste (5 V) mit + (rotes Kabel). Der Schalteingang S wird mit einem beliebigen GPIO Pin verbunden. In diesem Beispiel geht das grüne Kabel auf Pin 21 (GP16).
Mit wenigen Zeilen Python Code kann das Ein- und Ausschalten des Relais getestet werden.
relais = Pin(16,Pin.OUT)
relais.on()
relais.on() schaltet das Relais ein. Das Einschalten des Relais ist auch zu hören und zusätzlich leuchtet am Relais eine rote LED. Zu Testzwecken habe ich an den Relais Ausgängen einen elektronischen Summer (Niederspannung, daher keine isolierten Kabel) an COM und NO angeschlossen. Ausgeschaltet wird das Relais mit relais.off().
Anmerkungen:
- Brauchbare Datenblätter zu den Relais Modulen habe ich im Internet nicht gefunden. Von einem deutschen Distributor habe ich ein Datenblatt erhalten, das mit einem Datenblatt aber wenig zu tun hat. Keine Angabe in welchem Bereich die Versorgungsspannung schwanken darf. Angaben zur Triggerspannung fehlen. Keine Beschreibung der Jumper. Und das Connection Diagram für den Raspberry Pi ist fehlerhaft (IN2 soll an 5 V angeschlossen werden, im Diagramm ist es korrekt dargestellt).
- Ein Großteil der im Handel verfügbaren Relais Module kommt aus China. Inwieweit das Modul mit dem Pico funktioniert ist nicht vorhersehbar. Das hängt auch damit zusammen, dass einige Module für den Arduino entwickelt worden sind, der bei den Ausgangsports mit 5 V arbeitet, der Pico aber nur mit 3,3 V. Es ist also möglich, dass die Triggerspannung nicht reicht, um das Relais zuverlässig ein- und auszuschalten.
- Das oben getestete Relais arbeitet mit einer positiven Triggerspannung. Wird der Port auf on gesetzt (also Ausgang 3,3 V), dann schaltet das Relais. Andere Relais Module arbeiten umgekehrt. Geht das Signal auf Low, schaltet das Relais! So funktioniert z.B. das oben aufgeführte Doppel-Relais. Das stellt grundsätzliche kein Problem dar, allerdings muss diese Arbeitsweise bei der Beschaltung der Ausgangskontakte berücksichtigt werden
- Das Modul mit den zwei großen LEDs (rot und grün, auf dem Bild zweites von links) funktioniert mit dem Pico nicht. Spannungsversorgung Relais Modul mit 5 V (Pin 40).
Relais Eingang IN nicht beschaltet: grüne LED ist aus und NC ist aktiv. Anschluss IN an GPIO Port: egal ob ich den GPIO Port auf low (0 V) oder high (3,3 V) schalte - die
grüne LED leuchtet und das Relais schaltet (NO aktiv).
Ein Test mit der Versorgungsspannung 3,3 V zeigt ein merkwürdiges Ergebnis: GPIO Port auf low (0 V): die rote LED geht aus, high (3,3 V): die rote LED geht an, das Relais funktioniert werde bei low noch bei high.
Ein weiterer Test mit einem externen Labornetzteil bestätigt, dass dieses Relais Modul nicht mit dem Pico eingesetzt werden kann. Die Triggerspannung liegt höher als 3,3 V. Zwischen 3,3 V und knapp 4 V ist das Verhalten instabil. Die grüne LED flackert. Erst bei einer Spannung > 4V schaltet das Modul zuverlässig.
Helligkeitsmessung
Helligkeitsmessung
Der Pico verfügt über integrierte AD Wandler. Daher lässt sich sehr einfach ein Helligkeitsmesser realisieren. Es werden lediglich ein Fotowiderstand und ein Widerstand 10 kΩ benötigt:
Das passende Schaltbild dazu:
Die beiden Widerstände werden zwischen GND und 3,3 Volt als Spannungsteiler geschaltet. Abhängig von der Helligkeit ändert sich der Widerstand im Fotowiderstand und am Eingang des AD Wandlers (in diesem Beispiel ADC0) liegt eine Spannung zwischen (theoretisch) 0 und 3,3 Volt an. Mit ein paar Zeilen Code wird die Spannung in einen Wert zwischen 0 und 65535 umgewandelt.
from machine import Pin, ADC
from utime import sleep
schwellwert = 20000
ldr = ADC(0)
interne_led = Pin("LED", Pin.OUT, value=0)
while True:
adwert = ldr.read_u16()
print("AD Wandler: ", adwert)
if adwert < schwellwert:
interne_led.on()
else:
interne_led.off()
sleep(5)
Der Schwellwert (hier: 20000) kann abhängig von der Anforderung und der gewünschten Helligkeit entsprechend angepasst werden. Die interne LED beim Pico W wird mit "LED" angesprochen, beim normalen Pico mit 25. In einer Endlosschleife while True:, die mit der Tastenkombination Strg-C abgebrochen werden kann, wird der aktuelle Wert vom AD Wandler ausgelesen und angezeigt. Ist dieser Wert kleiner als der Schwellwert, wird die interne LED eingeschaltet, ist er gleich oder größer geht die LED wieder aus. In der letzten Zeile sleep(5) werden die Anzahl Sekunden festgelegt, die das Programm anhält, bevor der nächste Wert ausgelesen wird.
Der Pico verfügt über integrierte AD Wandler. Daher lässt sich sehr einfach ein Helligkeitsmesser realisieren. Es werden lediglich ein Fotowiderstand und ein Widerstand 10 kΩ benötigt:
Das passende Schaltbild dazu:
Die beiden Widerstände werden zwischen GND und 3,3 Volt als Spannungsteiler geschaltet. Abhängig von der Helligkeit ändert sich der Widerstand im Fotowiderstand und am Eingang des AD Wandlers (in diesem Beispiel ADC0) liegt eine Spannung zwischen (theoretisch) 0 und 3,3 Volt an. Mit ein paar Zeilen Code wird die Spannung in einen Wert zwischen 0 und 65535 umgewandelt.
from utime import sleep
schwellwert = 20000
ldr = ADC(0)
interne_led = Pin("LED", Pin.OUT, value=0)
while True:
adwert = ldr.read_u16()
print("AD Wandler: ", adwert)
if adwert < schwellwert:
interne_led.on()
else:
interne_led.off()
sleep(5)
Der Schwellwert (hier: 20000) kann abhängig von der Anforderung und der gewünschten Helligkeit entsprechend angepasst werden. Die interne LED beim Pico W wird mit "LED" angesprochen, beim normalen Pico mit 25. In einer Endlosschleife while True:, die mit der Tastenkombination Strg-C abgebrochen werden kann, wird der aktuelle Wert vom AD Wandler ausgelesen und angezeigt. Ist dieser Wert kleiner als der Schwellwert, wird die interne LED eingeschaltet, ist er gleich oder größer geht die LED wieder aus. In der letzten Zeile sleep(5) werden die Anzahl Sekunden festgelegt, die das Programm anhält, bevor der nächste Wert ausgelesen wird.
WLAN
WLAN
Nur der Pico W verfügt über einen Chip für die Wireless Kommunikation. Mit dem folgenden Code wird eine Verbindung zu einem Access Point hergestellt:
import network
import time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('SSID', 'Password')
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect: ", wlan.status())
time.sleep(1)
print(wlan.ifconfig())
Nach der Initialisierung des Netzwerkes wird das WLAN mit wlan.active(True) aktiviert. In der nächsten Zeile wird eine Verbindung zum Access Point aufgebaut. SSID und Password müssen entsprechend angepasst werden. Die Endlosschleife wird erst verlassen, wenn die Verbindung erfolgreich war. Die letzte Zeile gibt die Konfiguration aus, z.B. ('192.168.0.181', '255.255.255.0', '192.168.0.1', '192.168.0.1') (die über DHCP vergebene IP Adresse, Netzwerk Maske, Standard Gateway, DNS-Server). Der in der Endlosschleife abgefragte WLAN Status kann folgende Werte annehmen:
Nicht alle drahtlosen Kanälen stehen in allen Ländern zur Verfügung. Daher empfiehlt es sich, das entsprechende Land zu setzen. Dafür wird das Modul rp2 benötigt:
import rp2
...
rp2.country('DE')
Nur der Pico W verfügt über einen Chip für die Wireless Kommunikation. Mit dem folgenden Code wird eine Verbindung zu einem Access Point hergestellt:
import time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('SSID', 'Password')
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect: ", wlan.status())
time.sleep(1)
print(wlan.ifconfig())
Nach der Initialisierung des Netzwerkes wird das WLAN mit wlan.active(True) aktiviert. In der nächsten Zeile wird eine Verbindung zum Access Point aufgebaut. SSID und Password müssen entsprechend angepasst werden. Die Endlosschleife wird erst verlassen, wenn die Verbindung erfolgreich war. Die letzte Zeile gibt die Konfiguration aus, z.B. ('192.168.0.181', '255.255.255.0', '192.168.0.1', '192.168.0.1') (die über DHCP vergebene IP Adresse, Netzwerk Maske, Standard Gateway, DNS-Server). Der in der Endlosschleife abgefragte WLAN Status kann folgende Werte annehmen:
- 0: down
- 1: join
- 2: NoIP
- 3: Up
- -1: Fail
- -2: NoNet
- -3: BadAuth
Nicht alle drahtlosen Kanälen stehen in allen Ländern zur Verfügung. Daher empfiehlt es sich, das entsprechende Land zu setzen. Dafür wird das Modul rp2 benötigt:
...
rp2.country('DE')