Forum: Mikrocontroller und Digitale Elektronik ESP8266 als I2C Slave mit Arduino IDE


von Georg G. (df2au)


Lesenswert?

Die Infos zu diesem Thema sind für mich widersprüchlich.

Die aktuelle Doku (2.7) zur WIRE Lib sagt, dass Master Mode 
funktioniert, Slave wird nicht erwähnt. Andererseits gibt es keine 
Fehlermeldung, wenn man für Slave Mode mit wire.begin(sda-pin, scl-pin, 
slave-adresse) initialisiert.

Es gibt aber Fundstellen im Netz, die behaupten, dass ab Version 2.5 
auch der Slave Mode funktioniert.

Andere Seiten sagen, dass man für den Slave Mode Patches einspielen 
muss.

Ich habe n+1 Versuche hinter mir, alle erfolglos. Der Slave meldet sich 
nicht, wenn er angesprochen wird.

Ein Arduino als Slave wird gefunden und tut das Verlangte. Also kann der 
Master so verkehrt nicht sein.

Wer kann Licht in das Dunkel bringen? Hat jemand ein funktionierendes 
Programm?

von Stefan F. (Gast)


Lesenswert?

ESP8266EX has one I2C, which is realized via software programming, used 
to connect with other microcontrollers and other peripheral equipments 
such as sensors. The pin definition of I2C is as below.

Both I2C Master and I2C Slave are supported. I2C interface functionality 
can be realized via software programming, and the clock frequency is 100 
kHz at maximum.

https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf

Über die Konsequenzen muss man erstmal nachdenken. Zum Beispiel muss die 
Firmware alle paar Millisekunden signifikant Rechenzeit bekommen. In 
dieser Zeit kann der ESP auf Daten und Takt nicht reagieren.

Viel Glück mit diesem Murks.

By the way: Die 100 kHz sind quatsch. Ich habe mit Bit-Banging (in C++) 
mühelos 500 kHz erreicht. Aber nur im Master Modus.

von Georg G. (df2au)


Lesenswert?

Fazit nach einer Woche experimentieren und Code lesen:
I2C Slave funktioniert mit der letzten Core Version von Github ohne 
Patches. Das mitgelieferte Beispiel ist allerdings suboptimal. Es fehlt 
eine Zeile im Setup des Masters:
wire.setClock(xxxL);

Die maximale Frequenz bei meinem Aufbau (Nodemcu <-> ESP12) für 
zuverlässigen Betrieb war 35kHz. Das Signal des Masters sieht auch bei 
100kHz noch sehr sauber aus. Das Problem ist nur der Sklave, der 
darunter leidet, dass ihm das Betriebssystem laufend Zeit klaut. 
Inwieweit das noch optimiert werden kann, habe ich nicht untersucht. Ich 
werde einen kleinen AVR als Übersetzer zwischen den ESP und den I2C 
Master setzen. Der nächste Durchgang - so einer kommt - wäre mit dem 
ESP32. Der soll das besser können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.