4.4 Ein- und Ausgabe

Hier erfahren Sie, wie Programme mit der Außenwelt kommunizieren, indem sie Eingaben verarbeiten und Ausgaben generieren.

  • Beim Pi Pico erfolgt die Eingabe typischerweise über Sensoren, Taster oder durch Daten aus dem Netzwerk (WLAN, Bluetooth). Aber auch eine Eingabe durch ein Touch-Display ist möglich. Wenn der Pi Pico als Webserver läuft, dann können Daten auch über einen Webclient (Browser) geschickt werden.

  • Die Ausgabe erfolgt über Displays oder LEDs oder durch das Senden von Daten.

Wir simulieren hier die Eingabe von Daten (die über einen Browser geschickt werden könnten), indem wir diese Daten in Thonny eingeben, während der Pi Pico angeschlossen ist.

Übersicht Ein- und Ausgabe

Die Ein- und Ausgabe ermöglicht es einem Programm, mit der Außenwelt zu interagieren. In Python erfolgt die Eingabe typischerweise über die input()-Funktion, während die Ausgabe über die print()-Funktion oder durch die Steuerung von Hardware wie LEDs oder Displays erfolgt.

In Python erfolgt die grundlegende Eingabe über die input()-Funktion, die es ermöglicht, Benutzereingaben zu erfassen. Die Ausgabe erfolgt in der Regel über die print()-Funktion, die Daten auf der Konsole (in Thonny) anzeigt.

Ein- und Ausgabebefehle Beschreibung
input() Ermöglicht die Eingabe von Daten durch den Benutzer.
print() Gibt Daten auf der Konsole oder in Thonny aus.
Pin() Steuert Hardware wie LEDs und ermöglicht so die Ausgabe von Signalen. Aber auch die Eingabe über Sensoren wird damit ermöglicht.
recv() Empfängt Daten über das Netzwerk (z.B. von einem Webclient).
send() Sendet Daten über das Netzwerk (z.B. an einen Webclient).

Beispiele zu Verwendung von print()

# 1. Einfache Ausgabe
print("Hallo, Welt!")
# Ausgabe: Hallo, Welt!

# 2. Ausgabe mit Variablen
name = "Ute"
print("Hallo,", name)
# Ausgabe: Hallo, Ute

# 3. Ausgabe mit mehreren Argumenten
temperatur = 22.5
print("Temperatur:", temperatur, "°C")
# Ausgabe: Temperatur: 22.5 °C

# 4. String-Formatierung mit f-Strings
alter = 22
stadt = "Berlin"
print(f"{name} ist {alter} Jahre alt und lebt in {stadt}.")
# Ausgabe: Ute ist 22 Jahre alt und lebt in Berlin.

# 5. Ausgabe einer Berechnung mit gerundeten Nachkommastellen
ergebnis = 10 / 3
print(f"Das Ergebnis von 10 / 3 mit zwei Nachkommastellen: {ergebnis:.2f}")
# Ausgabe: Das Ergebnis von 10 / 3 mit zwei Nachkommastellen: 3.33

# 6. String-Formatierung mit format()
name = "Anna"
alter = 30
print("Name: {}, Alter: {}".format(name, alter))
# Ausgabe: Name: Anna, Alter: 30

# 7. Ausgabe einer Berechnung mit gerundeten Nachkommastellen
ergebnis = 10 / 3
print("Das Ergebnis von 10 / 3 mit zwei Nachkommastellen: {:.2f}".format(ergebnis))
# Ausgabe: Das Ergebnis von 10 / 3 mit zwei Nachkommastellen: 3.33

# 8. Python-Besonderheit multiplizieren im print (bitte nicht verwenden)
anzahl = 5
print(anzahl * "Miau ")
# Ausgabe: Miau Miau Miau Miau Miau 

Beispiel: Einfache Eingabe und Ausgabe

1
2
3
4
5
# Eingabe des Benutzers
name = input("Wie heißen Sie? ")

# Ausgabe der Eingabe
print("Hallo,", name)

In diesem Beispiel wird der Benutzer nach seinem Namen gefragt, und die Eingabe wird anschließend auf der Konsole ausgegeben.

Warning

MicroPython unterstützt nur den ASCII-Zeichensatz und bei einem Umlaut in der Eingabe erscheint in der Thonny-Kommandozeile: "WARNING: MicroPython ignores non-ascii characters of the input".

Einfache Ein- und Ausgabe mit dem Pi Pico

Um Daten vom Pi Pico auszugeben, können wir eine LED steuern oder Daten auf einem angeschlossenen Display anzeigen. Die Eingabe kann beispielsweise durch das Drücken eines Tasters erfolgen.

Beispiel: LED-Steuerung basierend auf Benutzereingaben

# LED ein- und ausschalten basierend auf Benutzereingaben
# Hierbei muss der Pi Pico mit Thonny verbunden bleiben
# J. Thomaschewski, 04.09.2024
from machine import Pin

# LED-Pin definieren
led = Pin('LED', Pin.OUT)

# Eingabe des Benutzers
eingabe = input("LED ein (1) oder aus (0)? ")

# Steuerung der LED basierend auf der Eingabe
if eingabe == "1":
    led.on()
    print("LED ist an.")
elif eingabe == "0":
    led.off()
    print("LED ist aus.")
else:
    print("Ungültige Eingabe.")

In diesem Beispiel wird die LED am Pi Pico basierend auf der Benutzereingabe ein- oder ausgeschaltet. Der Benutzer gibt 1 ein, um die LED einzuschalten, oder 0, um sie auszuschalten.

Eingabe und Ausgabe über das Netzwerk

Der Pi Pico kann Daten über das Netzwerk empfangen und senden, wenn er als Webserver oder Client verwendet wird. Dies ermöglicht beispielsweise die Fernsteuerung über einen Webbrowser.

Einfaches Beispiel: Daten über das Netzwerk empfangen und verarbeiten

Hier simulieren wir eine einfache Server-Client-Interaktion, bei der der Pi Pico als Server fungiert und Daten von einem Webclient (Browser) empfängt.

import network
import socket
import time

# WLAN-Zugangsdaten
SSID = 'Ihr_WLAN_Name'
PASSWORD = 'Ihr_WLAN_Passwort'

# WLAN verbinden
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)

# Warten, bis das WLAN verbunden ist
while not wlan.isconnected():
    print("Verbindung zum WLAN wird hergestellt...")
    time.sleep(1)

print("WLAN verbunden:", wlan.ifconfig())

# Webserver starten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print("Listening on", addr)

# Server wartet auf Verbindungen
while True:
    client, client_addr = server.accept()
    print("Client verbunden von", client_addr)

    # Daten vom Client empfangen
    request = client.recv(1024)
    print("Request:", request)

    # Antwort an den Client senden
    response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHallo von Pi Pico!"
    client.send(response)
    client.close()

In diesem Beispiel fungiert der Pi Pico als einfacher Webserver, der Anfragen von einem Browser entgegennimmt und darauf antwortet. Dies zeigt, wie der Pi Pico Daten aus dem Netzwerk empfangen und verarbeiten kann.

Besseres Beispiel: Daten über das Netzwerk empfangen und verarbeiten

# Webserver zur Steuerung einer LED am Pi Pico
# J. Thomaschewski, 04.09.2024
import network
import socket
from machine import Pin

# LED-Pin definieren
led = Pin('LED', Pin.OUT)

# WLAN verbinden
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('WLAN-SSID', 'WLAN-PASSWORD')

# Warten auf die Verbindung
while not wlan.isconnected():
    pass

print('Netzwerkverbindung hergestellt')
print('IP-Adresse:', wlan.ifconfig()[0])

# Server starten
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
server = socket.socket()
server.bind(addr)
server.listen(1)
print('Listening on', addr)

# Server läuft und wartet auf Anfragen
while True:
    client, client_addr = server.accept()
    print('Client verbunden von', client_addr)

    # Anfrage vom Client empfangen
    request = client.recv(1024)
    request = str(request)
    print('Request:', request)

    # LED ein- oder ausschalten basierend auf der Anfrage
    if '/led_on' in request:
        led.on()
        response = "LED ist AN"
    elif '/led_off' in request:
        led.off()
        response = "LED ist AUS"
    else:
        response = "Unbekannter Befehl"

    # Antwort an den Client senden
    client.send("HTTP/1.1 200 OK\r\n")
    client.send("Content-Type: text/html\r\n\r\n")
    client.send("<html><body><h1>{}</h1></body></html>".format(response))
    client.close()