Garage-Lab e.V.

Das FabLab in Düsseldorf

Benutzer-Werkzeuge

Webseiten-Werkzeuge


workshopsundtutorials:arduino

Arduino und ESP32 Microcontroller Tutorials

Diese Wikiseite soll den Einstieg in die Welt der Microcontroller, insbesondere Arduino ermöglichen. Über das Inhaltsverzeichnis rechts kommen Sie auch direkt zu den Inhalten vom Esp32.
Wenn´s mal irgendwo hakt ist Hilfe nicht weit weg, hier ist der Forumsthread zu Arduino.
Nebenbei lernt man auch die Grundlagen der Programmierung.

Arduino im Browser simuliert, jetzt gleich ausprobieren

Wer erst einmal reinschnuppern will, muss nicht einmal einen Arduino oder Bauteile kaufen sondern kann die ersten Schritte sofort jetzt im Browser machen, wobei sich unter Firefox Schaltungen nicht speichern liessen. Mit Chrome funktioniert der Simulator aber einwandfrei. Die Simulation von Schaltkreisen ist mit Tinkercad von Autodesk unter der Anwendung „Circuits“ in englischer Sprache möglich.In diesem englischsprachigen Video wird der Simulator vorgestellt. (11 Min. Video)
Neben einem Arduino sind dort elektronische Komponenten. Oszilloskop, ICs und Microcontroller frei auf einem Breadboard manipulierbar und der Arduino lässt sich dort porgrammieren und online simulieren. Eigene Schaltpläne lassen sich so ohne das Risiko eines gebrutzelten Bauteils testen und auch für Andere freigeben. Das bedeutet man kann Schaltungen im Wiki oder Forum verlinken wie das Beispiel dieser FOR Schleife mit Pulldown Resistor (zum betrachten und testen ist die Registrierung bei Autodesk notwendig). Andere können daraus lernen oder sollte eine Schaltung nicht laufen, helfen.
Ein anderer Simulator, dessen Schwerpunkt nicht auf Simulation von Bauteilen sondern auf der Programmierung z.B. von ESP32 mit Micropython liegt ist Wokwi.
Tip: ein großer Bildschirm mit hoher Auflösung ist bei Verwendung des Simulators von Vorteil.

Das Arduino Tutorial

Was kann der Chip des Arduino?

  • Rechnen/Programmcode ausführen
  • Timerfunktion (recht ungenau, Fehlertoleranz +/- 0,5%)
  • Schalten (bis zu 5V, max. 20mA pro Pin, insgesamt maximal 200mA)
  • Messen (bis zu 5V, mit 5/1023V Auflösungsgenauigkeit)
  • –> Regeln (Messen+Programmcode ausführen+Schalten)
  • –> Steuern (Programmcode ausführen+Schalten+Timer)
  • autonom reagieren (Steuern+Regeln)
  • Mit anderer Hardware kommunizieren (über Schaltkreise, BUS System oder Serielle Schnittstelle)

Wofür kann man einen Microcontroller verwenden? Überblick über einige Einsatzfelder:

Langweilige, sich wiederholende Aufgaben ausführen
(z.B. Eingangstor im Supermarkt, Mikrowelle, Gießautomat, Spülmaschine, Thermomix)
Langsame Prozesse mit geringem Stromverbrauch steuern oder messen
(z.B. Zeitraffer, Wetterstation, Gewächshauslüftung regeln, Mülltonnenblinklicht)
Kontinuierlich genau und schnell arbeiten
(z.B. CNC Fräse, 3D Drucker, Pick and Place Maschine,PCB Tintenplotter)
Schnelle Prozesse in Echtzeit steuern
(z.B. Einspritzanlage am Verbrennungsmotor, Kameraauslöser mit Sensor, Wackeln im Objektiv korrigieren)
Prozesse (oder mehrere Prozesse, also Szenarien) aus der Ferne schalten und steuern
(z.B. SmartHome:Briefkasten der bescheid sagt wenn er voll ist, dem Paketdienst die Tür aufmachen, die Waschmaschine eine E-Mail schicken lassen wenn sie fertig ist, ferngesteuerter Modellbau, 220V-Verbraucher mit Relais steuern, IR-Fernbedienungen simulieren, …)
Gefährliche Tätigkeiten ausführen

Hier und hier eine Auswahl an gängigen Sensoren die an einen Arduino angeschlossen werden können.

Instructables zeigt eine Reihe von Beispielprojekten.

Exkurs: Computer Science

Disclaimer: wer lediglich einfache Aufgaben mit dem Arduino ausführen will wie Servos bewegen oder Temperaturdaten sammeln, kann direkt mit "Arduino programmieren in C++" weitermachen.

Thema dieses Kapitels ist die Wissenschaft, systematisch Lösungsstrategien (Programme) für Probleme zu entwickeln, Computer sollen dann in der Lage sein, diese Lösungsstrategien auszuführen.
Wie schnell vermeintlich triviale Aufgaben komplex werden können zeigt dieses Beispiel, wie Zähneputzen als Algorithmus aussehen kann.

Was ist unser Ziel? Wie sieht der Lösungsweg aus und welche Informationen müssen dafür gegeben sein?
Hier hilft das Problemlösungsverfahren Computational Thinking.

1. Zerlegung des Problems in einfachere und leicht lösbare Teilprobleme
2. Mustererkennung (Was für Lösungen haben bei ähnlichen Problemen funktioniert? Damit Lösungsansätze entwickeln.)
3.Abstrahieren (Unwichtiges wegfallen lassen). Systematische Abstrahierung:
A) Input (Informationen müssen gegeben sein oder werden abgefragt /Input über Sensoren)
B) Verarbeitung (Einzelne Arbeitsschritte eines Programms bis zur Lösung)
C) Output (Wie wird das Ergebnis präsentiert?)
4.Algorithmen formulieren (Ein Algorithmus ist ein Programm das ein Mensch lesen kann, zum Beispiel ein Rezept aus dem Kochbuch. →eine Liste an Arbeitsschritten formulieren, die zur Lösung des (Teil)problems führen).
Wir planen ein Programm in Excel mit Pseudocode:
Tabelle mit 3 Spalten (Eingabe | Verarbeitung | Ausgabe) entlang einer Zeitachse (Tabellenspalten). Wir verwenden in der „Verarbeitung“-Spalte Funktionen, Schleifen, Zustände und Boolean Expressions (Fragen, deren Antwort „Wahr“ oder „Falsch“ ist).
… in der Praxis kommen wir dann ganz schnell zu 5. Debugging: der Algorithmus funktioniert nicht wie erwartet weil wir in einem der 4 oben genannten Schritte eine nicht richtige Aussage getroffen haben. Entweder sie war nicht exakt genug formuliert oder schlichtweg falsch. Also wird optimiert, getestet, wieder optimiert, …bis er zufriedenstellend läuft.

Programmieren ohne Sprachbarriere

Die hier vorgestellten kostenlosen grafischen Programmieroberflächen können nicht nur einen Arduino programmieren, mit ihnen lassen sich auch die Grundlagen der Programmierung wie der Umgang mit Funktionen, Schleifen, Zustände und Boolean Expressions experimentell ausprobieren, ohne dass dabei eine Sprache erlernt werden muss. Mehr dazu hinter dem Link.

  • Überblick über Programmiersprachen, Arduino IDE mit C++

Arduino programmieren in C++

Wer es noch nicht weiss: KI Software wie z.B. ChatGPT kann aus Fliesstext der die Funktion des Programms beschreibt Programmcode in C++ generieren!

Wem das zu wenig Inhalte zur Programmierung in C++ waren, dem empfehle ich den Videokanal der IMDFHTrier, dort gibt es eine große Anzahl an weiteren Codebeispielen und es wird sehr ausführlich auf viele Hintergründe eingegangen.

Referenz aller Arduino C++ Befehle

Die Referenz für alle Befehle der Arduino Programmiersprache ist die erste Anlaufstelle um einen Befehl zu erklären. Die Sprache der Webseite lässt sich ganz oben auf Deutsch umstellen.
Profitipp: in der Arduino-IDE einen Befehl markieren und „STRG+Umschalt+F“ drücken öffnet die dazugehörige Beschreibungsseite.
Spannend sind auch die Library Examples.

MicroSD Karte verwenden

Die Micro SD Karte verwendet das SPI Protokoll und verwendet die serielle Schnitstelle (SPI=SerialPinIn, SPO=SerialPinOut, etc.). Diese Webseite führt umfassend in das Thema ein.
Verbinden mit dem Chip. in diesem Programm sind die grundlgenden Befehle. Dateien auslesen und beschreiben wird hier gezeigt.

Esp32, eine spannende Alternative zum Arduino

Exemplarisch sei hier die Pinbelegung des Doit esp32 V4 gezeigt.
ESP32 hat eine viel höhere Rechenleistung (16 MHz gegenüber 240 MHz Dual Core), viel mehr RAM (2 KB gegenüber über 200 KB) und viel mehr Flash (32 KB gegenüber 4 MB).Er ist günstig und bietet neben Arduino IDE Support Wifi, Bluetooth und BLE, kann als Server eine Webseite hosten. Dieses Video geht im Detail auf die Features und technischen Details des Esp32 ein.

vorbereiten der Arduino IDE für ESP32 .
steuern von Shields für 5V Controller mit dem ESP32 (der nur 3,3V über seine IO Pins schalten kann): Logic level shifters. Achtung: logic level shifters funktionierten nur bei digitalen Signalen, nicht bei Analogsignal.
Tip: müssen auf einem Breadboard Verbraucher mit 5V versorgt werden, kann dies über den USB Stecker passieren, der in den Esp32 eingesteckt ist. Der VIN Pin ist direkt mit dem 5V Kontakt am USB Stecker verbunden, 5V können von da also für das Breadboard abgegriffen werden.
Liste der verfügbaren Pins
PWM am Esp32 mit dem Befehl ledcAttachPin , da der analogWrite Befehl den wir vom Arduino kennen durch diesen mächtigeren Befehl ersetzt wurde. Hier ist eine 2. Erklärung dieses Befehls.
Digital 2 Analog Current (DAC Pins) können eine echte Analoge Spannung von 0-3,3V ausgeben.
deep sleep (RTC Pins) mit der 2. stromsparenden CPU des Esp32, hier läuft darüber stromsparend ein Timer.
kapazitive Sensorleitungen (10 Touch sensor Pins) ersetzen Taster indem sie Ladungsunterschiede von Haut messen.
Analoge Spannung zwischen 0 und 3,3V messen mit ADC Pins (Analog to digital Current) . ADC1 Pins können immer verwendet werden, ADC2 Pins können nur dann verwenden, wenn das Wifi nicht verwendet wird.
magnetische Felder in direkter Nähe des Esp32 Chips messen mit dem Hall Sensor. Er kann und zwischen Nord- oder Südpol ausrichtung des Magneten unterscheiden.
Tip: das BUS Interface I²S wird in vielen Projekten verwendet, von Ansteuerung von Bildschirmen bis zu Schrittmotoren, die sich damit exakt und schnell steuern lassen.

Micropython & Circuitpython- eine Alternative Programmiersprache zu C++

Wer deutsche Tutorials bevorzugt findet hier einen Einstieg in Micropython mit dem ESP32. Micropython bietet den Vorteil, direkt auf dem ESP32 zu laufen, ein kompilieren des Codes ist daher nicht notwendig, was das debugging vereinfacht.
Hier ist der Link zu Circuitpython für ESP32. Ab den Essentials wird in der Dokumentation auf die Grundlagen eingegangen.
Hier die Referenz zu allen circuitpython Befehlen.
Dies ist natürlich ein zweischneidiges Schwert, denn C++ läuft schneller auf der kleinen CPU und verbraucht weniger Energie weil es maschinennaher code ist. Dieses Video geht auf die Vor- und Nachteile im Detail ein.

Esp32 Wlan Funktionalitäten

Für Wlan Anwendungen hat sich bewährt dass einer der beiden Prozessoren die Wlan Aufgaben übernimmt während der andere das Programm im Loop abarbeitet.
Drahtlose kommunikation ohne Router: im ESP-NOW Broadcast mode ist der ESP32 Access Point
ESP32 im Wlan
ESP8266 als Server im Wlan
Für eine komfortable Fernsteuerung mit Openstagecontrol lässt sich eine Bedienoberfläche für die Sensoren und Aktoren auf dem Smartphone oder Tablet erstellen.
Ein anderes freies und kostenloses Tool zur programmierung einer App ist http://appinventor.mit.edu/
Hier ein Praxisbeispiel, wo eine LED-Matrix über eine mit diesem Tool programmierte App gesteuert wird.
Und zum Spaß:
Esp32 mit Bildschirm und Tastatur als Terminal

ESP32 mit grafischem User Interface ausrüsten

Die hohe Rechenleistung und der im Vergleich mit anderen Prozessoren hohe Ramspeicher ermöglicht aufwändige grafische Schnittstellen, vergleichbar mit den Interfaces von Smartphones. Nexion bietet Touchscreens mit integriertem Prozessor, und asynchroner Kommunikation über serielle Schnittstelle. Das ist zwar sperrig und teuer, verhindert aber ruckelnde Menüs.
Falls alles auf dem Esp32 laufen soll:LittlevGL ist ein open source GUI Editor-Hier gibt es Demos zum ausprobieren. Mehr Infos dazu bietet dieser Elektor Artikel.
Eine kompakte Bauweise haben diese Esp32 Boards mit integrierten Displays.
Composite Video ist eine kuriose Variante, benötigt aber nur 2 Drähte und verwendet I²S und DAC, was eigentlich für die Audioausgabe konzipiert ist. Dafür wird ein regulärer Fernseher mit SCART oder Analog-in benötigt.

Audiodioausgabe

Audiowiedergabe mittels DAC, allerdings nur in 8 Bit. Wer guten Sound haben möchte kann mit zusätzlicher HardwareI²S mit 16 Bit verwenden. So oder so ist neben dem Lautsprecher auch ein (kleiner) Verstärker notwendig.

Videoverarbeitung via I²S

Dieses Video zeigt, was möglich ist und welche Framerate man erwarten kann.

Kleinere Arduino IDE kompatible Boards

Arduino Nano und Arduino Pro, Pro Mini und Micro, zeigt Anwendugsszenarien wie Verwendung als USB Device und geht auf Unterschiede in Spannung, Größe, CPU und anderen Aspekten ein. Das Video ist als Inspiration zu verstehen, da es bereits 5 Jahre alt ist und in der Zwischenzeit neuere Boards verfügbar sind.
Auch Arduino-kompatible Boards mit Batterieladefunktion sind verfügbar. Neben ESP32-2, der USB-host Funktionalität hat aber keine 2 Prozessoren gibt es viele weitere Microcontroller und Entwicklungslösungen, sogar programmierbare Smartwatches mit ESP32 chip. Es lohnt sich also, vor Beginn eines eigenen Projektes gründlich zu recherchieren. Ständig gibt es Neuerungen.

Das Reference Manual zum Esp32 von Espressif ist 732 Seiten stark und größtenteils astreines Fachchinesisch, aber besser als nichts.

Eine gute Quelle für esp32 Tutorials ist die WebseiteRandom Nerd Tutorials.

Der Youtuber Andreas Spiess hat eine Playlist mit 60 Videos zu Esp32 in der er viele Themen behandelt. Von Tests der verschiedenen verfügbaren Boards bis zu Tutorials zu den Features.

Weitere Komponenten

Viele LEDs ansteuern mit dem TLC5940 Chip und common Anode RGB LEDs.

workshopsundtutorials/arduino.txt · Zuletzt geändert: 18.07.2023 09:25 von felix