ESP8266_BME280_OLED_Ambient
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&size(24){ESP8266とBME280とOLEDをつないでAmbientにデータ...
#contents
* やりたいこと [#v1e09ae2]
- WiFiのみのESP8266モジュールを使う~
Wemos D1 Mini NodeMCUのコピー品(1個400-500円)
- センサーはBME280で温度・湿度・気圧を測定
- 測定値をOLED(32x128の細いやつ)に表示
- Ambientにデータフィードしてグラフ化
* Arduino IDEの設定 [#sdcd5e2b]
** ボードとライブラリの追加 [#n469a96c]
- ボードマネージャにESP8266モジュールを追加する
-- ファイル>環境設定>追加のボードマネージャのURLの右端...
http://arduino.esp8266.com/stable/package_esp8266com_inde...
-- ツール>ボード>ボードマネージャを開いて、ESP8266をイ...
- ライブラリを追加(ツール>ライブラリを管理)
-- Adafruit BME280 Library
-- ESP8266 and ESP32 OLED driver for SSD1306 displays
-- Ambient ESP32 ESP8622 lib
** ボード書き込みの設定 [#gfd5c9c6]
&ref(ArduinoIDE_ESP8266.jpg);
ボード選択はLOLIN(WEMOS)D1 R2 & miniを選択~
シリアルポートは自分の環境に合わせ、他はデフォルトでOK
* Wemos D1 Miniのピン配列 [#g8d1d84a]
&ref(esp8266-wemos-d1-mini-pinout.png);
* ハードウエア接続 [#rfd25824]
|D1 Mini|OLED|MBE280|
|+3.3V |VCC |VCC |
|GND |GND |GND |
|D1(GP5)|SCL |SCL |
|D2(GP4)|SDA |SDA |
* コード [#s4cf029d]
ボードをWemos D1 miniに指定することで、物理ピン番号の指定...
数字のみで指定する場合はGPIO番号を使用します。
// BME280を使ってESP8266で温度・湿度・気圧を測定し、Ambi...
// 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); // ...
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); // ディマ...
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16); //フォント...
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 ...
delay(100);
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
ambient.begin(channelId, writeKey, &client); // チャネ...
IPAddress ipadr = WiFi.localIP();
display.clear();
display.drawString(0,0,"WiFi Connected!");
display.drawString(0,16,(String)ipadr[0] + "." + (Stri...
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...
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);
}
* 注意事項、メモ [#j3349675]
- 購入したモジュール~
&ref(ESP-12F.png);~
https://www.amazon.co.jp/gp/product/B07S6G6TWJ/
- 技適が取れていない~
国内では電波法の技適が取れていないので、そのままではWiFi...
「技適未取得機器を用いた実験等の特例制度」を使用して、簡...
https://www.tele.soumu.go.jp/j/sys/others/exp-sp/
- シリアルモニターが化けます~
プログラム起動後は正常に表示されますが、電源投入直後の部...
シリアルの速度を74880bpsにすると文字化けは解消します。~
これはCH340Gが使用されているせいかもしれません。電源投入...
起動時の文字化けが気になる人はスケッチの一部を修正すると...
void setup() {
//Serial.begin(115200);
Serial.begin(74880);
- シルク印刷とGPIO番号の関係
|Pin |Function |ESP-8266 Pin |h
|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 |
終了行:
&size(24){ESP8266とBME280とOLEDをつないでAmbientにデータ...
#contents
* やりたいこと [#v1e09ae2]
- WiFiのみのESP8266モジュールを使う~
Wemos D1 Mini NodeMCUのコピー品(1個400-500円)
- センサーはBME280で温度・湿度・気圧を測定
- 測定値をOLED(32x128の細いやつ)に表示
- Ambientにデータフィードしてグラフ化
* Arduino IDEの設定 [#sdcd5e2b]
** ボードとライブラリの追加 [#n469a96c]
- ボードマネージャにESP8266モジュールを追加する
-- ファイル>環境設定>追加のボードマネージャのURLの右端...
http://arduino.esp8266.com/stable/package_esp8266com_inde...
-- ツール>ボード>ボードマネージャを開いて、ESP8266をイ...
- ライブラリを追加(ツール>ライブラリを管理)
-- Adafruit BME280 Library
-- ESP8266 and ESP32 OLED driver for SSD1306 displays
-- Ambient ESP32 ESP8622 lib
** ボード書き込みの設定 [#gfd5c9c6]
&ref(ArduinoIDE_ESP8266.jpg);
ボード選択はLOLIN(WEMOS)D1 R2 & miniを選択~
シリアルポートは自分の環境に合わせ、他はデフォルトでOK
* Wemos D1 Miniのピン配列 [#g8d1d84a]
&ref(esp8266-wemos-d1-mini-pinout.png);
* ハードウエア接続 [#rfd25824]
|D1 Mini|OLED|MBE280|
|+3.3V |VCC |VCC |
|GND |GND |GND |
|D1(GP5)|SCL |SCL |
|D2(GP4)|SDA |SDA |
* コード [#s4cf029d]
ボードをWemos D1 miniに指定することで、物理ピン番号の指定...
数字のみで指定する場合はGPIO番号を使用します。
// BME280を使ってESP8266で温度・湿度・気圧を測定し、Ambi...
// 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); // ...
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); // ディマ...
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16); //フォント...
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 ...
delay(100);
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
ambient.begin(channelId, writeKey, &client); // チャネ...
IPAddress ipadr = WiFi.localIP();
display.clear();
display.drawString(0,0,"WiFi Connected!");
display.drawString(0,16,(String)ipadr[0] + "." + (Stri...
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...
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);
}
* 注意事項、メモ [#j3349675]
- 購入したモジュール~
&ref(ESP-12F.png);~
https://www.amazon.co.jp/gp/product/B07S6G6TWJ/
- 技適が取れていない~
国内では電波法の技適が取れていないので、そのままではWiFi...
「技適未取得機器を用いた実験等の特例制度」を使用して、簡...
https://www.tele.soumu.go.jp/j/sys/others/exp-sp/
- シリアルモニターが化けます~
プログラム起動後は正常に表示されますが、電源投入直後の部...
シリアルの速度を74880bpsにすると文字化けは解消します。~
これはCH340Gが使用されているせいかもしれません。電源投入...
起動時の文字化けが気になる人はスケッチの一部を修正すると...
void setup() {
//Serial.begin(115200);
Serial.begin(74880);
- シルク印刷とGPIO番号の関係
|Pin |Function |ESP-8266 Pin |h
|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 |
ページ名: