Der Mikrocontroller RP2040 wurde von der Raspberry Pi Foundation entwickelt und
wird unter anderem auf dem Raspberry Pi Pico eingesetzt. Auf diesem Teil unserer Webseite möchte
ich ein paar Anregungen zum Arbeiten mit dem Raspberry Pi Pico geben.
Raspberry Pi Pico Schnelleinsteig - von Thomas Brühlmann
2. Auflage 2023
MITP Verlags GmbH
ISBN 9783747506400
Informationen über dem Raspberry Pi Pico von www.raspberrypi.com
Micropython bringt bereits einige Module mit. Führt man den nachfolgenden Befehl in der
Kommadozeile der Entwicklungsumgebung aus, wenn der Raspberry Pi Pico am Rechner / Laptop angeschlossen ist,
dann werden die vorhandenen Module angezeigt.
help('modules')
Mit dem Raspberry Pi Pico, dem Sensor DHT22 und dem OLED-Display SSD1306 lässt sich einfach ein Messgerät für die Messung der Temperatur
und der Luftfeuchte aufbauen.
In den neueren Versionen der MicroPython-Firmware für den Raspberry Pi Pico
ist das Modul für die Ansteuerung der Sensoren der Reihe DHT schon vorhanden,
jedoch müssen wir uns noch um die Bereitstellung des Modules für das
OLED-Display vom Typ SSD1306 selber kümmern.
Unter https://github.com/PerfecXX/MicroPython-SSD1306
habe ich dazu den Quellcode der Datei ssd1306.py kopiert und diesen in ein leeres Blatt der
Entwicklungsumgebung Thonny eingefügt. Diesen Quellcode habe ich dann unter dem
Namen ssd1306.py auf dem Raspberry Pi Pico abgespeichert. Der Raspberry Pi Pico muss dazu natürlich
mit dem PC / Laptop verbunden sein. Damit steht dann das Modul für die Ansetuerung des
OLED-Display vom Typ SSD1306 zur Verfügung und wir können es für unser Projekt verwenden.
Die notwendige Beschaltung für unser Messgerät sieht dann so aus:
Hinweis:
Als Fritzing-Bauteil Raspberry Pi Pico wurde das unter
https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#layout_wireless
(https://pip.raspberrypi.com/documents/RP-008316-DS) zu findende verwendet.
Als Fritzing-Bauteil OLED SSD1306 wurde das unter
https://forum.fritzing.org/t/oled-128x64-i2c-monochrome-display-ssd1306-created/1202/9 zu findende verwendet.
Der nachfolgende Programmcode sorgt dafür, dass die notwendigen Module eingebunden werden.
Danach werden der Sensor DHT22 und das OLED-Display SSD1306 initialisert.
In einer Dauerschleife wird jeweils eine Messung ausgelöst. Die ermittelten Messwerte werden gerundet ausgegeben,
zudem wird die Anzahl der Messungen angezeigt. Die Rundung wurde eingebaut, da sich bei den Tests zeigte,
dass ansonsten teilweise mehrstellige Messergebnisse angezeigt wurden.
# Verwendete Quellen im Internet
#
# https://www.elektronik-kompendium.de/sites/raspberry-pi/2703031.htm
#
# Treiber für das OLED vom Typ SSD1306:
# https://github.com/PerfecXX/MicroPython-SSD1306
# Module einbinden
from machine import Pin
from dht import DHT22
from ssd1306 import SSD1306_I2C
from time import sleep
# Noch etwas warten, damit der Sensor DHT22 auch bereit ist.
sleep(2)
# Initialisierung des DHT22:
# In diesem Fall wurde der Daten-Pin des Sensors an Pin 15 des
# Raspberry Pi Pico angeschlossen.
dht22_sensor = DHT22(Pin(15, Pin.IN))
# Initialisierung des OLED SSD1306
#
# Anschlussbelegung: sda des OLED an Pin 8 und scl an Pin 9
sda = machine.Pin(8)
scl = machine.Pin(9)
i2c = machine.I2C(0, scl=scl, sda=sda, freq=1000000)
oled = SSD1306_I2C(128, 32, i2c)
# Variable für den Schleifenzähler
n = 0
# Wiederholung (Endlos-Schleife)
while True:
try:
# Schleifenzähler um 1 erhöhen
n = n + 1
# Zahl in einen String wandeln
nString = str(n)
# Die Messung durchführen
dht22_sensor.measure()
# Die Temperatur auslesen
temp = dht22_sensor.temperature()
# Den Messwert runden
tempGerundet = round(temp,1)
# Den gerundeten Messwert in einen String wandeln
tempString = str(tempGerundet)
# Die Luftfeuchte auslesen
luftfeuchte = dht22_sensor.humidity()
luftfeuchteGerundet = round(luftfeuchte,1)
luftfeuchteString = str(luftfeuchteGerundet)
# Nun Ausgabe auf dem OLED-Display
# Zuerst Display löschen
oled.fill(0)
oled.show()
# Nun die Werte auf dem Display ausgeben
oled.text(tempString,0,0)
oled.text(luftfeuchteString, 0, 12)
oled.text(nString, 0, 24)
oled.show()
# Warten
sleep(3)
except OSError:
print('Fehler: Kein Datenempfang vom Sensor!')
Als ersten Schritt wollen wir die ID des Chips auslesen. Folgende Schritte sind dazu notwendig:
Den I2C-Buss initialisieren
Das entsprechende Register auslesen
Den Inhalt des Registers ausgeben
# Manuelles Auslesen des Sensors BMP280
# Auslesen der DCHIP-ID
# Programmiert von Sherlock19@posteo.de
# Dez. 2025 / Jan. 2026
# Verwendete Quellen im Internet
# https://forum-raspberrypi.de/forum/thread/51200-bme280-und-bmp280-mit-python3-auslesen/
# https://docs.micropython.org/en/latest/library/machine.I2C.html
# Verwendete Literatur:
# Raspberry Pi Pico Schnelleinstieg
# Die notwendige Bibliothek importieren
from machine import I2C
# Den I2C-Bus initialisieren
# Dazu anlegen eines PIN-Objektes, welcher physikalisch den PIN 8 anspricht.
# Dieses Objekt wird dann über die Variable sdaPinObj angesprochen.
sdaPinObj = machine.Pin(8)
# Zudem anlegen eines PIN-Objektes, welcher physikalisch den PIN 9 anspricht.
# Dieses Objekt wird dann über die Variable sclPinObj angesprochen.
sclPinObj = machine.Pin(9)
# Nun anlegen des I2C-Objektes über welches die Steuerung des
# I2C-Busses durchgefuehrt wird
i2cObj = machine.I2C(0, scl=sclPinObj, sda=sdaPinObj, freq=100000)
# Geraeteadresse des BMP280
deviceID = 0x77
# Auslesen der CHIP-ID
#
datenbyte = i2cObj.readfrom_mem(deviceID, 0xD0,1)
print(datenbyte)
Wenn kein Fehler aufgetreten ist, dann wird folgendes im Kommandozeilenbereich von Thonny angezeigt:
b'X'
Wenn der Sensor nicht gefunden oder er nicht angesprochen werden kann,
dann kann es hingegen zur nachfolgenden Fehlermeldung kommen.
Traceback (most recent call last):
File "", line 38, in
OSError: [Errno 5] EIO
Solche möglichen Fehler müssen abgefangen werden! Dazu gibt es den Befehl try.
Im nachfolgenden Programmbeispiel habe ich diesen verwendet um einen Fehler
abzufangen.
# Manuelles Auslesen des Sensors BMP280
# Auslesen der CHIP-ID
# Programmiert von Sherlock19@posteo.de
# 13. Januar 2026 mit Abfangen eines Kommunikationsfehlers
# Verwendete Quellen im Internet
# https://forum-raspberrypi.de/forum/thread/51200-bme280-und-bmp280-mit-python3-auslesen/
# https://docs.micropython.org/en/latest/library/machine.I2C.html
# https://www.elektronik-kompendium.de/sites/raspberry-pi/2803101.htm
# Verwendete Literatur:
# Raspberry Pi Pico Schnelleinstieg
# Die notwendige Bibliothek importieren
from machine import I2C
# Den I2C-Bus initialisieren
# Dazu anlegen eines PIN-Objektes, welcher physikalisch den PIN 8 anspricht.
# Dieses Objekt wird dann über die Variable sdaPinObj angesprochen.
sdaPinObj = machine.Pin(8)
# Zudem anlegen eines PIN-Objektes, welcher physikalisch den PIN 9 anspricht.
# Dieses Objekt wird dann über die Variable sclPinObj angesprochen.
sclPinObj = machine.Pin(9)
# Nun anlegen des I2C-Objektes über welches die Steuerung des
# I2C-Busses durchgefuehrt wird.
i2cObj = machine.I2C(0, scl=sclPinObj, sda=sdaPinObj, freq=100000)
# Geraeteadresse des BMP280
deviceID = 0x77
# Auslesen der CHIP-ID
allesInOrdnung = 1
try:
# Auslesen der CHIP-ID
#
datenbyte = i2cObj.readfrom_mem(deviceID, 0xD0,1)
except (OSError):
print("FEHLER: Das Auslesen des Sensors ist gescheitert.")
allesInOrdnung = 0
if allesInOrdnung == 1:
print(datenbyte)
Wird fortgesetzt...
Wir hoffen, dass diese Seite gefallen hat und hilfreich war.
Achtung: Es handelt sich lediglich um Bastelvorschläge! Es wird keinerlei Haftung
für den Einsatz der Schaltungen übernommen. Diese Seite ist zudem nicht kommerziell.
Trotz großer Sorgfallt können sich Fehler eingeschlichen haben.
Wir bitten dann um Nachsicht und freuen uns auf einen entsprechenden Hinweis.
Es wird keine Gewähr für die Vollständigkeit übernommen.
Für Schäden, die durch die Anwendung z.B. einer Installationsanleitung entstehen,
übernehmen wir keinerlei Haftung.
Die verwendeten externen Links auf dieser
Seite werden immer wieder geprüft. Wir übernehmen jedoch keinerlei
Haftung für die Verwendung der Links. Für den Inhalt der verlinkten Seiten sind die
Betreiber dieser Seiten verantwortlich. Rechtsverstöße auf den verlinkten Seiten waren
bei der aktuellen Überpüfung nicht erkennbar. Es gelten auf den verlinkten Seiten
die Datenschutzbestimmungen des jeweiligen Betreibers.
Bevor Sie der Speicherung von Cookies zustimmen, empfehlen wir generell zuvor die Einstellungen
so weit wir möglich zu beschränken und dann diese individuellen Einstellungen
zu speichern. Leider werden diese Einstellungen meist versteckt und auch der richtige Button
zum Bestätigen ist meist kleiner und versteckt.
Bei der Erstellung des Grundgerüstes dieser Internetseite wurde auf W3Schools.com zugegriffen
W3Schools.com. Zudem waren viele Quellen im Internet
bei Details hilfreich.
Grafiken
Pinguin (TUX) erstellt von lewing@isc.tamu.edu mittels GIMP