ESP8266 (ESP-07) и BMP280
- Войдите на сайт для отправки комментариев
Вс, 29/01/2017 - 22:51
Как то не задалось у меня с этим датчиком, может сразу убитый был, может во время подключения, так что к моменту замены продавцом оного я уже подготовился и поправил два скетча для его испытания.
Первый - сканер I2C портов, второй - тестовый скетч для BMP280
Библиотеку брал отсюда, закинуть в папку со скетчем:
Сканер:
/*
* Дополнение кода для проверки ESP8266
* Подключение - пин GPIO5 - SCK, GPIO4- SDA (На пинах GPIO14 и GPIO2 не работало
* Надо было определить эти пины в setup
*
* Проверено на ESP-07 и DS3231, BMP280
*
*/
#include <Wire.h>
void setup()
{
//Wire.begin(); // SCK - GPIO5, SDA - GPIO4
Wire.begin(2,14); // SCK - GPIO14, SDA - GPIO2
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Датчик BMP280:
#include "BMP280.h"
#include "Wire.h"
#define P0 1013.25
BMP280 bmp;
void setup()
{
Serial.begin(115200);
// Интерфейс I2C подключен ко 2 (SDA) и 14 (SCL) пинам (не стандартно).Пин SCB к 3.3 вольта
if(!bmp.begin(2,14)){
Serial.println("BMP init failed!");
while(1);
}
else Serial.println("BMP init success!");
bmp.setOversampling(4);
}
void loop()
{
double T,P;
char result = bmp.startMeasurment();
if(result!=0){
delay(result);
result = bmp.getTemperatureAndPressure(T,P);
if(result!=0)
{
double A = bmp.altitude(P,P0);
Serial.print("T = \t");Serial.print(T,2); Serial.print(" degC\t");
Serial.print("P = \t");Serial.print(P,2); Serial.print(" mBar\t");
Serial.print("A = \t");Serial.print(A,2); Serial.println(" m");
}
else {
Serial.println("Error.");
}
}
else {
Serial.println("Error.");
}
delay(5000);
}
Добавлю код проверки датчика AM2320
#include <Wire.h> #include <AM2320.h> AM2320 th; float t1,h1; void am_2320() { switch(th.Read()) { case 2: break; case 1: break; case 0: Serial.println(); Serial.print("humidity: "); Serial.print(th.h); h1 = th.h; Serial.print("%, temperature: "); Serial.print(th.t); Serial.println("*C"); t1 = th.t; delay(1000); Serial.println("-***-"); Serial.println(t1); Serial.println(h1); break; } delay(2200); } void setup() { Serial.begin(115200); Wire.begin(2,14); // I2C на пинах 2(SDA) и 14 (SCL) } void loop() {am_2320(); }Подскажите, что именно делает эта команда и для чего она нужна:
bmp.setOversampling(4);
Судя по названию, делает усреднение по 4 отсчетам.
еще советую драйвер i2c для esp8266 поменять - https://github.com/enjoyneering/ESP8266-I2C-Driver
да причем аппартно, без участия mcu. bme280 тот аж 16 отсчетов может