Programmierung
Um eine LED zum Leuchten zu bringen, muss man nicht zwingend programmieren. Um allerdings eine komplexere elektrische Schaltung zu steuern, bietet es sich an, einen Mikrocontroller zu verwenden. Der Mikrocontroller benötigt zusätzlich einen Programmcode, damit er weiß, was er überhaupt machen soll. Über den Code gibst du dem Mikrocontroller Anweisungen darüber, welche Sensoren er auslesen oder wann er einen Ton abspielen soll.
Der Mikrocontroller
Der Mikrocontroller ist mit einer Vielzahl von Eingangs- und Ausgangspins ausgestattet, die es ermöglichen, eine Vielzahl von Sensoren, Aktuatoren und anderen elektronischen Komponenten anzuschließen. Er verfügt auch über einen USB-Anschluss, der zur Stromversorgung und zur Programmierung des Mikrocontrollers verwendet werden kann.
- Wichtige Knöpfe:
- RST - zum Neustarten des Mikrocontrollers
- Wichtige Pins (manche tauchen auch mehrfach auch):
- 3V - Stromversorgung für Bauteile die 3V benötigen
- G - Ground/Masse
- VIN - Stromversorgung für Bauteile die 5V benötigen
- D1 - D4, D5 - D8 - Pins um digitale Werte (0/1) auszulesen
- A0 - Pin um analoge Werte zu messen
Alternativ können auch andere Mikrocontroller verwendet werden, wie zum Beispiel der ESP32 oder Arduino Nano. Der Code bleibt aber gleich, nur die Pin-Nummern können leicht abweichen.
ESP32:
- Wichtige Knöpfe:
- RST - zum Neustarten des Mikrocontrollers
- Wichtige Pins (manche tauchen auch mehrfach auch):
- 3V3 - Stromversorgung für Bauteile die 3V benötigen
- GND - Ground/Masse
- 5V - Stromversorgung für Bauteile die 5V benötigen
- GPIO - Pins (G) um digitale Werte (0/1) sowie analoge Werte zu messen
Arduino
Arduino ist eine Open-Source-Hardware- und Software-Plattform, mit der man interaktive elektronische Projekte erstellen kann. Die Plattform besteht aus einer Reihe von Mikrocontrollern und zugehörigen Entwicklungswerkzeugen, einschließlich einer integrierten Entwicklungsumgebung (IDE) und einer Bibliothek mit vorgefertigten Code-Snippets, die die Entwicklung von Projekten erleichtern. Wir verwenden hier allerdings nur die Entwicklungsumgebung und die Arduino-Bibliotheken. Es ist aber gut zu wissen, dass wenn Menschen von Arduino sprechen, sie sowohl das Arduino-Board als auch die Software oder die Arduino-Bibliotheken meinen können. Anstatt des Arduino-Boards nutzen wir als Mikrocontroller unser ESP8266-Board oder ESP32, auch wenn wir im weiteren Verlauf immer vom Arduino-Board sprechen.
Arduino-Entwicklungsumgebung (IDE)
Die IDE ist eine Software, die Programmiererinnen eine Sammlung der wichtigsten Werkzeuge zur Softwareentwicklung unter einer Oberfläche zur Verfügung stellt. Die Arbeit für die Erstellung von Programmen, das Debuggen von Code (der Fehlersuche) oder andere Aufgaben, die mit der Tätigkeit des Programmierens in Verbindung stehen, werden dadurch vereinfacht. Die Arduino-Entwicklungsumgebung ermöglicht zum Beispiel das Hochladen des Codes auf den Mikrocontroller über ein Menü oder einen Button. Des Weiteren macht sie es einfach, den seriellen Output (Informationen über die Daten) des Mikrocontrollers anzuzeigen. Ohne diese Unterstützung müsste die Entwicklerin sich selbst um diese Funktionalität kümmern. Es gibt verschiedene IDEs für verschiedene Programmiersprachen und Plattformen.
Programmiersprache
Die Programmiersprache, die in der Arduino-IDE verwendet wird, ist eine Variante der C++-Programmiersprache, die speziell für das Schreiben von Code für Arduino-Boards angepasst wurde.
Die Programme, die man in der Arduino-IDE schreibt, werden auch Sketch genannt. Die Dateien haben die Endung ino und werden, bevor sie auf den Mikrocontroller geladen werden, kompiliert. Das Kompilieren ist ein notwendiger Schritt, damit der Mikrocontroller den Code verstehen kann. Es wird dabei der Code in ein maschinenlesbares Format übersetzt.
Programmablauf
Das Programm wird von oben nach unten ausgeführt. Es gibt zwei Funktionen, die in jedem Programm bereits vordefiniert sind:
- Setup: wird einmalig ausgeführt
- Loop: wird in einer Endlosschleife aufgerufen
Nach dem Erstellen einer setup()-Funktion, die die Anfangswerte (Variablen, Pins und Bibliotheken) initialisiert, macht die Funktion loop() genau das, was der Name andeutet. Sie ist eine Endlosschleife, die nach jedem Durchlauf erneut aufgerufen wird. Dadurch kann dein Programm Variablen verändern, Daten lesen oder darauf reagieren.
Variablen
Eine Variable speichert einen Wert, um ihn später im Code weiterzuverwenden. Du kannst sie dir wie einen Becher vorstellen, worin du Informationen bestimmter Art halten kannst. Du kannst der Variable einen Wert zuweisen, indem du das ”=” verwendest, wobei die Variable links und der zu speichernde Wert rechts steht. Zum Beispiel “a = 42” würde bedeuten, die Variable a enthält den Wert 42. Variablen werden üblicherweise in englischer Sprache benannt.
int a = 42;
Datentypen
In unserem Programmcode wirst du den Datentypen int und bool begegnen.
Der Datentyp einer Variable beschreibt, welche Art von Daten in der Variable gespeichert werden können. Ist der Datentyp mit “int” angegeben, können Zahlen in der Variable gespeichert werden. Steht “bool” vor dem Variablennamen, dann können nur zwei Werte, 0 oder 1, gespeicht werden.
int a = 42;
bool digitalValue = digitalRead(D1);
Funktionen
Funktionen werden zum Steuern des Arduino-Boards und zur Durchführung von Berechnungen genutzt. Das heißt, eine Funktion gruppiert eine Reihe von Anweisungen, Rechenoperationen und Schritten, um sie einfacher wiederverwendbar zu machen. Eine Funktion kann ein In- und Output haben.
Funktionen werden üblicherweise in englischer Sprache benannt.
// Konfiguriert den spezifizierten Pin als Input oder Output
// In diesem Beispiel, sagt man damit dem Mikrocontroller,
// dass am Pin D0 ein Wert ausgeben werden soll
pinMode(D0, OUTPUT);
- Die Schreibweise (Syntax) der Funktion ist pinMode(pin, mode), pin und mode sind dabei Parameter der Funktion, der Funktionsinput.
Sie werden der Funktion übergeben, um damit etwas zu tun.
- pin: Die Arduino-Pinnummer, auf der der Pinmodus gesetzt werden soll.
- mode: Der Modus des Pins. Es gibt 3 Modi-Arten: INPUT, OUTPUT oder INPUT_PULLUP.
Wenn eine Funktion einen Rückgabe- oder auch Return-Wert (Output) hat, dann kannst du diesen in einer Variable speichern, um ihn weiter zu verwenden.
Befehle (vordefinierte Funktionen)
Es gibt eine Reihe von vordefinierten Funktionen, die du verwenden kannst, um den Mikrocontrollern Anweisungen zu geben. Diese werden in einer Bibliothek zusammengefasst.
Einen Überblick über die Befehle findest du auch hier.
Schleifen
Schleifen ermöglichen das Wiederholen von Rechenoperationen und Anweisungen. Mit einer Schleife kann ich sagen, dass etwas x Mal wiederholt werden soll.
Kommentare
Möchtest du dir Notizen im Code machen oder dem Mikrocontroller sagen, dass er eine Stelle ignorieren kann, dann kannst du die Code-Zeilen auskommentieren.
// Mit zwei Slash vor dem Text leitet man einen Kommentar ein.
// Achtung: Dieser gilt dann nur für eine Zeile.