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
Подскажите, что именно делает эта команда и для чего она нужна:
bmp.setOversampling(4);
Судя по названию, делает усреднение по 4 отсчетам.
еще советую драйвер i2c для esp8266 поменять - https://github.com/enjoyneering/ESP8266-I2C-Driver
да причем аппартно, без участия mcu. bme280 тот аж 16 отсчетов может