I2c на esp32 с двумя датчиками.

Тема в разделе "ESP8266, ESP32", создана пользователем Leopoll, 7 апр 2022.

  1. Leopoll

    Leopoll Нуб

    Есть задача соединить по 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. b707

    b707 Гуру

    сколько резисторов добавили? На каждый датчик пару 2к2 ?
     
  3. SergeiL

    SergeiL Оракул Модератор

    2,2метра слишком много для I2C.
    На длинных проводах я ставил дополнительный буферник TCA9517 на стороне датчика.
    Так рекомендует TI
    С буфером на двух метровом проводе проблем нет, HDC1080 с ESP8266 работает корректно, ошибок нет.
     
  4. Leopoll

    Leopoll Нуб

    Один резистор на каждую линию sda и scl.
     
  5. b707

    b707 Гуру

    откуда такой номинал - 2к2 ? Спецификация рекомендует 10к
     
  6. Leopoll

    Leopoll Нуб

    Для какого напряжения? Я в одной из статей вычитал 4к7 для 5в, 2к4 для 3.3в. Ссылку могу найти. Кстати, на 4к7 не заработал даже один датчик на длинном проводе. Думаю на 10к тем более не заработает.
    Кстати, провод - витая пара. Экран соединил с землёй.
     
  7. b707

    b707 Гуру

    ну значит длинный кабель. I2C - расшифровывается как Inter-Integrated Circuit, то есть внутри-платная шина. Ее область действия сантиметры. а не метры
     
  8. parovoZZ

    parovoZZ Гуру

    витуха там не сильно нужна - I2C не дифференциальный интерфейс. Экран только вредит - он увеличивает емкость линии.

    Чем ниже номинал подтягивающего резистора, тем выше помехоустойчивость линии. В общем случае предельное значение зависит от токовых способностей нижнего драйвера.
     
  9. parovoZZ

    parovoZZ Гуру

    I2C - синхронный интерфейс. Это значит, что с увеличением длины линии (а это приводит к увеличению как её индуктивности, так и емкости) можно понижать скорость обмена.
     
  10. Leopoll

    Leopoll Нуб

    Не поспоришь. Но датчик работает на длинном кабеле без ошибок. Не работают два датчика одновременно, один на длинном, другой на коротком кабеле.
     
  11. Leopoll

    Leopoll Нуб

    На esphome вроде нет опции скорость регулировать.
    Можно проблема в том, что у двух датчиков кабеля разной длины? Второй тоже длинным сделать?
     
  12. Leopoll

    Leopoll Нуб

    Экспериментально получалось, что если отсоединить экран от земли, все гораздо хуже.
     
  13. Leopoll

    Leopoll Нуб

    Сделал две шины I2C для каждого датчика. Теперь оба работают. Другого выхода не нашел.