ESP8266とBME280を使って温度・湿度・気圧の値の送信に挑戦しました。
Bylnk少し使ったことがあったのですが、アプリがBylnk→Bylnk IOTに変更されており、旧版は登録済みの人のみ使える状態?のところをpasswordを忘れてしまい使えず、新版のBylnk IOTはこれといった情報を入手できずのため、今回は他の方法で挑戦することにしました。
そして、調べていくうちに候補として考えたのは下記の通りです。
・Ambient
・Datadog
・ThingSpeak
・IBM Watson IoT Platform
このうち、設定しやすそうなAmbientに挑戦してみました。設定するにあたり参考にしたページは下記の通りです。
温度、湿度、気圧を測定し、記録する: https://pages.switch-science.com/letsiot/temphumidpress/
空気品質を測定し、記録する: http://pages.switch-science.com/letsiot/airquality/
なお、ESP8266とBME280を動かすまでの過程は下記をご確認ください。
温度、湿度、気圧を測定し、記録する方のページを確認するとSPI接続となっているみたいなので、ESP8266とBME280をSPI接続に変更してスケッチを書き込みを行ったのですが、SPI接続にしたとたんありとあらゆるスケッチでエラーが起きるようになったため、空気品質を測定し、記録するのページを参考に前回と同様にI2C接続で行っていきます。
まず、Ambientの設定を行っていきます。
最初に下記リンクからAmbientのユーザー登録を行います。
ユーザー登録してログインすると、チャネル一覧ページが現れます。
チャネルを作るボタンを押すとチャネルが生成され、 作られたチャネルの情報が表示されます。マイコンからデータを送信するときは、チャネルIDとライトキーを指定しますので、作られたチャネルのIDとライトキーを控えておきます。
登録ができたら、Arduino IDEにAmbientのライブラリをインストールします。
まず、下記のリンクに行き、右上のClone >Download ZIPをクリックして、ZIPファイルをパソコンにダウンロードします。
Zipファイルをダウンロードしたら、Arduino IDEを起動して、メニューバーのスケッチ >ライブラリーをインクルード > .Zipファイル形式のライブラリをインストール…を選択します。
さらに、もうひとつ下記のリンクに行き、右上のClone >Download ZIPをクリックして、ZIPファイルをパソコンにダウンロードします。なお、こちらは空気品質を測定し、記録する用のライブラリになります。
こちらについてはZipファイルのインクルードが出来なかったので、ZipファイルにあるAmbient_CCS811_BME280フォルダを、Arduinoのライブラリが保管されているフォルダへ直接コピペします。
ライブラリが保管されているフォルダ
スケッチは下記リンクのスケッチ例から、空気品質センサモジュールの内容を削除して使用しました。
このとき、ssid・password・AmbientのチャネルID・writeKeyは書き換えてください。
また、#define SDA 〇と #define SCL 〇の番号をWemos D1 mini(ESP8266)に合わせて変更しています。
(ただ、下記にある通りシリアルモニタの方はうまくいかなかったので、過不足あるかも。)
スケッチの変更が終わったら、 →ボタンをクリックしてスケッチを転送します。
書き換えたスケッチはこんな感じです。
/*
* BME280で温度、湿度、気圧を測定
*/
#include <ESP8266WiFi.h>
#include <Wire.h>
#include "BME280.h"
#include "Ambient.h"
extern "C" {
#include "user_interface.h"
}
#define PERIOD 60
// ESP8266のピンの定義
#define SDA 4
#define SCL 5
BME280 bme280;
WiFiClient client;
Ambient ambient;
const char* ssid = "...ssid...";
const char* password = "...password...";
unsigned int channelId = 100; // AmbientのチャネルID
const char* writeKey = "...writeKey..."; // ライトキー
void setup()
{
wifi_set_sleep_type(LIGHT_SLEEP_T);
Serial.begin(115200);
delay(100);
Serial.println("\r\nAir Qualty Sensor.");
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());
Wire.begin(SDA, SCL); // I2C通信を初期化
bme280.begin(); // BME280の初期化
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}
void loop()
{
int t = millis();
float temp, humid, pressure;
// BME280で温度、湿度、気圧を測定する
temp = (float)bme280.readTemperature();
humid = (float)bme280.readHumidity();
pressure = (float)bme280.readPressure();
Serial.print(", temp: ");
Serial.print(temp);
Serial.print(", humid: ");
Serial.print(humid);
Serial.print(", pressure: ");
Serial.println(pressure);
// 温度、湿度、気圧の値をAmbientに送信する
ambient.set(1, String(temp).c_str());
ambient.set(2, String(humid).c_str());
ambient.set(3, String(pressure).c_str());
ambient.send();
t = millis() - t;
t = (t < PERIOD * 1000) ? (PERIOD * 1000 - t) : 1;
delay(t);
}
実行結果ですが、シリアルモニタに値は表示できませんでしたが、Ambientへの送信はうまくいきました。表示結果はこんな感じです。
※まだAmbientの画面の設定初期設定のままになっています。
シリアルモニタの件は時間があるときに確認してみたいと思います。
Коментарі