selan61
Member
На новой библиотеке Wire по шине I2C подключил 3 датчика RTC_SI7021_BMP280. Проверено на пинах 0,2 и 1,3 ESP01.
Подключение выполнено по рисунку
Новая библиотека Wire GitHub - enjoyneering/ESP8266-I2C-Driver: Bug fixes of native Arduino ESP8266 core I2C Driver
Консультация разработчика Исправленная Wire библиотека для Arduino ESP8266 core
Скетч
Подключение выполнено по рисунку
Новая библиотека Wire GitHub - enjoyneering/ESP8266-I2C-Driver: Bug fixes of native Arduino ESP8266 core I2C Driver
Консультация разработчика Исправленная Wire библиотека для Arduino ESP8266 core
Скетч
Код:
//Проверка работы шины I2C с новой библиотекой Wire
//на датчиках SI7021, RTC, BMP280 с ESP01 на пинах 0-SDA, 2-SCL
#include <Wire.h> //I2C library
#include <SI7021.h> //I2C SI7021
#include <RtcDS3231.h> //RTC library
#include <Adafruit_BMP280.h>
#define SDA 0 // GPIO0 on ESP-01 module
#define SCL 2 // GPIO2 on ESP-01 module
Adafruit_BMP280 bmp; // I2C
SI7021 sensor;
RtcDS3231<TwoWire> rtcObject(Wire); //Uncomment for version 2.0.0 of the rtc library
void setup() {
Wire.begin(SDA,SCL); // SDA SCL I2C
sensor.begin(SDA,SCL);
Serial.begin(115200); //Starts serial connection
rtcObject.Begin(); //Starts I2C
if (!bmp.begin(0x76)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1);
}
RtcDateTime currentTime = RtcDateTime(18, 01, 16, 17, 30, 0); //define DATE and TIME
rtcObject.SetDateTime(currentTime); //configure the RTC with object
}
void loop() {
RtcDateTime currentTime = rtcObject.GetDateTime(); //get the time from the RTC
char str[15]; //declare a string as an array of chars
sprintf(str, "%d/%d/%d %d:%d:%d", //%d allows to print an integer to the string
currentTime.Year(), //get year method
currentTime.Month(), //get month method
currentTime.Day(), //get day method
currentTime.Hour(), //get hour method
currentTime.Minute(), //get minute method
currentTime.Second() //get second method
);
Serial.println(str); //print the string to the serial port
// temperature is an integer in hundredths
float temperature = sensor.getCelsiusHundredths();
temperature = temperature / 100;
Serial.print(F("temperature-"));
Serial.println(temperature);
// humidity is an integer representing percent
float humidity = sensor.getHumidityPercent();
Serial.print(F("humidity-"));
Serial.println(humidity);
Serial.print(F("Temperature = "));
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(bmp.readPressure()/133.3);
Serial.println(" mmhg");
Serial.print(F("Approx altitude = "));
Serial.print(bmp.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(" m");
Serial.println();
delay(20000); //20 seconds delay
}