Не удается найти/подключить устройства 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
изменить: мне пока не удалось решить эти проблемы, и я все еще ищу помощи в решении моих проблем!
3 ответа
можно закодировать датчик 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);
}
}
У меня была похожая проблема, но исправить ее оказалось просто. Во всех руководствах по датчикам SHT3x указано подключение VIN к GPIO 3,3 В. Я проверил с помощью тестового измерителя, SHT3x получал напряжение, но многочисленные библиотеки SH3x, похоже, не работали, и пара скетчей I2C также ничего не нашли. Итак, я попробовал переместить вывод VIN на контакт GPIO 5 В — все работает отлично. Возможно, моему USB-соединению не хватает мощности, или, возможно, моему SHT3x требуется 5 В. В любом случае это работает - теперь доволен!
Без схемы возьму SWAG" Для работы I2C необходим подтягивающий резистор для SCL и другой для SDA. Оба являются выходами с открытым стоком/коллектором, ни один из которых не может подавать + (логическая 1) на шину.
- Считывание значений с емкостного сенсорного датчика TTP229 на arduino
- MAX30100 не работает
- Подключение двух Arduino через I2C, когда контакты I2C A4/A5 уже используются.
- Отправка более BUFFER_LENGTH(32) байт в подчиненном ответе I2C
- Направление по компасу не изменяется линейно
- Не в состоянии записать или прочитать регистры датчиков. Есть ли у меня ошибка в коде?
- Отправка и получение различных типов данных через I2C в Arduino
- Как выбрать альтернативные контакты I2C на ESP32?
Вы пытались использовать Arduino Uno (или аналогичный) с этими датчиками? Nano 33 IOT немного отличается от плат Uno (и подобных). Это проверит, в порядке ли ваши датчики или нет., @Fahad