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); }