ESP8266とBME280とOLEDをつないでAmbientにデータ送信
&ref(): File not found: "ArduinoIDE_ESP8266.jpg" at page "ESP8266_BME280_OLED_Ambient";
ボード選択はLOLIN(WEMOS)D1 R2 & miniを選択
シリアルポートは自分の環境に合わせ、他はデフォルトでOK
&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 |
ボードを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); }
void setup() { //Serial.begin(115200); Serial.begin(74880);
Pin | Function | ESP-8266 Pin |
TX | TXD | TXD |
RX | RXD | RXD |
A0 | Analog input, max 3.3V input | A0 |
D0 | IO | GPIO16 |
D1 | IO, SCL | GPIO5 |
D2 | IO, SDA | GPIO4 |
D3 | IO, 10k Pull-up | GPIO0 |
D4 | IO, 10k Pull-up, BUILTIN_LED | GPIO2 |
D5 | IO, SCK | GPIO14 |
D6 | IO, MISO | GPIO12 |
D7 | IO, MOSI | GPIO13 |
D8 | IO, 10k Pull-down, SS | GPIO15 |
G | Ground | GND |
5V | 5V | - |
3V3 | 3.3V | 3.3V |
RST | Reset | RST |