Есть задача соединить по i2c к esp32 (работает в esphome) два датчика: AHT10 на кабеле 0.8м и VL53L0x на кабеле 2.2м. AHT10 сразу заработал нормально. VL53L0x не работал, видимо кабель был слишком длинный (хотя когда пробовал его по этому кабелю подсоединить к arduino UNO, все работало), добавил на шину подтягивающие резисторы 2к2. Теперь оба датчика работают по отдельности, но вместе не работают. В логе ошибки, в частности "Recovery: failed, SDA is held low on the bus". Что еще можно сделать?
2,2метра слишком много для I2C. На длинных проводах я ставил дополнительный буферник TCA9517 на стороне датчика. Так рекомендует TI С буфером на двух метровом проводе проблем нет, HDC1080 с ESP8266 работает корректно, ошибок нет.
Для какого напряжения? Я в одной из статей вычитал 4к7 для 5в, 2к4 для 3.3в. Ссылку могу найти. Кстати, на 4к7 не заработал даже один датчик на длинном проводе. Думаю на 10к тем более не заработает. Кстати, провод - витая пара. Экран соединил с землёй.
ну значит длинный кабель. I2C - расшифровывается как Inter-Integrated Circuit, то есть внутри-платная шина. Ее область действия сантиметры. а не метры
витуха там не сильно нужна - I2C не дифференциальный интерфейс. Экран только вредит - он увеличивает емкость линии. Чем ниже номинал подтягивающего резистора, тем выше помехоустойчивость линии. В общем случае предельное значение зависит от токовых способностей нижнего драйвера.
I2C - синхронный интерфейс. Это значит, что с увеличением длины линии (а это приводит к увеличению как её индуктивности, так и емкости) можно понижать скорость обмена.
Не поспоришь. Но датчик работает на длинном кабеле без ошибок. Не работают два датчика одновременно, один на длинном, другой на коротком кабеле.
На esphome вроде нет опции скорость регулировать. Можно проблема в том, что у двух датчиков кабеля разной длины? Второй тоже длинным сделать?