MihaNN52
Member
Проблема. При подключении датчика BME280 и часов DS3131 к шине I2C.
Беру примеры из библиотек.
Отдельно и BME и часы работают нормально.
Объединяю скетчи - все работает до перезагрузки ESP12E.
После перезагрузки, на первый , а может на пятый раз шина i2c падает.
И не восстанавливает свою работу до тех пор пока не выдерну провод SDA из часов.
После чего снова все работает без проблем до перезагрузки .
Подтяжка стоит и в BME и в модуле часов.
Из модуля часов выпаял все лишнее -епром подтяжку зарядку.
Менял ESP на wemos d1. nodemcuv3. и просто голую ESP12E. Результат один и тот же.
Менял библиотеки BME и часов на другие - все бестолково.
Думаю есть какая то особенность которую я не учел, возможно что то не так в библиотеке wire.
Не могу понять в чем дело. Скетчи пишу в ардуино IDE 1.8.1 Пробовал менять источник питания и напряжение питание. - так же без результата.
При всем все отлично работает на UNO и STM32.
Беру примеры из библиотек.
Отдельно и BME и часы работают нормально.
Объединяю скетчи - все работает до перезагрузки ESP12E.
После перезагрузки, на первый , а может на пятый раз шина i2c падает.
И не восстанавливает свою работу до тех пор пока не выдерну провод SDA из часов.
После чего снова все работает без проблем до перезагрузки .
Подтяжка стоит и в BME и в модуле часов.
Из модуля часов выпаял все лишнее -епром подтяжку зарядку.
Менял ESP на wemos d1. nodemcuv3. и просто голую ESP12E. Результат один и тот же.
Менял библиотеки BME и часов на другие - все бестолково.
Думаю есть какая то особенность которую я не учел, возможно что то не так в библиотеке wire.
Не могу понять в чем дело. Скетчи пишу в ардуино IDE 1.8.1 Пробовал менять источник питания и напряжение питание. - так же без результата.
При всем все отлично работает на UNO и STM32.
Код:
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
RTC_DS3231 rtc;
unsigned long long time1 = millis();
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
unsigned long time1 = 0;
float BME_T;
float BME_H;
float BME_P;
void read_sensor() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
BME_T = bme.readTemperature();
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 133.322);/// 100.0F
Serial.println(" hPa");
BME_P = bme.readPressure() / 133.322;
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
BME_H = bme.readHumidity();
Serial.println();
}
void data_time(){
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
void setup () {
#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif
Serial.begin(9600);
delay(3000); // wait for console opening
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
////
Serial.println(F("BME280 test"));
bool status;
// default settings
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("-- Default Test --");
//delayTime = 1000;
Serial.println();
delay(100); // let sensor boot up
////
}
void loop () {
DateTime now = rtc.now();
if (millis() - time1 >= 5000) {
time1 = millis();
data_time();
read_sensor();
}
}
Последнее редактирование: