ESP8266 und ATTINY I2C

paddy

Active member
Hallo,

mal was anderes, meine Wetterstation bereitet mir Probleme. https://www.ardumower.de/index.php/...kte/1836-diy-wetterstation-aus-dem-3d-drucker
Die arbeitet mit einem Wemos D1 mini pro (ESP8266). Dieser schläft die meiste Zeit und sammelt Daten via I2C von verschiedenen Sensoren, etwa dem BME280 sowie drei ATTINYs. ATTINY85 zum Überwachen von Wind und Regen (Reed Sensoren), ein ATTINY85 zur Spannungsüberwachung der Batterie und ein ATTINY24 zur Ermittlung der Windrichtung (Reed).

Das ganze klappt mehrere Minuten, dann kommt auf dem I2C Bus nur noch Müll. Keiner der Sensoren liefert mehr vernünftige Daten.

Ich habe den Code und die KiCad der Platine mal auf Git hochgeladen https://github.com/PaddyCube/WirelessWeather
Hat jemand eine Idee, was hier los ist oder wie ich die Fehleranalyse am besten betreibe? Es tummeln sich ja viele Experten zu diesem Thema hier. Es wäre sehr nett von euch, wenn ihr mir hier unter die Arme greifen könntet.

Grüße Patrick
 
Da würde ich mit einem Logic Analyzer mal den Bus betrachten. Ggf. stretched ein Chip das Clocksignal oder Clock stretching ist ausgeschaltet. Da müsstest du dir mal die Implementierung im Arduino anschauen. Allerdings ohne Logicanalyzer kann die Fehlersuche zur Herausforderung werden. Hast du Ggf. zwei Master am Bus?
 
Vielen Dank für eure Unterstützung.

Ein Problem mit der Platine schließe ich jetzt aus. Hatte immer bedenken, dass hier etwas daneben liegt (unsaubere Eingangsspannung z.B.) Aber auch auf dem Breadboard mit VCC vom Wemos selbst zeigt sich das gleiche Verhalten.

Ich vermute hier ein Softwareproblem. Der Wemos arbeitet schön seinen Loop ab, aber er sendet nur noch Quatsch (kein blockieren durch Wire.h).

Das Problem lässt sich dann nur so lösen, wobei nur die letzte Variante das Problem in jedem Fall löst
1. kurzes Trennen von SCL und SDA
2. Neustart der Sensoren durch trennen von VCC
3. Neustart des WEMOS

Interessant finde ich, dass es egal ist, ob der Wemos schläft oder durch ein langes Delay pausiert. Das Problem tritt in beiden Fällen auf. Beim Sleep durchläuft er aber immer die Setup Funktion, wo auch der i2C Bus mittels Wire.begin(); initialisiert wird (so zumindest mein Verständnis davon).

Ich werde mir nun einen Logik Analyzer besorgen und mal schauen, ob ich damit was heraus bekomme. Zwischenzeitig werde ich es mal per Software versuchen zu lösen.
 
Kurzes Update von mir. Jetzt läuft alles wunderbar seit etwa zwei Stunden.
Die Spannugnswandler vom Typ MCP1702 benötigen am Eingang und am Ausgang je 1uF Keramikkondensator. Ich hatte hier aber 4,7uF Elkos. Habe nun die Kerkos einfach parallel zu den Elkos gepackt, jetzt geht es.
Außerdem habe ich den Code aufgeräumt und wieder auf TinyWireS umgestellt. Somit bleibt noch viel Platz auf den ATTINYs für Ergänzungen. Die Wire Bibliothek die mit dem SpenceKonde TinyCore kommt funktioniert zwar super, belegt aber irre viel vom knappen Speicher.

Falls es jemanden interessiert, es liegt alles im Git Repository. Es wird nun Zeit, die Station zusammen zu bauen und draußen zu platzieren.
 
Oben