Teamwork Raspberry Pi und Micro-Controller

Der Raspberry Pi ist spätestens seit der Version 4B als Desktop Computer mit dem Betriebssystem Linux zu bezeichnen. Aber seine seit 2012 rasant gestiegene Verbreitung (2020 über 31 Millionen Mal verkauft) hat dieser Micro-Computer seinen frei zugänglichen GPIO-Pins zu verdanken, die bei Programmierern und Makern aller Altersklassen beliebt sind.

Der Raspi ist dabei kein Konkurrent für Arduino, ESP und Co., sondern eine sinnvolle Ergänzung und umgekehrt, denn man kann die Arduino IDE (=Integrated Development Environment) auf dem Raspi installieren und der Zusammenarbeit steht nicht mehr viel im Wege. Das möchte ich Ihnen an zwei Beispielen zeigen, doch zuvor wollen wir die Arduino IDE auf dem Raspberry Pi installieren.

Um ein neues Programm wie die Arduino IDE zu installieren, benutzt man normalerweise (nach dem obligatorischen „sudo apt-get update“) den Terminal-Befehl „sudo apt-get install arduino". Aber auf diese Weise erhalten wir jedoch eine alte Version der IDE, die nur mit den Arduinos funktioniert.

Wer seinen Micro-Controller in der nachfolgenden Tabelle findet, kann diesen Weg beschreiten, es wird aber nicht empfohlen.


Wer jedoch den ESP8266 oder den ESP32 mit dem Raspi programmieren und verbinden möchte, dem sei der folgende Weg zur Installation empfohlen.

Denn viele Hersteller von Micro-Controllern wie Espressif haben die Arduino IDE für ihre Zwecke entdeckt und für ihre Geräte sinnvolle Ergänzungen entwickelt. Für deren Installation benötigen wir die aktuelle Version der IDE von der Homepage arduino.cc und vor allem den integrierten Boardverwalter.

Deshalb laden wir auf der Arduino Homepage die Version für Linux ARM 32 bits herunter. (Die neuesten Raspberry Pi – Modell 3B+ und 4B haben zwar 64-bit-Prozessoren, das Betriebssystem Raspbian nutzt weiterhin 32 bits aus Gründen der Abwärtskompatibilität). Nicht über den Dateinamen erschrecken: arduino-1.8.12-linuxarm.tar.xz ist eine komprimierte Datei.

Mit dem kostenlosen Programm 7-zip kann man unter Windows die 93.461kB große xz-Datei entpacken und erhält die Datei arduino-1.8.12-linuxarm.tar mit 458.770 kB. Die Endung tar wird von dem gleichnamigen Packprogramm unter Linux verwendet. Tar komprimiert nicht, sondern fasst die 4.824 Dateien in 846 Ordner zusammen. Dieses zweite Entpacken (oder gleich alles) macht man deshalb lieber auf dem Raspberry Pi mit dem Xarchiver in einem neu angelegten Verzeichnis arduino.



Zu guter Letzt wechselt man im Terminal in das Verzeichnis mit dem Programm install.sh und führt dieses bash-Programm mit Administratorrechten (sudo ./install.sh) aus. Nun haben wir die Arduino IDE mit Boardverwalter und können z.B. die Links zu den Java-Skript-Dateien für den ESP32 und ESP 8266 eintragen, um die ESP-Familien mithilfe des Boardverwalters zu integrieren.

Dazu werden die folgenden Zeilen unter Datei\Einstellungen – Zusätzliche Boardverwalter URLs eingetragen:

https://dl.espressif.com/dl/package_esp32_index.json
https://arduino.esp8266.com/stable/package_esp8266com_index.json



Diesen und einen alternativen Weg der Installation finden Sie auch auf der Espressif-Seite bei github:

https://github.com/espressif/arduino-esp32

Auf geht’s!  Programmieren Sie Ihren Arduino oder ESP32 auf dem Raspberry Pi und lassen sich Daten im Seriellen Monitor oder Seriellen Plotter anzeigen. Dafür schließen wir nun den Micro Controller an die USB-Schnittstelle des Raspberry Pi an, genauso wie am Windows PC.

Und was machen diejenigen, die keine USB-Schnittstelle am Micro Controller haben? 

Die Micro-Controller ohne USB-Schnittstelle können am Raspberry Pi preiswerter programmiert werden als am Windows-PC, bei dem ein FTDI-Adapter oder ähnlich erforderlich ist. Uns genügen vier Jumper-Kabel, wie ich am folgenden Beispiel eines ESP8266-01 zeigen möchte. Wir verbinden den ESP8266 mit dem Raspi, um erstens die Betriebsspannung abzugreifen und zweitens die UART-Schnittstelle (Tx/Rx über Kreuz verbinden) für die Kommunikation zu nutzen.

Auch die Programmierung ist so möglich. Raspi Pin1 (3,3V) an VCC sowie über Pull-up-Widerstände 10kOhm an CHPD und RST, Raspi Pin6 (GND) an GND und GP0 (nur für die Programmierung) sowie für Reset kurzzeitig an RST; Raspi Pin8 (TXD0) an RXD und Raspi Pin10 (RXD0) an TXD.

Achtung: Bei unterschiedlichen Spannungspegeln unbedingt Pegelwandler oder Spannungsteiler verwenden! Mein ESP8266 hat nur 3,3V wie der Raspi, deshalb hier nicht nötig.

Wenn Sie nicht so viele Fehlversuche machen wollen wie ich, beachten Sie bitte: 

1. Unter Einstellungen/ Raspberry Pi-Konfiguration, 3. Registerkarte „Schnittstellen“ Serial Port Aktiviert, Serial Console Deaktiviert (ggf. Neustart erforderlich)
2. In der Arduino IDE unter Werkzeuge / Board den richtigen Micro Controller auswählen
3. Richtigen Port auswählen: /dev/ttyS0 für die serielle Schnittstelle
(/dev/ttyUSB0 für die USB-Schnittstelle)




Nach dem Laden des Programms wird das Jumperkabel zwischen Masse und GP0 herausgezogen. Nach einem Reset (RST kurz mit Masse verbinden) läuft das Programm wie gewünscht.


Im zweiten Beispiel wollen wir eine Fähigkeit des Arduino benutzen, auf die Raspberry Pi-Nutzer neidisch sind: den eingebauten Analog-Digital-Wandler. Der Beschleunigungssensor GY-61 wird an drei analoge Eingänge des Arduino sowie 3,3V und GND angeschlossen. Über die UART-Verbindung zwischen Raspi und Arduino erfolgt dann die Datenausgabe am Raspi. Hier benötigen wir einen Logiklevel-Wandler (und wie immer werden TX und RX über Kreuz verbunden).

 

uint16_t x_axis = 0;
uint16_t y_axis = 0;
uint16_t z_axis = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  x_axis = analogRead(A0);
  y_axis = analogRead(A1);
  z_axis = analogRead(A2);
  Serial.print("X-axis: ");
  Serial.print(x_axis);
  Serial.print("\t");
  Serial.print("Y-axis: ");
  Serial.print(y_axis);
  Serial.print("\t");
  Serial.print("Z-axis: ");
  Serial.println(z_axis);
  delay(500);
}

Der Sketch wird im E-Book zum GY-61, einem 3-Achsen-Beschleunigungsmesser zu finden sein. Die Daten für die x-, y- und z-Achse werden analog vom Sensor ausgegeben. Wenn die Verbindungen zu den Arduino-Ports A0, A1 und A2 hergestellt sind, kann man am Seriellen Monitor die jeweiligen Werte ablesen. Am Raspberry Pi können wir die drei Werte sowohl im Seriellen Monitor der Arduino IDE sehen als auch in einem Terminal-Emulator wie z.B. dem Programm Minicom.

Eingabe im Terminal:  minicom -D /dev/ttyS0 -b 9600



Als Nächstes werde ich versuchen, die Verbindung zwischen Raspberry Pi und Arduino mit einer Funkverbindung mit 2,4 GHz herzustellen.


Weitere Versuchsaufbauten mit Micro-Controllern, Sensoren und Zubehör aus unserem Sortiment finden Sie in unserem Blog oder den E-Books.

Viel Spaß damit wünscht Ihnen

das AZ-Delivery Team
 

Auf vielfachen Wunsch hier der Download des Blog-Beitrags als pdf-Dokument.

11 Kommentare

Maciek

Maciek

Hallo Herr Förster,
vielen Dank für die detaillierte Erklärung, ich versuche es mal auszuprobieren wenn es mit dem Booten nicht funktionieren sollte. Viele Grüße.

Dirk

Dirk

“Wäre es denn möglich z.B. den esp32 oder esp8266 über USB-Kabel mit dem Raspi zu verbinden, und dann remote (über VNC) zu programmieren? … In der Entwicklungsphase möchte man mehrmals den sketch auf dem Mikrokontroller ändern aber nicht jedes Mal mit nem Laptop in den Schuppen laufen oder den Mikrokontroller nach Hause mitnehmen.”

Hallo Maciek,
um über WLAN vom PC den ESP zu updaten gibt es doch OTA !!!
OTA – Over the Air – ESP Programmieren über WLAN
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/ota-over-the-air-esp-programmieren-uber-wlan-entwurf

Michael Förster

Michael Förster

Guten Morgen Herr Maciek,
1. Zur Stromversorgung: es ist richtig, die Pi nicht zu belasten und eine externe Stromquelle zu nutzen. Eine Einspeisung über den 5V Pin ist möglich, allerding konkurriert er dann mit der USB 5V Versorgung, bei den Standard-Boards von AZ-Delivery ist da eine Scotty Barrier Diode eingebaut, die die Rückwirkung verhindern soll (entnommen aus http://esp32-server.de/schaltplan/), aber neues Board, neues Glück, ich als geborener Feigling trenne bei der USB A Buchse die 5V Versogung ab, wenn ich den ESP32 mit der Pi zur seriellen Kommunikation vebinde, die übrigens gut funktioniert.
2. Bootvorgang des ESP32: auf den bezog sich meine Anmerkung, dass ich Probleme beim USB-Boot mit der USB Verbindung hatte. Der Ablauf des Bootvorgangs ist beschrieben in “https://github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection”. Bei den meisten meiner USB Anschlüsse muss ich den Boot Knopf des ESP Boards drücken, um den Bootvorgang auszulösen, ich fürchte, dass es bei der Pi ebenso ist. Ich hätte allerdings einen Vorschlag, der Ihnen einen vernünftigen Umgang mit Arduino erlaubt und den Marsch in die Garage erspart, allerdings so noch nicht erprobt, bisher habe ich immer mit den Knöpkes gearbeitet und dann direkt über Arduino geladen:
a) unter Arduino können Sie die Binär-Datei in den “Sketch Ordner” exportieren.
b) falls sie unter Linux arbeiten, können Sie unter NFS auf die Datei zugreifen, unter Windows (das ich nicht nutze) müssen sie mit Samba arbeiten oder ftp download.
c) besorgen Sie sich von Espressif das esptool (https://github.com/espressif/esptool) und installieren Sie es auf der Pi, die Beschreibung und die Nutzung steht in dem link.
d) falls das Board nicht in den Boot-Modus kommt, können Sie einen GPIO Pin der Pi mit dem EN Pin (ist mit dem RST Knopf verbunden und heist so bei den meisten Boards, es ist offiziell der CHIP_PU) des ESP32 verbinden, einen anderen mit GPIO 0 des ESP32 (ist mit dem BOOT Knopf verbunden) und, zur Sicherheit, einen letzten mit GPIO 2 des ESP32. Die I/O Pins der Pi und des ESP32 leben in der 3.3V Welt, es ist also kein Umsetzer nötig. Die ESP Pis sollten allerding nicht mit irgendwelchen anderen Arbeiten belegt sein (wie z.B. GPIO 2 bei ArduiTouch), dann müssten Sie mit Relays arbeiten.
Mit Gordon’s wunderbaren GPIO Tool (http://wiringpi.com/, gibt es jetzt auch für RPi 4), ja, es hat mir oft aus der Patsche geholfen, dann folgende Sequenz abarbeiten:
- die serielle Schnittstelle verbinden, am besten die USB Ports benutzen, und anzeigen lassen (z.B. über minicom)
- ESP En auf LOW setzen
- ESP GPIO 0 auf LOW setzten
- ESP GPIO 2 auf LOW setzten
- mindestens 5 sec warten
- ESP EN auf HIGH setzten
- etwas warten
- ESP GPIO 0 auf HIGH setzen, es sollte dann über die serielle Schnittstelle eine Meldung erscheinen, dass der ESP sich im Download Modus befindet
- das serielle Komminikationsprogramm beenden, die Schnittstelle braucht jetzt das esptool, und mit dem esptool den Download durchführen.
- wenn der ESP32 das neue Programm gebootet hat, können sie den ESP GPIO 2 freigeben, entweder das Relay abschalten, oder die Pi und der ESP spielen miteinander über den Pin… Is up to you.
Ich wünsche guten Erfolg

Maciek

Maciek

Hallo Herr Förster, hier Herr Maciek ;), oder einfach Maciek. Vielen Dank für die Erklärungen, ganz schön kompliziert. Mir scheint auch die Arduino IDE furchtbar langsam, aber zur Not kann man damit leben. Den esp würde ich über eine separate Stromversorgung versorgen, so dass der Raspi das nicht tragen muss. Wichtig wäre für mich dass man die Programmierung des Kontrollers über VNC machen kann. Muss ich ausprobieren ob es geht. Schönen Gruß.

Michael Förster

Michael Förster

Hallo Frau/Herr Maciec, die Arduino-Oberfläche ist in Java programmiert und remote grottenlangsam (Laptop 4Kerner AMD, 8GB Ram, Hauptrechner 6Kerner AMD 16GB Ram, SSH, Linux, auch mit GB-Lan nicht arbeitsfähig), des weiteren ist es fraglich, ob RPi 2 oder 3 die Leistung über USB aufbringt, den ESP32 in den Programmiermodus zu bringen, da habe ich so meine Erfahrungen gesammelt, sei es Laptop oder Homecomputer, die USB3 von der RPi4 sollte es schaffen, wenn da nicht Arduino wäre… Die Alternative, das ESP-Tool von Espressiv, gibt es nur für X86. Zu dem gibt es noch folgendes Problem, der ESP32 hat 2 I²C, die Libraries unter Arduino kennen nur Wire, auch von Renommierten. Wenn Sie beide benutzen wollen, z.B. Heltec Board mit Display oder, weil der ESP32 sie so schön parallel und Realtime fähig verarbeiten kann (versuchen Sie das ‘mal mit der Pi, da macht der erste Bus schon Probleme, bitte nachlesen), da heißt es Handarbeit und sichern, der nächste Update kommt bestimmt. Deshalb nutze ich nur simple Libs für meine zahlreichen I²C Sensoren.
Die Programmierung des ESP32 über RPi’s USB wäre eventuell über folgenden Umweg möglich, da auch Arduino zur Übertragung des Codes ein Pythontool von Espressiv nutzt, allerdings habe ich damit keine Erfahrung, ich nutze es nur indirekt über die Esp-Idf oder Arduino, stand alone habe ich es noch nicht probiert.
Genug geredet, ich wünsche einen schönen Tag

Michael Förster

Michael Förster

Hallo,
das Entpacken geht auch einfacher auf der Pi mit dem Unix-Befehl tar: tar Jxvf [dir name]/arduino-1.8.12-linuxarm.tar.xz. Bitte vorher mit ‘cd’ in das directory wechseln, in dem später das Arduino Programm liegen soll!
FYI: tar ist das Programm zum Packen und entpacken von Dateien, ’’ startet die Liste der Optionen, die wie folgt sind: ‘J’ ruft den Entpacker/Packer für ‘xz’ komprimerte Dateien auf, ‘x’ bedeutet entpacken (ein ‘c’ steht für packen), ‘v’ verbose, es wird angezeigt, was getan wird, ‘f’ der entsprechende file zum (Ent-)Packen, der file name MUSS UNBEDINGT nach dem ‘f’ folgen. Dann entpackt tar die Dateien in das directory, in dem es aufgerufen wird, alternativ packt es alle Dateien und directories, die es hier findet. Für weitere Informationen lest bitte die man page für tar: ‘man tar’
Viel Vergnügen mit der Pi, die ich seit langem nutze, auch in Verbindung mit AtMega und jetzt seit längerem mit ESP32, ein tolles Ding mit Multitasking, das ich bei den AtMegas immer vermisst habe…

RalfK

RalfK

Danke für diesen interessanten Beitrag. Werde ich doch gleich einmal ausprobieren.

dirk

dirk

Ich war ganz enttäuscht, die auf dem Mac entwickelten Programme nicht auf dem Pi verwenden zu können. Mir war nicht klar, dass es sich bei der vorinstallierten IDE um eine alte Version handelt.
Jetzt läuft alles. Vielen Dank!

Maciek

Maciek

Hallo,

vielen Dank für den interessanten Beitrag. Wäre es denn möglich z.B. den esp32 oder esp8266 über USB-Kabel mit dem Raspi zu verbinden, und dann remote (über VNC) zu programmieren? Da denke ich an Steuerung von Geräten z.B. im Schuppen, wo ich noch wlan habe. In der Entwicklungsphase möchte man mehrmals den sketch auf dem Mikrokontroller ändern aber nicht jedes Mal mit nem Laptop in den Schuppen laufen oder den Mikrokontroller nach Hause mitnehmen. Solche Möglichkeit das remote über VNC auf den Raspi und dann in der Arduino IDE zu programmieren wäre sehr schön. Vielleicht im nächsten Blog kurz beschreiben?

Tobias

Tobias

Hallo,
Vielen Dank Bernd Albrecht für die Klasse Anleitung und die Diskussion und Hilfe die letzte Woche.
Weiter so 👍🏿
Gruß
Tobias

ThorstenS

ThorstenS

Hey Leute,

vielen Dank für eure tollen Blogbeiträge und Newsletter.
Da bekomme ich jedesmal wieder Lust am Basteln.
Ihr macht das Klasse!
/thorsten

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert