Здравствуйте, ардуинщики! Столкнулся с проблемой подключения двух устройств на одной I2c линии, а именно SI7021(3.3в) и Lcd 1602.
Суть проблемы: при запуске микроконтроллера(esp8266), по линии I2c работает только дисплей, выводя информацию. А датчик температуры и влажности SI7021 не откликается(по идее значения температуры и влажности должны записываться в отдельную переменную формата float и дальше переменная должна выводиться на дисплей и дальше использоваться в расчётных параметрах проекта), он подаёт признаки работы только при отключении дисплея с I2c линии и повторном его подключении, при таком условии всё отлично “само собой” чинится и работает.
Однако я понимаю, что это не правильно и о стабильной работе ,в таком случае, не может быть и речи.
С чем я и прошу вас мне помочь. Сам я занимаюсь микроконтроллерами не так долго, и может быть не знаю о разных “подводных камнях”, поэтому могу не понимать некоторых банальных вещей.
Библиотеки я использовал: Wire, LiquidCrystal_I2C, SPI, Adafruit_Si7021.
Пишу код я в PlathormIO
Код
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <Adafruit_Si7021.h>
int last_time2;
int last_time;
float temp;
float hum;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Adafruit_Si7021 sensor = Adafruit_Si7021();
void setup() {
sensor.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(“t”);
lcd.setCursor(5, 0);
lcd.print(“C”);
lcd.setCursor(4, 0);
lcd.print(char(223));
lcd.setCursor(4, 1);
lcd.print(char(37));
lcd.setCursor(11, 0);
lcd.print(char(37));
delay(1000);
}
void loop() {
void temperature();
lcd.setCursor(1, 0);
lcd.print(temp);
lcd.setCursor(1, 1);
lcd.print(hum);
}
void temperature () {
if (millis() - last_time2 > 20000) {
last_time2 = millis();
temp = sensor.readTemperature();
hum = sensor.readHumidity();
};
}
Задержки присутствуют, потому что в дальнейшем код будет дополняться и становиться “мультизадачным”.
Помогите исправить проблему пожалуйста!