ESP32 als i2c IO-Expander für Raspberry Pi?
Hi, ich brauche einen i2c IO-Expander für meinen Raspberry. Möchte analogeingang lesen, PWM generieren zum Lampen dimmen, Digitale Eingänge lesen und digitale Ausgänge schreiben.
Gibt ja viele Expander, jedoch können die meisten mehr oder weniger nur eine funktion übernehmen. Sprich ich hätte ca. 3 bis 4 Slave adressen.
Nun zu meiner Frage: Wäre das ganze auch mit einem ESP32 ersetzbar? also dass mein PI einen i2c Slave, also den ESP anspricht und dieser dann alles macht? Der ESP kann ja PWM, analog&Digital abdecken.
Würde das so gehen oder hab ich da was missachtet?
Danke im Vorraus
3 Antworten
Warum nimmst du da nicht einfach einen Arduino Nano oder dergleichen der kann in dem Fall genau das selbe und zudem auch als I2C Slave arbeiten.
Es gibt glaub ich sogar Arduino kompatible HATs für den Pi wo dann eben ein Atmega oder STM32 drauf sitzt und die kannst du beide entsprechend Programmieren.
Das ist ein wenig schwierig, weil der ESP32 in der Software keine Routinen für die Funktion als I2C Slave besitzt. Es gibt einige die das mit Polling und noch ein paar Tricks zusätzlich machen, aber das ist ziemlich ineffizient es ohne Interruptsteuerung zu machen.
Du solltest mit dem ESP32 über SPI kommunizieren, ist besser und auch schneller.
Ja aber du musst ja im ESP auch ein Programm am laufen haben das z.B. die Messungen des AD-Wandlers steuert, die Messergebnisse in Register schreibt, die du dann abholen kannst, usw. die "Expander Software" halt.
Wenn du aber keine Interruptsteuerung für den I2C hast, dann musst du die Schnittstelle ständig abfragen, das ist nicht grad effizient.
Wenn du nicht viele Daten übertragen willst und der Port Expander keine zeitkritischen Signale bedienen muss, dann kannst du auch über UART kommunizieren.
Das hätte auch den Vorteil dass der Port Expander weiter weg vom Master betrieben werden kann, wenn du dir eine RS232 oder RS485 Schnittstelle draus machst.
Danke für deine Antwort. SPI wird bei meinem aktuellen Setup schwierig, weshalb ich möglichst I2C nehmen möchte. Wäre ein Raspberry Pico besser geeignet? oder was wäre sonst eine Alternative wenn ich auf i2c bleiben möchte?
Ist genau das gleiche Problem.
Du kannst das aber mit fast jedem Mikrocontroller machen wenn du in C programmierst.
Über den SPI kannst du ja mit unterschiedlichen Chip Select Signalen mehrere Slaves ansprechen.
Hallo,
ja klar kann der esp / arduino / etc auch als i²C-Slave fungieren..der bekommt dann vom raspi (master) die befehle, und darauf kann der Slave reagieren , Funktion abarbeiten, und antworten ..
Und bezüglich ineffizienz: ist die zykluszeit des ESP's davon betroffen? oder was meinst du damit? ich möchte möglichst keine Daten im ESP auswerten sondern wirklich nur als Expander verwenden