PicoBello-1

Im Folgenden sind die in diesem Workshop besprochenen Projekte und Programme aufgeführt (TLN = Teilnehmende; WSL = Workshop-Leiter).

Die Projekt-/Programm-Beschreibungen umfassen:

  • Screenshot des Programms in Thonny, speziell, wenn in der Kommandozeile Programm-Eingaben und -Ausgaben gezeigt werden sollen,
  • kopierfähiger Programmcode im Bereich "MicroPython Programm-Code für Thonny",
  • Steckbrett-Graphik mit benötigten Kabel-Verbindungen und Bauteilen,
  • Steckbrett-Foto mit einer Beispiel-"Steckung".


In den Workshops gehen wir folgendermaßen vor:

  • Der WSL erklärt kurz Sinn und Zweck des nächsten Projekts.
  • Der WSL zeigt seine Projekt-Steckung live per Video, startet das Programm und zeigt und erklärt das Programm und die Programm-Auswirkungen.
  • Die TLN kopieren den Programm-Code in ihren eigenen Thonny-Editor.
  • Die TLN bauen ihre eigene Steckung anhand der Steckbrett-Graphik und des Steckbrett-Fotos.
  • Die TLN starten jeweils ihr Programm und beobachten die Programm-Auswirkungen.
  • Die TLN bestätigen die planmäßige Ausführung, oder beschreiben ein Problem oder einen Fehler.
  • Gemeinsam werden Problem oder Fehler besprochen und GEKLÄRT.
  • Erst wenn alle TLN-Programme planmäßig laufen, wird das nächste Programm in Angriff genommen.
  • Abhängig vom Workshop-Verlauf bestimmt der WSL Projekt-Inhalte und -Folge des Workshops.


Die Projekte / Programme sollen die Basis dafür bieten, dass die TLN die Programme anschließend selbständig nachvollziehen und erweitern, sowie eigene Projekte planen und durchführen können.

  1. Was macht das Programm? erklärt, was das jeweilige Programm bewirkt.
  2. Beschreibung der Befehle erläutert kurz benutzte Programm-Befehle .
  3. Was probieren ...? gibt Anregungen zum selber experimentieren .

Mit eckigen Klammern [ ] werden Programm-Befehle beschrieben; "Z4" steht für Zeile 4.

Viel Spaß beim Testen und Ausprobieren ...

 


 

Informationen zu MicroPython: https://docs.micropython.org/en/latest/rp2/quickref.html

MicroPython für Kids: https://www.sivakids.de/python-entwicklungsumgebung/

Python Tutorial: https://www.w3schools.com/python/default.asp

Link zu Download von "Get started ...": https://hackspace.raspberrypi.com/books/micropython-pico

Link zu Download von MicroPython UF2-Datei: https://www.raspberrypi.com/documentation/microcontrollers/micropython.html

 


 

Überblick PicoBello 1


PB-1-1-10-HalloWelt.py

PB-1-1-20-Schleife 0-9.py

PB-1-1-30-Schleife 1-10.py

PB-1-1-40-Endlos-Schleife.py

PB-1-1-50-Eingabe Supermann.py

PB-1-1-60-bedingte Schleife.py

PB-1-1-70-Zufallszahl.py

PB-1-1-80-Was tun Generator.py

PB-1-1-90-PrioMat.py

PB-1-2-10-LED_auf_Pico an aus.py

PB-1-2-11-LED_auf_Pico an aus mit Variablen.py

PB-1-3-10-LED ext an aus.py


PB-1-1-10-HalloWelt.py


==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==
print("Hallo Welt") ===Ende============ MicroPython Programm-Code für Thonny ============Ende===

 

Was macht das Programm?

  • Es testet, ob die Verbindung PC (mit Thonny) zu Pico (MicroPython) funktioniert, und meldet bei Erfolg: erstes Lebenszeichen des Picos.

Beschreibung der Befehle

  • Durch den Befehl [print] zeigt der Pico Informationen in der Kommandozeile des Thonny-Editors an
    • in anschließender Klammer folgt die anzuzeigende Ausgabe-Information:
      • Text in Anführungszeichen wird angezeigt, z.B. print("Hallo Welt") ergibt Hallo Welt in der Kommandozeile.

Was probieren ...?

  • Text in Anführungszeichen ändern,
  • print Befehl mehrfach anwenden.

Zurück zum Überblick ...


PB-1-1-20-Schleife 0-9.py

 

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

print("Schleife startet!")
for Nummer in range(10):
    print("Schleifen-Nummer", Nummer)
print("Schleife beendet!")

===Ende============ MicroPython Programm-Code für Thonny ============Ende===



Was macht das Programm?

  • Es bildet eine Schleife mit einer Anzahl von Durchläufen.

Beschreibung der Befehle

  • Der Befehl [print] zeigt Informationen im Thonny-Bereich Kommandozeile
    • in anschließender Klammer folgt die anzuzeigende Ausgabe-Information:
      • Text in Anführungszeichen wird angezeigt, z.B. print("Schleife startet!") ergibt Schleife startet! in der Kommandozeile
      • Variable werden mit ihrem Variablen-Namen angegeben, z.B. print(Nummer) ergibt z.B. 3 in der Kommandozeile
      • Anzeige-Informationen werden durch "," getrennt, z.B. print("Schleifen-Nummer ", Nummer) ergibt z.B. Schleifen-Nummer 3 in der Kommandozeile
  • Der Befehl [for Nummer in range(10):] bildet eine bedingte Schleife,
    • was in der Schleife passiert, wird 4 Leerzeichen eingerückt
    • die Variable "Nummer" (Variablen-Name ist frei wählbar) läuft von "0" bis "9" (Achtung: 10 mal, aber nicht bis "10"!)
    • wenn in der range-Klammer nur ein Wert steht, ist dies der "End"-Wert (der nicht erreicht wird) und der Anfangs-Wert ist "0".
    • was nach der Schleife erfolgt, hat die selbe Einrückung wie "for"

Was probieren ...?

  • Den Schleifen-Zähler End-Wert (anfangs "10") verändern.
  • Die Variable "Nummer" umbenennen.
  • Den Mitteilungstext in der print-Klammer verändern.
  • ...

Zurück zum Überblick ...


PB-1-1-30 Schleife 1-10.py

 

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

print("Schleife startet!")
for Nummer in range(1,11):
    print("Schleifen-Nummer", Nummer)
print("Schleife beendet!")

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es bildet eine Schleife mit einer Anzahl von Durchläufen, wie "0020 Schleife 0-9.py".

Beschreibung der Befehle

  • In der range-Klammer sind (im Gegensatz zu Programm 0020) zwei Werte eingetragen; der erste ist der Start-Wert und der zweite ist der End-Wert.
  • Die Variable "Nummer" (Variablen-Name ist frei wählbar) läuft von "1" bis "11" (Achtung: 10 mal, aber nicht bis "11"!)

Was probieren ...?

  • Start-Wert und End-Wert verändern.
  • ...

Zurück zum Überblick ...


PB-1-1-40-Endlos-Schleife.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import utime
print("Schleife starten!")
while True:
    print("Schleife läuft!")
    utime.sleep(1)
print("Schleife beendet!")

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es bildet eine Endlos-Schleife, d.h. es kommt nicht zu einem Ende, sondern muss abgebrochen, bzw. gestoppt werden.
  • Es schreibt im Sekundentakt und endlos (in die Kommandozeile) "Schleife läuft".

Beschreibung der Befehle

  • Mit [import] werden sogenannte "Bibliotheken" (Programmpakete) eingebunden, durch die der Pico zusätzliche, spezielle Programm-Befehle nutzen kann.
  • Die Bibliothek "utime" bietet zeitbezogene Befehle, wie z.B. Zeitverzögerungen, quasi "Pausen".
  • Der Schleifen-Befehl [while] prüft eine Bedingung auf "Wahrheit", ob ein Zeit- oder Wert-Vergleich zutrifft, also "wahr" ist; solange die Bedingung "wahr", also zutreffend ist, wird die Schleife durchlaufen. Wenn nicht (mehr) "wahr", wird der Folge-Befehl mit [while]-Einrückung - also [print] in Z6 - ausgeführt.
  • "True" hinter [while] bedeutet quasi automatische und andauernde Bedingungs-Erfüllung. Daher wird der Folge-Befehl [print] in Zeile 6 NIE erreicht.
  • Die Schleifen-Befehle [print] und [utime.sleep] in Z4 und Z5 werden durchlaufen und nach Z5 wird "hochgesprungen" zu Z4 und so wird die Schleife endlos durchlaufen.
  • Der [print]-Befehl in Z6 wird nicht erreicht.
  • Das Programm kann nur durch Stoppen beendet werden.
  • [utime.sleep] bedeutet eine Pause in Anzahl Sekunden, deren Wert in der Folge-Klammer steht; Dezimal-Angaben werden mit "." angegeben, also z.B. [utime.sleep(0.8)] bedeutet eine Pause von 0,8 Sekunden.

Was probieren ...?

  • Den Pausenwert (Klammerwert hinter [utime.sleep]) variieren.
  • ...

Zurück zum Überblick ...


PB-1-1-50-Eingabe Supermann.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

Eingabe_Name = input ("Wie heißt Du? ")
if Eingabe_Name == "Clark Kent":
    print("TOLL, Du bist Supermann!")
else:
    print(Eingabe_Name,"  ??? Du bist nicht Supermann!")
    

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es fragt eine Namens-Eingabe ab und prüft auf Übereinstimmung, also "Gleichheit" mit "Clark Kent".
  • Abhängig von der Eingabe ist man Supermann oder nicht.
  • Das Programm läuft nur ein Mal durch, unabhängig von der Eingabe.

Beschreibung der Befehle

  • Der Befehl [input] bewirkt die Anzeige des Klammertextes in der Kommandozeile, und ordnet die Eingabe der frei wählbaren Variablen "Eingabe_Name" zu.
  • Das Zeichen "=" ordnet Werte zu, wie in Z1.
  • Das Zeichen "==" wird in der Abfrage, ob 2 Werte identisch sind, benutzt, wie in Z2.
  • [if ...:][else:] ist ein Abfrage-Befehl, der aufgrund des Abfrageergebnisses verzweigt, und den einen oder den anderen "Ast" durchläuft.
  • Wenn die Abfrage in Z2 stimmt, wird Z3 durchlaufen ... und dann Z6 ... und Ende.
  • Wenn die Abfrage in Z2 NICHT stimmt, wird Z5 (und NICHT Z3) durchlaufen ... und dann Z6 ... und Ende.

Was probieren ...?

  • Den Abfrage-Text verändern.
  • Weitere Zeilen nach Z3 oder Z5 einfügen.
  • Die Variable "Eingabe_Name" verändern.
  • ...

Zurück zum Überblick ...


PB-1-1-60-bedingte Schleife.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

Name = input("Wie heißt Du? ")
while Name != "Clark Kent":
    print("Du bist nicht Supermann  -  Versuchs nochmal!")
    Name = input("Wie heißt Du? ")
print("Du bist Supermann!")

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es prüft, wie 0050, ob die Eingabe mit "Clark Kent" übereinstimmt.
  • Es loopt (= wiederholt die Schleife; von engl. loop = Schleife, Kreis, Kreislauf) und läuft so lange mit Abfragen, bis die "richtige" Eingabe erfolgt.

Beschreibung der Befehle

  • Der Vergleichs-Operator "!=" bedeutet "ist NICHT identisch".
  • Also bedeutet Z2: Solange die Variable "Name" ungleich "Clark Kent" ist, ist die [while]-Bedingung erfüllt, die Schleife Z3+Z4 wird durchlaufen, und Z3 fortwährend abgefragt.
  • Wenn die Variable "Name" GLEICH "Clark Kent" ist, die [while]-Bedingung also NICHT erfüllt ist, wird die Schleife Z3+Z4 NICHT MEHR durchlaufen, Z5 angesprungen ... und danach das Programm beendet.

Was probieren ...?

  • Eingabe-Variable "Name" umbenennen.
  • ...

Zurück zum Überblick ...


PB-1-1-70-Zufallszahl.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import utime
import random

while True:
    Zufallszahl = random.randint(0,10)
    print(Zufallszahl)
    utime.sleep(1)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es listet Zufallszahlen im Sekundentakt auf.

Beschreibung der Befehle

  • Die Bibliothek [random] bietet Funktionen zur Erzeugung von Zufallszahlen.
  • [while true:] erzeugt, da mit "True" automatisch erfüllt, eine Endlos-Schleife.
  • [random.randint] bietet eine Integer-Zahl (also Ganzzahl) zwischen und einschließlich des Anfangs-Werts (im Beispiel: 0) und des End-Werts (im Beispiel: 10).
  • Durch [print] in Z6 wird die Zufallszahl in der Kommandozeile angezeigt.
  • [utime.sleep(1)] verursacht eine 1-Sekunden-Pause bevor das Programm wieder zu Z5 springt um die nächste Zufallszahl zu erzeugen.

Was probieren ...?

  • Die Anfangs- und End-Werte des Zufallszahlen-Bereichs in Z5 verändern.
  • Die Pausenzeit in Z7 variieren.
  • ...

Zurück zum Überblick ...


PB-1-1-80-Was tun Generator.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import random

import utime

wort1 = ["Ich gehe", "Wir gehen", "Oma geht", "Unsere Familie geht", "Papa geht"]
wort2 = ["heute", "morgen", "nächste Woche", "an Weihnachten", "an meinem Geburtstag", "übermorgen"]
wort3 = ["ins Schwimmbad.", "ins Kino.", "Pizza essen.", "in Urlaub.", "Ski fahren.", "in die Kirche."]

while True:
    zufall1 = random.randint(0,len(wort1)-1)
    zufall2 = random.randint(0,len(wort2)-1)
    zufall3 = random.randint(0,len(wort3)-1)

    print()
#    print(zufall1,zufall2,zufall3)
    print(wort1[zufall1],wort2[zufall2],wort3[zufall3])
    
    utime.sleep(2)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es bietet einen "Vorschlags-Generator", welcher Empfehlungen zu Freizeit-Aktivitäten im 2-Sekunden-Rhytmus anzeigt.
  • 3 vorbestimmte Zeichengruppen werden jeweils zufällig ausgesucht und aneinandergereiht.
  • Es ist ein Beispiel für die Anwendung von 3 Zufalls-Generatoren.

Beschreibung der Befehle

  • wort1,2,3 in Z5-Z7 bilden jeweils Zeichen-Gruppen mit verschiedenen Anzahlen von Zeichen in Hochkommas, jeweils getrennt durch Kommas.
  • Im Beispiel besteht "wort1" aus 5 Zeichengruppen und "wort2" und "wort3" aus jeweils 6 Zeichengruppen.
  • [len(wort1)] ermittelt die Anzahl der Zeichengruppen in wort1, also im Beispiel: 5.
  • "zufall1" ist ein Zufallswert zwischen 0 und (5-1=) 4.
  • [wort1["0"]] bietet den ersten Wert und [wort1["4"]] bietet den fünften Wert jeweils aus wort1.
  • [print] in Z16 setzt die drei Zeichen-Gruppen zusammen und zeigt so einen ganzen Satz in der Kommandozeile.

Was probieren ...?

  • Personen & Aktivitäten in wort1, Zeitpunkte in wort2 und Orte in wort3 (jeweils in Anführungszeichen und durch Komma getrennt) ergänzen und/oder rausnehmen.
  • Durch Entfernen/Setzen der Raute in Z15 die Zufalls-Zahlen zeigen/verbergen.
  • ...

Zurück zum Überblick ...


PB-1-1-90-PrioMat.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==
import random
import machine
import utime

led_auf_pico = machine.Pin(25, machine.Pin.OUT)

wort1 = ["Unsere Industrie ", "Deutschland ", "Unsere Gesellschaft ", "Unsere Politik ", "Die NATO ", "Die EU "]
wort2 = ["benötigt mehr ", "muss investieren in ", "muss aufholen bei ", "schläft auf dem Gebiet ", "hinkt hinterher bei ", "muss sich mehr engagieren bei ", "verschläft "]
wort3 = ["Robotik.", "KI.", "Digitalisierung.", "Autonomes Fahren.", "Drohneneinsatz.", "Vernetzung."]

while True:
    
    led_auf_pico.value(1)
   
    zufall1 = random.randint(0,len(wort1)-1)
    zufall2 = random.randint(0,len(wort2)-1)
    zufall3 = random.randint(0,len(wort3)-1)

    print()
    print(zufall1,zufall2,zufall3)
    print(wort1[zufall1],wort2[zufall2],wort3[zufall3])
    
    utime.sleep(0.3)
    led_auf_pico.value(0)
    
    utime.sleep(2)
===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Zurück zum Überblick ...


PB-1-2-10-LED_auf_Pico an aus.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine
import utime

LED_auf_Pico = machine.Pin(25, machine.Pin.OUT)

while True:
    LED_auf_Pico.value(1)
    utime.sleep(0.1)
    LED_auf_Pico.value(0)
    utime.sleep(0.7)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es schaltet die sich auf dem Pico befindliche LED ein und aus.

Beschreibung der Befehle

  • Die Bibliothek [machine] bietet die Nutzung von Ein- und Ausgabe-Funktionen auf dem Pico.
  • Die Zuweisung in Z4 [machine.Pin(25, machine.Pin.OUT)] definiert einerseits (OUT) eine Signal-Ausgabe und andererseits das genutzte GPIO-Pin, nämlich 25, welches die interne LED ansteuert.
  • [while true:] erzeugt, da mit "True" automatisch erfüllt, eine Endlos-Schleife, welche die danach eingerückten Befehle nacheinander wiederholend durchläuft.
  • Die in Z4 definierte LED-Funktion kann mittels [.value(1)] eingeschaltet und mittels [.value(0)] ausgeschaltet werden.
  • Die Pause in Z8 nach dem Einschalt-Befehl in Z7 definiert die LED-An-Dauer.
  • Die Pause in Z10 nach dem Ausschalt-Befehl in Z9 definiert die LED-Aus-Dauer.
  • Der Zyklus in der [while True:]-Schleife: einschalten - warten - ausschalten - warten - ... läuft endlos.

Was probieren ...?

  • Beide [utime.sleep]-Werte verändern.
  • ...

Zurück zum Überblick ...


PB-1-2-11-LED_auf_Pico an aus mit Variablen.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine
import utime

LED_auf_Pico = machine.Pin(25, machine.Pin.OUT)

an=0.1
aus=1

while True:
    LED_auf_Pico.value(1)
    utime.sleep(an)
    LED_auf_Pico.value(0)
    utime.sleep(aus)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===

Was macht das Programm?

  • Es macht das selbe wie 0210: die sich auf dem Pico befindliche LED ein- und aus-schalten.

Beschreibung der Befehle

  • Doch mit einem gewissen Unterschied: die Werte von [utime.sleep] in der jeweils folgenden Klammer werden nicht als Zahlenwerte (wie in 0210) eingegeben, sondern als Variable (z.B. "an" und " aus") die zu Beginn des Programms mit Werten belegt werden, und dann von den einzelnen Befehlen genutzt werden können. Dies ist besonders hilfreich, wenn die selben Zeit-Dauern öfters genutzt werden, wie z.B. beim Morse-Projekt.

Was probieren ...?

  • Verändern der Werte, die den Variablen zugeordnet werden (in Z6 und Z7).
  • Ändern der Variablen-Namen "an" und "aus".
  • ...

Zurück zum Überblick ...


PB-1-3-10-LED ext an aus.py

==Anfang=========== MicroPython Programm-Code für Thonny ===========Anfang==

import machine
import utime

externeLED = machine.Pin(15, machine.Pin.OUT)

while True:
    externeLED.value(1)
    utime.sleep(0.9)
    externeLED.value(0)
    utime.sleep(0.1)

===Ende============ MicroPython Programm-Code für Thonny ============Ende===


 

Was macht das Programm?

  • Es macht fast das selbe wie 0210, nämlich eine LED ein- und ausschalten, aber dieses Mal eine externe LED.

Beschreibung der Befehle

  • In Z4 wird nun GP15 adressiert, und zwar durch "Pin.OUT" als Ausgang, an den z.B. eine LED angeschlossen werden kann.
  • Die LED wird dort mit ihrer "Plus-Seite", der "Anode" (das ist der längere Draht) über einen 330 Ohm-Widerstand angeschlossen.
  • Die LED wird mit ihrer "Minus-Seite", der "Kathode" (das ist der kürzere Draht) mit der Minus-Längsleiste des Steckbretts verbunden.

Was probieren ...?

  • GP Pin ändern und entsprechend den Widerstand "umstecken".
  • ...

Zurück zum Überblick ...

 

PicoBello-Konzept

PicoBello-1

PicoBello-2

PicoBello-3

PicoBello-4