Всем доброго дня!
Решил поэкспериментировать с разными датчиками температуры / влажности для проекта, с оказией приобрел пару GY-SHT31-D
К arduino через i2c уже подключен экран, перед покупкой датчиков читал что устройств на эту шину можно подключить достаточно много, главное чтобы адреса отличались, также нагуглил по этим датчикам возможность работы этих датчиков на 2-х адресах 0х44 и 0х45.
Приехали датчики, подключил их параллельно экрану, залил скетч
Запускаю и получаю
Только странно что вместо везде фигурирующего 0x44 стоит 0x29.
Начал курить даташиты и форумы по этим и схожим датчикам, сначала нашел данные что для изменения адреса на 0x45 нужно подать 5в ардуины на пин AD.
Подал - ничего не поменялось.
Дальнейшие гугления подсказали что на этот пин нужно подать землю ардуины, при этом где-то писали что через резистор 10кОм, где-то гнапрямую, т.к. на модуле резистор уже есть.
Попробовал и так и сяк - ничего не изменилось.
Подумал что возможно один из модулей неисправен, отключил оба и начал подключать по очереди - все работают.
Что я делаю не так?
P.S.: Как запасной вариант рассматриваю хаб, но если можно без него, хотелось бы без него.
Решил поэкспериментировать с разными датчиками температуры / влажности для проекта, с оказией приобрел пару GY-SHT31-D
К arduino через i2c уже подключен экран, перед покупкой датчиков читал что устройств на эту шину можно подключить достаточно много, главное чтобы адреса отличались, также нагуглил по этим датчикам возможность работы этих датчиков на 2-х адресах 0х44 и 0х45.
Приехали датчики, подключил их параллельно экрану, залил скетч
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop(){
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 8; address < 127; address++ ){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
void setup(){
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop(){
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 8; address < 127; address++ ){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
Запускаю и получаю
Ну в принципе нормально думаю, 0х27 это экран, 0х29 это оба датчика, т.к. манипуляций по изменению адреса не делал.Scanning...
I2C device found at address 0x27 !
I2C device found at address 0x29 !
done
Только странно что вместо везде фигурирующего 0x44 стоит 0x29.
Начал курить даташиты и форумы по этим и схожим датчикам, сначала нашел данные что для изменения адреса на 0x45 нужно подать 5в ардуины на пин AD.
Подал - ничего не поменялось.
Дальнейшие гугления подсказали что на этот пин нужно подать землю ардуины, при этом где-то писали что через резистор 10кОм, где-то гнапрямую, т.к. на модуле резистор уже есть.
Попробовал и так и сяк - ничего не изменилось.
Подумал что возможно один из модулей неисправен, отключил оба и начал подключать по очереди - все работают.
Что я делаю не так?
P.S.: Как запасной вариант рассматриваю хаб, но если можно без него, хотелось бы без него.