• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу