Не удается найти/подключить устройства I2C (SHT31 и SGP30)

Недавно я приобрел Arduino Nano 33 IOT вместе с двумя датчиками:

  • Adafruit SHT31-D (https://learn.adafruit.com/ adafruit-sht31-d-датчик температуры и влажности)
  • Adafruit SGP30 (https://learn.adafruit.com/adafruit-sgp30 -gas-tvoc-eco2-mox-sensor/)

Однако пока мне не удалось связаться ни с одним из этих двух датчиков. Например, я подключаю датчик SHT31 так:

  • +3,3 В – Вин
  • Заземление – Заземление
  • От A4 до SDA
  • От A5 до SCL

Я безуспешно пробовал пример Adafruit SHT31-D по умолчанию, программа зависала. Я попробовал стандартный сканер I2C, но он не находит никаких устройств с подключенным датчиком. Когда датчик отключен, он находит два устройства (полагаю, IMU и что-то еще).

Я полагаю, что с I2C-соединением внутренних и внешних датчиков происходит что-то странное, но я понятия не имею, как решить эту проблему. Я читал кое-что о TwoWire (extern TwoWire Wire1; после #include), но мне трудно понять, нужно ли это мне и как это реализовать.

Я сам нашел эти темы:

https://forum.arduino.cc/index.php?topic=639188.0

https://forum.arduino.cc/index.php?topic=658967.0

изменить: мне пока не удалось решить эти проблемы, и я все еще ищу помощи в решении моих проблем!

, 👍2

Обсуждение

Вы пытались использовать Arduino Uno (или аналогичный) с этими датчиками? Nano 33 IOT немного отличается от плат Uno (и подобных). Это проверит, в порядке ли ваши датчики или нет., @Fahad


3 ответа


1

можно закодировать датчик I2C (я использую SHT31), используя настраиваемые порты GPIO следующим образом:

//Выводы шины I2C
#define SDA 8
#define SCL 9

#include "Adafruit_SHT31.h"
TwoWire I2Cbus = TwoWire(0);
Adafruit_SHT31 sht31 = Adafruit_SHT31(&I2Cbus);

void setup(){
  Serial.begin(115200);            // USB-связь с Serial Monitor
  Serial.print("Starting serial...");

  Serial.print("Starting SHT31...");
  startSHT(); 
}

 // ******************************************************* ********
 void startSHT(){
  I2Cbus.begin(SDA, SCL, 100000ul); 
  if (! sht31.begin(0x44)) { // Установить 0x45 для альтернативного адреса i2c
     Serial.println("Couldn't find SHT31");
while (1) 
delay(1);
  }
}
,

2

У меня была похожая проблема, но исправить ее оказалось просто. Во всех руководствах по датчикам SHT3x указано подключение VIN к GPIO 3,3 В. Я проверил с помощью тестового измерителя, SHT3x получал напряжение, но многочисленные библиотеки SH3x, похоже, не работали, и пара скетчей I2C также ничего не нашли. Итак, я попробовал переместить вывод VIN на контакт GPIO 5 В — все работает отлично. Возможно, моему USB-соединению не хватает мощности, или, возможно, моему SHT3x требуется 5 В. В любом случае это работает - теперь доволен!

,

0

Без схемы возьму SWAG" Для работы I2C необходим подтягивающий резистор для SCL и другой для SDA. Оба являются выходами с открытым стоком/коллектором, ни один из которых не может подавать + (логическая 1) на шину.

,