Zum Inhalt

Skript für die Schülerinnen Projekttage - Tag 2

IES-Logo

Der Raspberry Pi Pico

Vielleicht kennst du Computer als Geräte, auf denen du YouTube Videos schauen kannst, Spiele spielen kannst oder mit anderen Menschen kommunizeren kannst. Die allermeisten Computer sind aber ein wenig kleiner. Es handelt sich dabei um Mikro-Computer (Oder auch Mikro-Controller). Diese verleihen all den Maschinen, die wir im Alltag benutzen ihre "Intelligenz". Dazu zählen beispielsweise Waschmaschinen, Kühlschränke und sogar die Kaffemaschine! Im Grunde genommen sind Mikro-Controller überall verbaut, allein in einem modernen Auto stecken Hunderte drin.

Üblicherweise sind diese Mikro-Controller versteckt und nicht vom Anwender programmierbar. Der Raspberry-Pi Pico hingegen lässt sich leicht über eine USB-Schnittstelle von einem Computer programmieren. Auch verfügt der Pico über jede Menge Anschlüsse, mit denen man mit der Welt kommunizieren kann.

Pico

Der eigentliche Mikro-Controller ist dabei der schwarze Chip in der Mitte.

Für die Projekttage steht eine Platine zur Verfügung auf die ein Raspberry Pi-Pico gesteckt werden kann und auf welcher sich weitere elektronischen Geräte befinden, die vom Pico angesteuert werden können. Dazu zählen:

  • Ein (OLED) Display
  • 1 kleiner Lautsprecher
  • 4 bunte LEDs
  • 4 Taster
  • 1 Luftfeuchtigkeits und Temperatur-Sensor
  • Ein Beschleunigungssensor. Also ein Sensor mit der sich die Bewegung der Platine im Raum messen lassen kann.
  • 2 QWICC-Anschlüsse über die sich verschiedene Geräte über einen seriellen Bus anschließen lassen.

Projekttage-Platine

Darüber hinaus verfügt die Platine über ein "Steckbrett" auf welches elektronische Komponenten plaziert werden können und über die nach außen geführten Verbindungen mit dem Pico kommunizieren können.

Programmieren des Raspberry Pi-Picos

Bis jetzt haben wir zwar Python programmiert, der Code wurde aber vollständig auf dem Computer ausgeführt. Im Rahmen der Projekttage wirst du aber auch lernen Python Code zu programmieren, der direkt auf einem Mikrocontroller ausgeführt ist und somit in der Lage ist mit der echten Welt zu interagieren! Diese Interaktion kann zum Beispiel darin bestehen eine LED blinken zu lassen, oder einen Ton auf einem kleinen Lautsprecher abzuspielen.

Raspberry Pi Pico [TODO: Die Pinbelegung sieht etwas kompliziert aus! Schau mal ob du da was einfacheres findest]

!

CircuitPython

Circuit Python ist eine auf Python aufbauende Programmiersprache, die man nutzen kann, um den Raspberry Pi Pico zu programmieren. Micro-Python unterscheided sich von Python hauptsächlich darin, dass es über verschiedene Bibliotheken verfügt, mit deren Hilfe sich die elektronische Hardware des Raspberry Pi-Picos ansteuern lässt. Im Grunde genommen kannst du den gesamten Python-Code, den du bisher geschrieben hast auch auf dem Raspberry Pi-Pico ausführen.

Bevor Du Circuit Python benutzen kannst musst Du es erst auf dem Raspberry Pi Pico installieren. Das ist ganz einfach, denn wenn man ihn an den Computer anschließt wird der Pico als externes Laufwerk angezeigt. Alles was Du tun musst ist die Circuit Python Datei auf dieses Laufwerk kopieren. Du kannst sie auf der offiziellen Circuit Python Seite herunterladen 💾. Auf der Seite solltest Du als Sprache GERMAN auswählen, dann spricht Python auch Deutsch.

Doch zunächst musst du den Modus im Mu Editor wechseln. Gehe dazu auf den Reiter Modus und wähle dann RP 2040.

Circuit Python Grundlagen

Circuit Python erlaubt es mit verschiedener Hardware zu kommunizieren.

Blinken einer LED

Genauso wie du zunächst angefangen hast die interaktive Konsole am Computer zu nutzen sollst du nun auch hier zunächst einmal deinen Raspberry Pi Pico in der interaktiven Konsole programmieren. Klicke dazu wieder auf den Reiter Seriell. Dein erstes Program dem Pico wird eine LED einschalten, die sich auf dem Pico selbst befindet und physikalisch mit dem Pin 28 verbunden ist. Um in Circuit-Python auf die Pins deines Picos zuzugreifen werden zwei import-Anweisungen genutzt. Tippe also folgenden Code in die Konsole:

>>> import digitalio
>>> import board
>>> led = digitalio.DigitalInOut(board.GP28)
>>> led.direction = digitalio.Direction.OUTPUT
>>> led.value = True

Anstatt aber jedes Mal manuell die LED ein und auszuschalten wollen wir dies natürlich nun mit einem Program automatisch machen. Dein nächstes Program schaltet die LED ein, wartet eine Sekunde, schaltet sie wieder aus und nach einer Wartezeit beginnt das Spiel von vorne. Um in Micropython solche zeitlichen Funktionen einzubauen wird die Funktion sleep benötigt, welche du mit from time import sleep importieren kannst.

>>> import digitalio
>>> import board
>>> from time import sleep
>>> led = digitalio.DigitalInOut(board.GP28)
>>> led.direction = digitalio.Direction.OUTPUT
>>> for i in range(10):
      led.value = True
      sleep(1)
      led.value = False
      sleep(1)

Ansteuern des Piezoelektrischen Lautsprechers

import board
import simpleio

simpleio.tone(board.GP5, 440, duration=1.0)
simpleio.tone(board.GP5, 880, duration=1.0)
import board
import simpleio


# Define pin connected to piezo buzzer.
PIEZO_PIN = board.GP5

# Define a list of tones/music notes to play.
TONE_FREQ = [ 262,  # C4
              294,  # D4
              330,  # E4
              349,  # F4
              392,  # G4
              440,  # A4
              494 ] # B4


# Main loop will go through each tone in order up and down.
while True:
    # Play tones going from start to end of list.
    for i in range(len(TONE_FREQ)):
        simpleio.tone(PIEZO_PIN, TONE_FREQ[i], duration=0.5)
    # Then play tones going from end to start of list.
    for i in range(len(TONE_FREQ)-1, -1, -1):
        simpleio.tone(PIEZO_PIN, TONE_FREQ[i], duration=0.5)

Ansteuern der Neopixel LEDs

Öffne das CircuitPython Bundle navigiere zu lib/ um von dort die Datei neopixels.py in den lib/ Ordner deines Picos zu kopieren.

Übungsaufgabe: Steuerung der Farbe der LEDS

import time
import board
import digitalio
from rainbowio import colorwheel
import neopixel

# Definition der Eingängen
pixel_pin = board.GP22
num_pixels = 4

sw1 = digitalio.DigitalInOut(board.GP6)
sw2 = digitalio.DigitalInOut(board.GP7)
sw3 = digitalio.DigitalInOut(board.GP8)
sw4 = digitalio.DigitalInOut(board.GP9)

pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)

RED = (255, 0, 0)
YELLOW = (255, 150, 0)
GREEN = (0, 255, 0)
CYAN = (0, 255, 255)
BLUE = (0, 0, 255)
PURPLE = (180, 0, 255)

while True:
    if not sw1.value:
        pixels.fill(RED)
    if not sw2.value:
        pixels.fill(YELLOW)
    if not sw3.value:
        pixels.fill(GREEN)
    if not sw4.value:
        pixels.fill(CYAN)
    pixels.show()
...
colors = [RED, YELLOW, GREEN, CYAN, BLUE, PURPLE]

current_color_index = 0
while True:

    if not sw1.value:
        current_color_index -= 1
    if not sw4.value:
        current_color_index += 1

    current_color_index = current_color_index % len(colors)
    pixels.fill(colors[current_color_index])
    pixels.show()
    time.sleep(0.1)

Ansteuerung des Temperatur- und Luftfeuchtigkeitssensors

Kopiere die Datei adafruit_sht31d.py in den lib Ordner deines Picos.

import board
import time

# Die nächsten zwei Bibliotheken brauchen wir um mit
# dem Sensor zu sprechen.
import busio
import adafruit_sht31d

# Über die Variable sensor wollen wir mit dem Sensor
# kommunizieren. Dazu sind zwei Befehle notwendig.
i2c = busio.I2C(scl=board.GP17, sda=board.GP16)
sensor = adafruit_sht31d.SHT31D(i2c)

# Super. Jetzt starten wir wieder eine Endlosschleife.
# In der Schleife können wir die Temperatur (temperature)
# und Luftfeuchtigkeit (relative_humidity) abrufen und
# ausgeben.
while True:
    print(sensor.temperature)
    print(sensor.relative_humidity)
    time.sleep(1.0)

Die zwei Werte stehen als Kommazahlen (float) zur Verfügung. Du kannst sie zum Beispiel nutzen, um mit den farbigen LEDs ein einfaches Thermometer umzusetzen.