Hallo, ich plane ein Projekt mit einem ESP32CAM und einer Echzeituhr DS3231. Da am ESP32CAM der I2C Bus durch die Programmierschnittstelle belegt ist möchte ich den softwarebasierten I2C Bus SoftWire verwenden und dazu die RTClib umschreiben. Leider genügen hierfür meine C Kenntnisse nicht. Hat das schon jemand umgesetzt oder kann mir dabei helfen?
Danke...
Warum SoftWire?
Warum kannst du den DS3231 nicht am bestehenden Bus hängen?
Warum kannst du nicht den zweiten HW I2C am ESP32 verwenden?
Das nur zum Querlesen:
ESP32: Use both I²C interfaces
Ähm..
Woher du das weißt?
Bei ESP32 Cam ist der Bus durch die Cam belegt, man musste schon am ESP Rum löten
Basierend auf dem Link in #2:
RTC3231 an zweitem I²C-Port
#include "RTClib.h"
RTC_DS3231 rtc;
TwoWire I2Ctwo = TwoWire(1); // zweiter I²C-Port
#define SDA2 14
#define SCL2 15
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("\nStart");
I2Ctwo.begin(SDA2, SCL2, 400000); // Pins für zweiten I²C-Port
if ( !rtc.begin(&I2Ctwo)) {
Serial.println("Couldn't find RTC");
Serial.flush();
while (1) delay(10);
}
}
void loop() {
zeit();
Serial.println();
delay(5000);
}
void zeit() {
DateTime now = rtc.now();
char buf[] = "DD.MM.YYYY hh:mm:ss";
Serial.println(now.toString(buf));
delay(5000);
}
Habe ich mich auch gefragt, möglicherweise müßte es "die Pins sind anderweitig belegt" heißen. Zumindest möchte ich das dieser Pinbelegung entnehmen:
Quelle: Leider funktioniert der Link nicht, aber ich mag die Pinouts
ihr habt recht, da hab ich mich auf der falschen Seite informiert. Ist schon ein paar Wochen her, finde die Seite leider nicht mehr. Dann kann ich mir das umschreiben sparen. Allerdings hab ich ein neues Problem entdeckt, ich möchte auch die SD Karte nutzen. Leider belegt diese 6 Ports unter anderem auch den 2. I2C und auch die Kamerabeleuchtung. Damit werde ich die ESP32CAM Hardware nicht nehmen können. Kennt ihr eine alternative, ich brauche WLAN, Cameraport, I2C, SD reader und 4 IO Ports.
Sorry, aber das ist Unsinn!
Der ESP32 hat eine GPIO Matrix.
Damit kann man I2C auf fast jeden beliebigen Pin legen.
Siehe setPins() in: I2C - - — Arduino ESP32 latest documentation
Das gilt übrigens auch für SPI, soweit ich weiß.
Das Stimmt, nur wie mache ich eine zweite Instanz damit Cam auch funktioniert?
Für einen i2C Bus wird auch nur eine Instance benötigt.
Und wenn doch nötig, dann genau so wie die erste.
Du könntest mal bei einem ESP32-S3 nachzählen, ob noch genügend Pins frei sind.
Wobei die einzelnen GPIO bei I2C uninteressant sind. Da tut es dann ein I2C-Portexpander auch.
Das sollten wir nochmal deutlich machen
- SD reader kenne ich nur mit SPI-Schnittstelle: MISO, MOSI, SCK, CS, dank Pin-Matrix auf freie Pins zu legen.
- I²C ist ein Bus mit Identifikation über Adressen: SDA, SCL, dank Pin-Matrix auf freie Pins zu legen.
- 4 IO Ports können mittels IO-Portexpandern über I²C verwendet werden, benötigen keine weiteren Pins am ESP32-S3.
Die ESP32-S3 gehören zu den etwas neueren µCs der ESP32-Familie, weshalb man mit Schwierigkeiten rechnen muß. Etwas Forschergeist ist daher hilfreich.
Ok, so ist es für alle verständlicher.
Allerdings habe ich k.A. ob die Cam auch am ESP32 S3 problemlos läuft.
Davon abgesehen habe ich vor längerer Zeit an der ESP32-CAM den I2C-Bus getestet und das hat auch funktioniert. Muss bei mir in der Wühlkiste mal schauen, ob ich da noch was finde. War seinerzeit nur ein Test ohne weitere Nutzung.
Ich auch nicht, aber da es diese Kombination - siehe Link in #10 - zu kaufen gibt, steigt die Wahrscheinlichkeit, daß Core und Bibliotheken diese unterstützen.
Aber sicher wissen tut man es erst, wenn man es gemacht hat
Ups...danke.
Den Link habe ich übersehen. Da werde ich wohl noch mal schauen, ob ich nicht doch da zugreife.
Mit den einfachen Cams bin ich nicht so zufrieden.
Leider ist nicht zu erkennen ob ein USB Chip drauf ist und welcher.
Das war der erstbeste Link, den ich mit Pinout gefunden habe.
Wenn Du ein besseres Angebot findest, könnte es auch dem TO helfen, denselben zu haben. Es gibt ja doch immer kleine Unterschiede.
Ja, bei Ali ist auch die Rückseite inkl. USB Chip zu erkennen. Vermutlich ein CP21XX oder so.
Und noch zum ESP32-S3, der läuft bei mir im Dauertestbetrieb mit 433MHz Funk, Webseite, UDP und TCP, sowie TFT Display und eigenem Sensor BME280.
Ich bin mit dem sehr zufrieden.
Diese Pinkennzeichnung finde ich hilfreich:
Man sieht sofort, was noch frei ist.
So sieht die Belegung der Ports durch den SD Reader aus. Selbst die verbleibenden GPIO0 und 16 sind nur bedingt nutzbar.
Man kann den SD Reader auch mit nur einer Datenleitung nutzen, der Zugriff wird entsprechend langsamer. Ich werde versuchen die DATA2, 3 mit dem I2C Bus zu belegen. Wenn kein Takt CLK anliegt sollte der Datenverkehr auf DATA2,3 die SD nicht stören. Vorausgesetzt DATA2,3 sind hochohmig. Danke noch für eure Infos.