ESP8266とBME280とOLEDをつないでAmbientにデータ送信
&ref(): File not found: "ArduinoIDE_ESP8266.jpg" at page "ESP8266_BME280_OLED_Ambient";
&ref(): File not found: "esp8266-wemos-d1-mini-pinout.png" at page "ESP8266_BME280_OLED_Ambient";
| D1 Mini | OLED | MBE280 |
| +3.3V | VCC | VCC |
| GND | GND | GND |
| D1(GP5) | SCL | SCL |
| D2(GP4) | SDA | SDA |
// 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, 2, 1, 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(2,1);
// 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);
}