Столкнулся с проблемой подключения двух устройств на одной I2c линии, а именно SI7021(3.3в) и Lcd 1602

Здравствуйте, ардуинщики! Столкнулся с проблемой подключения двух устройств на одной 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();

};
}

Задержки присутствуют, потому что в дальнейшем код будет дополняться и становиться “мультизадачным”.
Помогите исправить проблему пожалуйста!

Блин, я же сказал в новом сообщении, а не в новой теме

По вопросу - залейте в ардуино стандартный скетч i2c scanner и посмотрите, какие устройства он видит. Вполне возможно, что у датчика и экрана один и тот же адрес

1 лайк

Нет, у устройств разные адреса

Уверены?

Какие?

Ну, если верить даташиту…


The Si7021 is a I2C sensor. 
That means it uses the two I2C data/clock wires available on most microcontrollers, and can share those pins with other sensors as long as they
don't have an address collision. 
For future reference, the I2C address is 0x40 and you can't change it!

А что при компиляции библиотека LCD_I2C разве не кричит, что она для архитектуры AVR?

Если по библиотекам, то 0x27 дисплей, 0x40 датчик

При компиляции, вроде бы, ни каких ошибок не выдаёт

а если в настройках включить?

А если результаты i2c сканера посмотреть?

ЛСД-то на 5в прицеплен?

1 лайк

А как?

Если вы имеете в виду питание, то да

я пишу код в IDE, так что не подскажу

Третий раз намекаю!!!

В процессе. У меня долго редактор кода открывается

Да, очень долго. Минут 20 как )))
Меняйте компьютер.

То есть ЛСД на 5в подтянут, а температурник на 3.3в.
Интересно, чем такое соседство должно кончится…

Ничем, как и во всех китайских модулях.