Styczność z modułami ESPx mam od niedawna.
Przez pół roku RPi obsługiwało:
8x przekaźnik
2x PWM do LEDów
BME280 + BMP180 po I2C
Całość działała sprawnie ale był problem po zaniku zasilania, zacząłem szukać alternatywy.
Padło na ESP32 ze względu na ilość potrzebnych wyprowadzeń.
Mam problem z czujnikami po I2C, jeśli zaczną już działać to “świrują”
Piny wg. dokumentacji dla I2C - 21 i 22, zasilanie 3,3V.
Często czujniki nie są w ogóle wykrywane, albo wykrywany jest tylko jeden.
Pojawiają się wpisy w logach “Recovery: failed, SDA is held low on the bus”
Testowałem różne konfiguracje, zmniejszałem i zwiększałem częstotliwość ale bez skutku.
Wczoraj dla testu uruchomiłem czujniki na ESP8266 z tym samym kodem w ESPHome.
Od kilkunastu godzin działają bez żadnych błędów.
No i teraz mam zagwozdkę, w czym problem?
Trafił się felerny ESP32 a może obsługa w ESPHome kuleje?
Macie jakieś pomysły gdzie szukać i jak zdiagnozować problem?
To sugeruje problem ze sprzętem, a konkretniej zwarcie/upływność do masy na SDA (czyli jak rozumiem pinie GPIO21 skoro użyłeś domyślnych pinów).
Może to też sugerować zbyt wysoką rezystancję pullup’u na tej szynie.
Generalnie jako piny I2C w ESP32 można zdefiniować każdy “normalny” pin GPIO, więc podejrzewając uszkodzenie układu możesz zdefiniować jakiś inny pin, który ma w tabelce spod linka
ESP32 ma dwa kontrolery I2C i tu może być jakiś problem, nie znam ESPHome więc tylko zgaduję, po Twojej informacji, że z ESP8266 działa OK.
Ta notatka myślę, że nie znalazła się w dokumentacji bez przyczyny:
Testowałem różne konfiguracje z ESP32, zmieniałem piny na inne niż domyślne 21/22 dla I2C. Podpinałem rezystory 2.2k i 4.7k.
Kupiłem inny egzemplarz ESP32…
Nic nie pomogło, cały czas “wariowały” odczyty z BME280/BMP180.
Podejrzewam kable od czujników bo są nieekranowane, zwykłe telefoniczne.
Ewentualnie jakość wykonania tych klonów devkit-ów ESP32.
Środowisko nie jest idealne, cewki od przekaźników, zasilacz impulsowy od TV w pobliżu.
Co nie zmienia faktu, że RPi działało w tym miejscu bez zająknięcia.
Poddałem się i uruchomiłem ESP8266 z PCF8574, który obsługuje 8 przekaźników przez I2C.
Odczyty z czujników od ponad 12h bez żadnych błędów.