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.
- Was macht das Programm? erklärt, was das jeweilige Programm bewirkt.
- Beschreibung der Befehle erläutert kurz benutzte Programm-Befehle .
- 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-50-Eingabe Supermann.py
PB-1-1-60-bedingte Schleife.py
PB-1-1-80-Was tun Generator.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-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.
- in anschließender Klammer folgt die anzuzeigende Ausgabe-Information:
Was probieren ...?
- Text in Anführungszeichen ändern,
- print Befehl mehrfach anwenden.
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
- in anschließender Klammer folgt die anzuzeigende Ausgabe-Information:
- 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.
- ...
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.
- ...
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.
- ...
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.
- ...
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.
- ...
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.
- ...
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.
- ...
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===
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.
- ...
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".
- ...
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".
- ...