google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

ESP8266からAmbientへデーター登録

 トラ技9月号のESPの特集記事の追試の続き、今回は IoTクラウドサービスの「Ambient」へデーターを登録してみます。トラ技の記事ではP99からP101に書かれている話です。

 使った回路は前回の記事のままです。CDSで周囲の明るさを検出し、その電圧をESPのアナログポートに接続してあるので、そのデーターを自宅のWiFi を経由してAmbient にアップロードすることにしました。

 そのために、トラ技の記事に書かれているプログラム、Example09_humを私の環境用にカストマイズします。なお、トラ技の紙面には全部のプログラムが掲載されていないので、作者の方が作られたサポートページからファイルを入手します。

 以下は修正版のスケッチです。
/*******************************************************************************
Example 09c: 湿度センサ HDC1000 [Ambient対応版]
Copyright (c) 2016 Wataru KUNINO
********************************************************************************
本サンプルで使用するクラウドサービスAmbient用の設定の確認
http://ambidata.io/ch/channels.html
********************************************************************************
自分の環境用にカストマイズ。 by ラジオペンチ 2018/8/18
・UDPアップロード機能を削除。
・CDSで測った明るさデーターをADCで取り込んで60秒間隔でAmbientにアップロード
*/

#include <ESP8266WiFi.h> // ESP8266用ライブラリ
#include <WiFiUdp.h> // UDP通信を行うライブラリ
#include "Ambient.h" // Ambient用のライブラリの組み込み

//ESP-WROOM-02でアナログ入力をするための設定
extern "C" {
#include "user_interface.h"
}

#define PIN_LED 13 // IO 13(5番ピン)にLEDを接続する
#define SSID "xxxxxxxxxxxx" // 無線LANアクセスポイントのSSID
#define PASS "xxxxxxxxxxxx" // パスワード

#define AmbientChannelId yyy // yyy = チャネルID(整数)
#define AmbientWriteKey "xxxxxxxxxxxxxxxx" // ライトキー(16桁の16進数)
#define SLEEP_P 60*1000000 // スリープ時間 60秒
Ambient ambient;
WiFiClient client;

void setup() { // 起動時に一度だけ実行する関数
int waiting = 0; // アクセスポイント接続待ち用

Serial.begin(115200); // 動作確認のためのシリアル出力開始
Serial.println("Example 09C HUM->Amb"); // 「Example 09」をシリアル出力表示
WiFi.mode(WIFI_STA); // 無線LANをSTAモードに設定

// 固定IPアドレスの設定 IP Address, Gate way, Subnet mask の順に指定
WiFi.config(IPAddress(192, 168, 0, 27), IPAddress(192, 168, 0, 1), IPAddress(255, 255, 255, 0));

WiFi.begin(SSID, PASS); // 無線LANアクセスポイントへ接続
while (WiFi.status() != WL_CONNECTED) { // 接続に成功するまで待つ
delay(100); // 待ち時間処理
waiting++; // 待ち時間カウンタを1加算する
if (waiting % 10 == 0)Serial.print('.'); // 進捗表示
if (waiting > 300) sleep(); // 300回(30秒)を過ぎたらスリープ
}
Serial.println(WiFi.localIP()); // 本機のIPアドレスをシリアル出力
ambient.begin(AmbientChannelId, AmbientWriteKey, &client); // Ambient開始
}

void loop() {
float cdsVolt; // CDS電圧の測定値
char s[6]; // 文字列操作バッファ

digitalWrite(PIN_LED, HIGH); // LED点灯
cdsVolt = (float) system_adc_read(); // CDSの電圧をアナログポートから読む
dtostrf(cdsVolt, 6, 1, s); // 温度を文字列に変換
ambient.set(1, s); // Ambient(データ1)へCDSの電圧を送信
ambient.send(); // Ambient送信の終了(実際に送信する)
Serial.println(cdsVolt);
sleep();
}

void sleep() {
delay(200); // 送信待ち時間
ESP.deepSleep(SLEEP_P, WAKE_RF_DEFAULT); // スリープモードへ移行する
while (1) { // 繰り返し処理
delay(100); // 100msの待ち時間処理
} // 繰り返し中にスリープへ移行
}
 (お願い:こういう形で改変したプログラムを開示することに問題があれば連絡下さい)

▼使用するラリブラリ(赤枠内)も同じフォルダに置いてコンパイルします。
Arduinoのスケッチ

 筆者の方のサポートページのフォルダの構造をそのまま使い、メインのスケッチ名を適当に修正して使います。この例では、_20160823_example09c_humX.inoとしました。なおフォルダ名はスケッチと同じにします。

 これを動かすとAmbientにデーターが登録されるようになりました。

▼Ambientに登録したデーター例
Ambientへのアップロード結果
 このグラフは公開しているので、今のところ下記URLから参照が可能です。但し、いつ止まるか判りません、汗;
 https://ambidata.io/ch/channel.html?id=200

◆まとめ
・とても簡単にデーターを登録することが出来ました。関係している皆さまに感謝します。但し利用に当たってはAmbientのページに書かれている注意事項を理解しておく必要があります。つまり、いつ止まってもデーターが消えても無保証、何があっても文句は言わないということです。

・Ambientのページは https で作られているようですが、アクセスするブラウザによっては証明書がおかしいと言われることがありました。使ったブラウザは Windows10 の IE11, Chrome 52.0, またAndroid 4.4 の Chromeなどです。あと、ブラウザによってグラフの細かい表現が変わりますが、これは仕方ないでしょう。

・Ambientと同じようなサービスとして xively personalThingsSpeakが以前からあるのですが、それらについて記事中で一切触れられていないのはちょっと残念です。とは言っても、こうやって Ambient を紹介していただいたことで選択肢が増えるのは大歓迎です。
カレンダー
07 | 2016/08 | 09
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード