Buchempfehlung:
Roboter-Autos mit dem Raspberry Pi

Roboter Autos mit dem Raspberry Pi - 2019

Nach dem jetzt das live Video Bild der Kamera über das Netzwerk übertragen wird geht es in diesem Artikel darum den I2C Bus des ESP32-CAM zu aktivieren. Der I2C Bus wird benötigt um im Roboter Auto z. B. ein I2C OLED Display oder einen PCA9685 Servo Kontroller anschließen zu können. Nur mit einem PCA9685 Servo Kontroller und einer L298N H-Brücke ist es möglich die Motoren des Roboter Autos auch unterschiedlich schnell drehen zu lassen. Nur so kann eine Steuerung der Motoren umgesetzt werden die es ermöglicht das Roboter z. B. durch die Wohnung fahren zu lassen.

Viele Pins sind nicht mehr frei am ESP32-CAM. Aber die gute Nachricht ist, dass es möglich ist den I2C Bus auf die beiden RX und TX Pins zu legen die nur für das Programmieren des ESP32-CAM benötigt werden. Wenn der ESP32-CAM nicht programmiert wird können die beiden Pins für den I2C Bus genutzt werden. So ist es möglich den I2C Bus zu nutzen und eine Vielzahl an verschiedenen Sensoren, Treibern und Kontrollern über den I2C Bus anzusteuern.

Die noch freien Pins des ESP32-CAM sind in der folgenden Tabelle aufgeführt. In der Tabelle habe ich kenntlich gemacht welche Pins ich schon erfolgreich genutzt habe.

Pin am ESP32-CAM getestet
GPIO1 (TX) ja
GPIO3 (RX) ja
GPIO16 nein

Das folgende Bild zeigt auf welchen Pins die Anschlüsse für den I2C Bus am ESP32-CAM zu finden sind wenn der GPIO1 und GPIO3 verwendet werden.

ESP32-CAM I2C connection

ESP32-CAM I2C connection

OLED Display via I2C Bus ansteuern

Für die Nutzung des I2C Bus werden wir jetzt den Pin 1 und den Pin 3 nutzen. Das bedeutet für den Fall das der ESP32-CAM wieder programmiert werden soll, dass die Kabel wieder so gesteckt werden müssen das der USB-Servial Adapter wieder über RX / TX angeschlossen ist und nicht das SSD1306 OLED Display.

Als erstes Gerät werden wir ein SSD1306 OLED Display anschließen und können damit auch gleich testen ob der I2C Bus überhaupt funktioniert. Damit das SSD1306 OLED Display angesteuert werden kann muss noch die entsprechende Bibliothek für das OLED Display installiert werden. Sucht bitte nach der Bibliothek mit dem folgenden Stichwort “ESP32 OLED” und installiert diese auf eurem PC in der Arduino Entwicklungsumgebung. Nach der Installation dieser Bibliothek kann das OLED Display SSD1306 verwendet werden.

ESP8266 NodeMCU OLED Display SSD1306 ESP8266_NodeMCU_OLED_Display_SSD1306 software

ESP32-CAM OLED Display SSD1306

Das Display wird die folgt nach dem das Programm mit der Testausgabe für das OLED Display auf das ESP32-CAM Modul geschrieben wurde angeschlossen.

Pins ESP32-CAM SSD1306 OLED Display
3,3V 3,3V
GND GND
GPIO1 SDA
GPIO3 SCL

Da es in der SSD1306Wire Bibliothek möglich ist die Pins anzugeben die als SDC und SDA des I2C Bus genutzt werden sollen ist es also möglich ein SSD1306 OLED Display anzuschließen. Ich habe mir dazu zwei Variablen wie folgt definiert.

#define I2C_SDA 1
#define I2C_SCL 3

Der Aufruf der SSD1306Wire Bibliothek sieht dann im Programm wie folgt aus.

#include "SSD1306Wire.h"
// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, I2C_SDA, I2C_SCL);

Jetzt ist soweit alles vorbereitet das nach dem Programmieren des ESP32-CAM auch das OLED Display etwas anzeigt. Die Ausgabe zeigt die IP Adresse des ESP32-CAM.

Nachfolgend nun das Beispielprogramm das ich verwendet habe für einen ersten Test ob auch wirklich das OLED Display über den I2C Bus angesteuert werden kann.

Download: CameraWebServer

Auf dem folgenden Bild ist das fertig verkabelte Roboter Auto zu sehen mit angeschlossenen OLED Display.

ESP32-CAM OLED display

ESP32-CAM OLED display

Zusammenfassung

Wenn alles geklappt hat dann sollte ab jetzt das OLED Display die aktuelle IP Adresse des ESP32-CAM Moduls anzeigen. Wenn das soweit geklappt hat dann haben wir jetzt die Sicherheit das der I2C Bus funktioniert und das als nächstes der Servo Kontroller als Gerät angeschlossen werden kann. Aber ab jetzt können natürlich auch beliebige andere Geräte an den I2C Bus angeschlossen werden. Wie das genau mit der Wire.h Bibliothek funktioniert wird im nächsten Beitrag am Beispiel des PCA9685 Servo Kontroller erklärt.

(Visited 30 times, 1 visits today)