в общем у меня никак данные с датчика СО2 не читает
вот такой скетч поместил в отдельный файл
Код: Выделить всё
#define T6703_Address 0x15 // T6703 i2C Address
int data [4];
int ppmValue;
void T6703init(){
initStart(F("Telair T6703 CO2 Sensor"));
Serial.println("Initializing...............................");
Serial.println("Starting i2C Communicate ADDR 0x15.........");
started("Telair T6703 CO2 Sensor");
delay(delay2s);
Wire.begin();
delay(delay1s);
}
void T6703loop(){
int ppmValue = readSensor();
if (ppmValue > 0) {
Serial.println("CO2-Carbon Dioxide Read Value > ");
Serial.println(ppmValue);
} else {
Serial.println("ERROR | Failed to communicate to the sensor");
}
delay(delay2s);
}
int readSensor(){
Wire.beginTransmission(T6703_Address);
Wire.write(0x04);
Wire.write(0x13);
Wire.write(0x8B);
Wire.write(0x00);
Wire.write(0x01);
Wire.endTransmission();
delay(delay2s);
Wire.requestFrom(T6703_Address, 4); //Request 4 bytes from the sensor
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read();
Serial.println("FUNCTION CODE >");
Serial.println(data[0], HEX);
Serial.println("");
Serial.println("BYTE COUNT > ");
Serial.println(data[1], HEX);
Serial.println("");
Serial.println("MOST SIGNIFICANT BIT > 0x");
Serial.println(data[2],HEX);
Serial.println("");
Serial.println("LEAST SIGNIFICANT BIT > 0x");
Serial.println(data[3],HEX);
ppmValue = (((data[2] & 0x3F ) << 8) | data[3]);
}
и потом его вызываю в главном файле вот так
Код: Выделить всё
void setup() {
serialInit();
ethernetInit();
MQTTreconnect();
bmeInit();
T6703init();
}
void loop() {
client.loop();
if (!client.connected()) { MQTTreconnect(); }
if (myTimer10s.isReady()) { // опрашивать датчики раз в 10 секунд
bmeLoop();
T6703loop();
}
}
далее смотрю в монитор порта и датчик СО2 всегда присылает такие ответы
Код: Выделить всё
19:16:58.832 -> FUNCTION CODE >
19:16:58.832 -> 4
19:16:58.832 ->
19:16:58.832 -> BYTE COUNT >
19:16:58.866 -> 2
19:16:58.866 ->
19:16:58.866 -> MOST SIGNIFICANT BIT > 0x
19:16:58.900 -> 1
19:16:58.900 ->
19:16:58.900 -> LEAST SIGNIFICANT BIT > 0x
19:16:58.933 -> C6 (тут бывают значения от C5 до C9)
19:16:58.933 -> ERROR | Failed to communicate to the sensor
Ни разу считать данные с датчика не получилось. Предварительно я заливал в ардуино скетч I2Cscanner и убедился, что в мониторе порта видно датчик BME по адресу 76 и датчик T6703 по адресу 15.
Потом залил свой скетч и там данные с датчика BME приходят, а с T6703 всё время ошибка.
Датчик BME просто соединил с контактами SDA, SCL без резисторов. А у датчика T6703 контакт SDA соединил без резистора.
А контакт SCL подтянул к 5В через резистор 4,7кОм.
PIN 1 - I2C_SDA есть встроенная подтяжка на 5V резистором 4.7кОм
PIN 2 - I2C_SCL подтянул к 5V внешним резистором 4.7кОм
PIN 3 - V+
PIN 4 - GND
PIN 5 - не соединял
PIN 6 - GND
если убрать резистор, то ошибки немного другие
Код: Выделить всё
19:37:23.696 -> LEAST SIGNIFICANT BIT > 0x
19:37:23.731 -> 9E (ещё видел такие коды 9A, 95, 96, 97, 98, 99, 9B, 9C, AD, A0, A1, A2, A4)
19:37:23.731 -> ERROR | Failed to communicate to the sensor