ESP8266とBME280とOLEDをつないでAmbientにデータ送信

やりたいこと

Arduino IDEの設定

ボードとライブラリの追加

ボード書き込みの設定

&ref(): File not found: "ArduinoIDE_ESP8266.jpg" at page "ESP8266_BME280_OLED_Ambient";

ボード選択はLOLIN(WEMOS)D1 R2 & miniを選択
シリアルポートは自分の環境に合わせ、他はデフォルトでOK

Wemos D1 Miniのピン配列

&ref(): File not found: "esp8266-wemos-d1-mini-pinout.png" at page "ESP8266_BME280_OLED_Ambient";

ハードウエア接続

D1 MiniOLEDMBE280
+3.3VVCCVCC
GNDGNDGND
D1(GP5)SCLSCL
D2(GP4)SDASDA

コード

ボードをWemos D1 miniに指定することで、物理ピン番号の指定が基板に印刷されたD0〜D8で指定可能です。
数字のみで指定する場合はGPIO番号を使用します。

// BME280を使ってESP8266で温度・湿度・気圧を測定し、Ambientにデータを送る
// OLED(32x128)にも表示 更新周期ごとに表示を白黒反転
// Wemos D1 Mini NodeMCU WiFi
// 2022.01.30 J.Sawada JQ1BWT

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Ambient.h>
#include <SSD1306Wire.h>
 
#define PERIOD 300  // 300s = 5min
#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme;  //i2c
WiFiClient client;
Ambient ambient;

unsigned long delayTime;
float temp;
float pressure;
float humid;

const char* ssid = "WiFi-APのSSID";
const char* password = "WiFi-APのパスワード";

unsigned int channelId = 00000; // AmbientのチャネルID
const char* writeKey = "abcdefghijklmnop"; // ライトキー

// SSD1306 OLED (Addr=0x3C, SDA=D2, SCL=D1)
SSD1306Wire  display(0x3c, D2, D1, GEOMETRY_128_32); // I2C Addr, SDA pin, SCL pin

int disp_inv = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("-------------------");
  Serial.println(" BME280 to Ambient");
  Serial.println("2022.01.30 BWT Lab.");
  Serial.println("-------------------");

  //Wire.begin(D2,D1);

  // OLED
  display.init();                             //ディスプレイを初期化
  display.clear();
  display.setBrightness(50);                  // ディマー(0〜100で指定)
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_16);          //フォントを設定 (10/16/24)
  display.drawString(0,0,"BME280 Server");
  display.drawString(0,16,"Device Initialize...");
  display.display();

  delay(1000);

  bool status;
  status = bme.begin(0x76); //小さい紫色のモジュール
  while (!status) {
    Serial.println("BME280 connection eror");
    delay(1000);
  }
  delayTime = 1000;
  WiFi.begin(ssid, password);  //  Wi-Fi APに接続
    while (WiFi.status() != WL_CONNECTED) {   //  Wi-Fi AP接続待ち
        delay(100);
    }

  Serial.print("WiFi connected\r\nIP address: ");
  Serial.println(WiFi.localIP()); 
  ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化

  IPAddress ipadr = WiFi.localIP();
  display.clear();
  display.drawString(0,0,"WiFi Connected!");
  display.drawString(0,16,(String)ipadr[0] + "." + (String)ipadr[1] + "." + (String)ipadr[2] + "." + (String)ipadr[3]);
  display.display();

  delay(1000);
}


void loop() { 
  temp=bme.readTemperature();
  pressure=bme.readPressure() / 100.0F;
  humid=bme.readHumidity();
  Serial.print("温度 ;");
  Serial.print(temp);
  Serial.println(" °C");
   
  Serial.print("気圧 ;");
  Serial.print(pressure);
  Serial.println(" hPa");
  Serial.print("湿度 ;");
  Serial.print(humid);
  Serial.println(" %");
  Serial.println();

  if(disp_inv == 1) {
    disp_inv = 0;
    display.invertDisplay();
  } else {
    disp_inv = 1;
    display.normalDisplay();
  }

  display.clear();
  display.drawString(8,0,(String)temp + "'C  " + (String)humid + "%");
  display.drawString(16,16,(String)pressure + "hPa");
  display.display();
  
  delay(delayTime);
  ambient.set(1, temp); // 温度をデータ1にセット
  ambient.set(2, humid); // 湿度をデータ2にセット
  ambient.set(3, pressure); // 気圧をデータ3にセット

  ambient.send(); // データをAmbientに送信

  delay(PERIOD * 1000);
}

注意事項、メモ


添付ファイル: fileArduinoIDE_ESP8822 20件 [詳細] fileESP-12F.png 144件 [詳細] fileArduinoIDE_ESP8266 18件 [詳細] fileesp8266-wemos-d1-m 16件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-27 (月) 23:39:34