• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Подключение датчика BMP280 к ESP8266

anDev

New member
Приобрёл датчик барометра BMP280, но никак не получается его подключить к ESP8266. Пробовал соединять по I2C таким образом - SСL датчика на GPIO 5 платы и SDA на GPIO 4. Но значения не считывались. Также, пробовал подключать на GPIO 1 и 2, но это не помогло. Скетч из Arduino IDE, который был использован, прилагаю ниже.

C++:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <ESP8266WiFi.h>

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10

Adafruit_BMP280 bme; // I2C
// replace with your channel’s thingspeak API key,
String apiKey = "YOUR-API-KEY";
const char* ssid = "YOUR-SSID";
const char* password = "YOUR-ROUTER-PASSWORD";
const char* server = "api.thingspeak.com";
WiFiClient client;


/************************** 
 *   S E T U P
 **************************/
void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
 
  if (!bme.begin()) { 
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
  }
  WiFi.begin(ssid, password);
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected"); 
}

  /************************** 
 *  L O O P
 **************************/
void loop() {
    Serial.print("T=");
    Serial.print(bme.readTemperature());
    Serial.print(" *C");
    
    Serial.print(" P=");
    Serial.print(bme.readPressure());
    Serial.print(" Pa");

    Serial.print(" A= ");
    Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
    Serial.println(" m");

    if (client.connect(server,80))  // "184.106.153.149" or api.thingspeak.com
    {
        String postStr = apiKey;
        postStr +="&field1=";
        postStr += String(bme.readTemperature());
        postStr +="&field2=";
        postStr += String(bme.readPressure());
        postStr += "\r\n\r\n";
        
        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");
        client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);   
    }
    client.stop();
    //every 20 sec   
    delay(20000);
}
 

McKay

New member
Вот простенький скетч для подключения. Правда там delay и он значения выводит в монитор порта
Подключение по I2C:
SCL -> gpio5
SDA -> gpio4
#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;
String temperature, humidity, pressure;

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(100);

bme.begin(0x76); //замените адрес на свой

}

void loop() {
// put your main code here, to run repeatedly:
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure() / 100.0F;
Serial.print(temperature);
Serial.print(" *C ");
Serial.print(humidity);
Serial.print(" % ");
Serial.print(pressure);
Serial.println(" hPa");

delay(500);
}
 
в команде Wire.begin(esda, escl); используем параметры в скобках esda и escl - пины к которым подключен BME. Ну и желательно запустить сканер I2C и проверить выдаваемый адрес и адрес заданный в библиотеке Adafruit
 
Сверху Снизу