ESP8266 (ESP-WROOM-02)에 온도 습도 기압 센서 (BME280)를 연결하여 Ambient와 협력 해 보았습니다.

ESP8266(ESP-WROOM-02)에 온도 습도 기압 센서(BME280)를 연결하여 Ambient에 제휴하여 가시화해 보았습니다.

※궁극적으로, 이 센서&ESP8266은 자택 차고의 환경 감시에 사용할 예정

부품 정보



BME280 은 온도・습도・기압을 고정밀도로 측정할 수 있는 센서입니다.
¥600~¥1,500 정도입니다.
싸고 비슷한 BMP280이라는 센서는 온도·기압만으로 습도를 측정할 수 없기 때문에 주의. 혼란스러워.

ESP8266은 그래서 M구 ぅ아 그림 SP8266 CH340이라는 개발 보드를 사용합니다.
중국에서 도착하는 데 시간이 걸립니다만, ¥ 480으로 염가입니다.

회로 정보



BME280은 I2C 이라는 규격으로 접속할 수 있는 센서입니다.
이 표준이라면 ESP8266에서 비교적 쉽게 사용할 수 있습니다.
Amazon에서도 다양한 I2C 디바이스이 판매되고 있기 때문에 바라보고있는 것만으로도 꿈이 퍼집니다.

연결은
SCL에 GPIO5, SDA에 GPIO4를 연결하고,
후에는 전원과 GND를 연결할 뿐입니다.


핀 헤더 거꾸로 붙여 버렸을지도(T~T) ↑ L자의 핀 헤더가 좋을지도 모르겠네요.

회로도 같은 것





소스 코드



BME280과 Ambient는 라이브러리가 공개되었으므로 이용했습니다.
- BME280 라이브러리
- Ambient 라이브러리

BME280.ino
#include <Wire.h>
#include <ESP8266WiFi.h>

#include "BME280_MOD-1022.h"
#include "Ambient.h"

extern "C" {
#include "user_interface.h"
}

#define PERIOD 300

//----------------------------------------------

const char* ssid = "wifiのAPのSSIDを入れる";
const char* password = "wifiのパスワードを入れる";

unsigned int channelId = AmbientのチャネルIDを入れる;
const char* writeKey = "Ambientのライトキーを入れる";

WiFiClient client;
Ambient ambient;

//----------------------------------------------

float temperature = 0.0;
float humidity    = 0.0;
float pressure    = 0.0;

void printFormattedFloat(float val) {
  char buffer[10];

  dtostrf(val, 4, 2, buffer);
  Serial.print(buffer);
}

void setup() {
  wifi_set_sleep_type(LIGHT_SLEEP_T);

  // I2Cの通信を開始
  // SDA: GPIO4
  // SCL: GPIO5
  Wire.begin(4, 5);
  Serial.println("I2C start.");

  // シリアル通信を開始
  Serial.begin(115200);
  Serial.println("Serial start.");

  // BME280を初期化
  BME280.readCompensationParams();

  // オーバーサンプリングの回数を設定
  BME280.writeOversamplingTemperature(os1x);
  BME280.writeOversamplingHumidity(os1x);
  BME280.writeOversamplingPressure(os1x);
  Serial.println("BME280 start.");

  // wifi初期化
  WiFi.begin(ssid, password);
  Serial.println("WiFi start.");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // チャネルIDとライトキーを指定してAmbientの初期化
  ambient.begin(channelId, writeKey, &client);
  Serial.println("Ambient start.");

}

void loop() {
  // BME280を1度だけ測定を行うモードに設定し計測が終わるまで待機
  BME280.writeMode(smForced);
  while (BME280.isMeasuring()) {
    delay(1);
  }

  // BME280から測定値を読み取る
  BME280.readMeasurements();
  temperature = BME280.getTemperature();
  humidity = BME280.getHumidity();
  pressure = BME280.getPressure();

  // 読み取った値をシリアルにプリント
  Serial.print("Temperature: ");
  printFormattedFloat(temperature);
  Serial.println("");

  Serial.print("Humidity: ");
  printFormattedFloat(humidity);
  Serial.println("");

  Serial.print("Pressure: ");
  printFormattedFloat(pressure);
  Serial.println("");
  Serial.println("");

  // Ambientに連携
  ambient.set(1, temperature);
  ambient.set(2, humidity);
  ambient.set(3, pressure);
  ambient.send();

  delay(PERIOD * 1000);
}
  • 라이브러리를 사용하는 경우 h 파일과 cpp 파일을 ino (스케치)와 동일한 디렉토리에 넣으면 괜찮습니다.
  • 넣은 라이브러리는 #include <xxxx.h> 대신 #include "xxxx.h"

    그래프



    Ambient에 제휴하면 이와 같이 그래프화해 줍니다.
    그래프의 종류도 「꺾은 선 그래프」 「막대 그래프」 「산포도」등에서 선택할 수 있습니다.

    온도


    습도


    기압


    참고 URL



    Arduino ESP8266을 사용하여 온도 및 습도를 측정하고 Ambient로 전송하여 그래프화
    htps : // 아비다. 이오/도 cs/에 sp8266/

    BME280 라이브러리
    htps : // 기주 b. 코 m / 에 m 베데다 d

    Ambient 라이브러리
    htps : // 기주 b. 코 m / 타케 히코시 모지마 / 아 m 비엔 t_에 SP8266_ぃb

    I2C
    htps : // 그럼.ぃきぺぢ아. 오 rg / uki / 2C

    I2C 버스 사양 및 사용자 매뉴얼
    h tp // w w. 응 xp. 코 m/도쿠멘 ts/우세 r_마누아 l/우 M10204_그럼. pdf
  • 좋은 웹페이지 즐겨찾기