feat: Add section "LED Ansteuern"

- Add section LED Ansteuern
- Change Jupyter Python Kernel to Micropython Kernel
This commit is contained in:
Laborratte5 2024-05-06 23:36:27 +02:00
parent 7fbdb3b249
commit 48697858ac
Signed by: Laborratte5
GPG key ID: 3A30072E35202C02

View file

@ -126,6 +126,7 @@
"cell_type": "markdown",
"id": "c2814d1b-eec1-49ed-af93-078812960d7e",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
@ -135,27 +136,183 @@
"In der Mathematik wäre die zweite Zeile falsch, da `x` niemals gleich `x + 1` sein kann.\n",
"Ließt man die Zeile jedoch mit dem \"wird zu\" ist sogar klar, was die Zeile tut.\n",
"`x` wird zu `x + 1`\n",
"Nach dem Ausführen dieser Zeile steht in `x` somit der Wert welchen man erhält, wenn man den Wert der zuvor in `x` stand `+1` rechnet."
"Nach dem Ausführen dieser Zeile steht in `x` somit der Wert welchen man erhält, wenn man den Wert der zuvor in `x` stand `+1` rechnet.\n",
"\n",
"## LED ansteuern\n",
"\n",
"Nachdem wir nun etwas über Anweisungen und Variablen gelernt haben, wollen wir unser Wissen nutzen um eine LED an- und auszuschalten.\n",
"Unser Mikrocontroller hat eine eingebaute LED an GPIO Port 2. GPIO steht für General Purpos Input Output und bezeichnet die Pins, welche durch Programme genutzt werden können um Aktoren zu steuern oder Sensoren zu lesen. \n",
"Da diese Pins sowohl als Eingang als auch als Ausgang dienen können, muss man sie vor dem benutzen in einem Programm initialisieren.\n",
"Das heißt einstellen ob man sie als Eingabe oder Ausgabe Pin nutzen möchte. Beides gleichzeitig ist nicht möglich (und wahrscheinlich auch nicht sonderlich sinnvoll). \n",
"Um anzugeben, welchen Pin man gerade meint (adressieren) sind diese durch nummeriert.\n",
"In unserem Programm geben wir dann einfach die Nummer dieses GPIO Pins an.\n",
"Welcher Pin welche Nummer hat, kann aus folgendem Diagramm bei den Zahlen mit der Beschriftung \"GPIO\" entnehmen: \n",
"![Pin Belegung des ESP8266](https://i0.wp.com/randomnerdtutorials.com/wp-content/uploads/2019/05/ESP8266-NodeMCU-kit-12-E-pinout-gpio-pin.png?quality=100&strip=all&ssl=1) ([Quelle](https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/))\n",
"\n",
"Aber wie genau steuern wir die LED jetzt eigentlich an?\n",
"Dazu nutzen wir sogenannten Software-Bibliothek. Eine Software-Bibliothek ist eine Ansammlung von Programmcode, welche uns zusätzliche Anweisungen zur Verfügung stellt. Oftmals werden Bibliotheken erstellt um häufig genutzte Programmteile anderen Programmiererinnen und Programmierern zur Verfügung zu stellen.\n",
"Um eine Bibliothek nutzen zu können sind zwei Dinge notwendig:\n",
"1. Die Bibliothek muss installiert sein (darum müssen wir uns hier nicht kümmern)\n",
"2. Die Bibliothek muss in das Programm (genauer gesagt in die Datei) eingebunden werden, wo sie genutzt werden soll\n",
"\n",
"Mit dem `import` Schlüsselwort lässt sich eine Bibliothek in Python in eine Datei einbinden."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "73d8981a-ed90-40f9-8362-7febf976158a",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": [
"remove_cell"
]
},
"outputs": [],
"source": [
"%serialconnect # Diese Zeile ist nur dazu da, den Computer mit dem Mikrocontroller zu verbinden. Im späteren Programm taucht dies Zeile nicht mehr auf"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b9136e6e-8f97-45c5-94e8-42d87b72e007",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"import machine"
]
},
{
"cell_type": "markdown",
"id": "5f397d8a-9e9a-44de-8d99-b34b982f113d",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"Der Name der Bibliothek die wir benötigen lautet `machine`. Also können wir sie durch die Anweisung `import machine` in unser Programm einbinden. \n",
"Mitfhile von `machine.Pin` können wir nun auf sogenannte Methoden zugreifen. Methoden sind eine Reihe an Anweisungen, die gemeinsam nacheinander ausgeführt werden.\n",
"Sie helfen dabei, komplizierte Anweisungsabfolgen zu verstecken und somit Programme zu vereinfachen.\n",
"Dabei kann eine Methode Parameter entgegen nehmen. Parameter helfen dabei, eine Methode allgemein zu halten.\n",
"Wir haben bereits schon eine Methode mit Parametern genutzt: `print(\"Mein Text\")` hierbei ist `print` der Methodenname. Dieser gibt an, welche Methode wir aufrufen (ausführen). In den runden Klammern befindet sich die sogenannte Parameterliste. `print` hat bis zu einem Parameter. Dieser gibt den Wert an, welcher ausgegeben werden soll. (Der Korrektheit zuliebe erwähne ich hier noch, dass es sich bei `print` genau genommen um keine Methode, sondern eine Funktion handelt. Der Unterschied ist hier allerdings nicht relevant) \n",
"Um einen GPIO Pin zu initialisieren gibt es die `machine.Pin()` Methode.\n",
"Diese Methode braucht sogar zwei Parameter. Der erste Parameter gibt die Nummer des GPIO Pins an, die wir nutzen möchten. Mit dem zweiten Parameter legen wir fest, ob wir den Pin als Eingang, oder als Ausgang verwenden möchten."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d9da02bd-d901-45ca-b078-579055fa6b87",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"machine.Pin(2, machine.Pin.OUT)"
]
},
{
"cell_type": "markdown",
"id": "63bd8c2e-6042-4c45-93da-9e685278d8fd",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"Nun sollte die LED auf unserem Mikrokontroller leuchten. \n",
"Aber wie können wir sie wieder ausschalten?\n",
"Dazu brauchen wir nochmals Zugriff auf den Pin. Aber wie bekommen wir diesen?\n",
"Bisher haben wir nur Werte an Funktionen übergeben (Den auszugebenden Text, oder die Pinnummer und den Modus), jedoch können Methoden auch Werte zurückgeben.\n",
"Die `Pin` Methode der `machine` Bibliothek gibt uns zum Beispiel ein sogenanntes Pin Objekt zurück.\n",
"Dieses Pin Objekt können wir uns wie eine Ferbedienung vorstellen und mit dieser haben wir Zugriff auf den tatsächlichen Pin.\n",
"Das Pin Objekt stellt uns dafür weitere Methoden zur Verfügung, welche wir zum steuern des Pin nutzen können. \n",
"Aber zuerst müssen wir den Rückgabewert der Pin Funktion zwischen speichern.\n",
"In dem Abschnitt zu Variablen haben wir gelernt, dass Variablen nichts anderes als Zwischenspeicher sind und diese auch Objekte speichern können.\n",
"Also müssen wir den Rückgabewert der `Pin` Funktion in eine Variable schreiben.\n",
"Dies funktioniert genau gleich, wie andere Werte in eine Variable zu schreiben (mit dem `=` Operator)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b809fb8-8e79-4b0e-afa3-60b6e3d7fbaf",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"led_pin = machine.Pin(2, machine.Pin.OUT)"
]
},
{
"cell_type": "markdown",
"id": "65789800-c20c-4a39-837f-1354d5abc8f1",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"Wie man bei dieser Programmzeile sieht, dürfen Variablen auch mehr als einen Buchstaben lang sein. Sie dürfen jedoch nur aus Buchstaben, Unterstriche und Ziffern bestehen, jedoch *nicht* mit einer Ziffer anfangen.\n",
"\n",
"Um nun den Pin an und auszuschalten, können wir die `on()` bzw. `off()` Methode aufrufen.\n",
"Versuche im nächsten Feld die LED an und auszuschalten, indem du die `on()` und `off()` Methoden aufrufst.\n",
"Orientiere dich dafür am Aufruf der `Pin()` Methode oben.\n",
"**Wichtig:** An und Aus sind aufgrund der Verschaltung der LED vertauscht, lass dich dadurch nicht irritieren"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c0dccc9d-605b-4cd1-8d38-f4da40b53aaa",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
"display_name": "MicroPython - USB",
"language": "micropython",
"name": "micropython"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"codemirror_mode": "python",
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
"mimetype": "text/python",
"name": "micropython"
}
},
"nbformat": 4,