知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

太陽フレアの影響を確認するため、IoTダッシュボードを活用してみた

太陽フレアの影響が実際にどのくらいあるのか、部屋に設置しているガイガーカウンターで計測することができるのか確認するため、IoTプラットフォームサービスのthinger.ioを使ってガイガーカウンターとベランダの温湿度計のデータをビジュアルに表示させてシェアできるようにしてみました。

f:id:IntellectualCuriosity:20170908150503p:plain

シェア画面のキャプチャ

このURLからダッシュボードをシェアした画面を表示することができます。

 

で、結果ですが...下の図が9月8日の12:00から翌日の12:00までのガイガーカウンターの計測図です。

f:id:IntellectualCuriosity:20170909154557p:plain

普段と全然変わっていませんでした!

 

thinger.io

話を膨らませることができない結果になってしまったので、使ったサービスやプログラムについてちょっと書いておきたいと思います。

まず、お初のクラウドサービスthinger.ioについて。すごーく簡単に言うと、これまで何回か使ったBlynkのWeb版です。今回はガイガーカウンターのグラフをシェアしたかったため、溜め込んだデータを表示できてそのままデータが追加されるグラフが用意されていたthihger.ioを選びました。

ITサービスでは珍しくスペインの会社で価格がユーロ!だったりしますが、しっかり無料枠も用意されています。

f:id:IntellectualCuriosity:20170912004456p:plain

アカウントを作ってログインすると、こんな画面が表示されます。画面はシェア用のダッシュボードを作った状態です。接続しているデバイスが世界地図に表示されるところがワールドワイド!っと一瞬感心しますが、すぐにやり過ぎなことに気付いてしまいます...。メニューの一番下に”寄付”ボタンがあるのも「お金を払って使っている人がいないんだろうか?」という不安感を抱かせる仕様になっています...。

f:id:IntellectualCuriosity:20170912005938p:plain

バイスの登録

ダッシュボードで最初に行うのがデバイスの登録です。Devicesメニュークリックして緑色の「Add Device」を押し、次のような感じで登録します。

f:id:IntellectualCuriosity:20170912034730p:plain

3番目の「Device credentials」は鍵みたいなもので、その下にある「Generate Random Credential」ボタンを押すとランダムな値が記入されます。

シェアしているダッシュボードで使用しているデバイスは、ガイガーカウンターとベランダの温湿度計の2つです。温湿度計は1時間に1度データを送信するとき以外は深い眠りについているため、大抵は”Disconnected"と表示されます。

f:id:IntellectualCuriosity:20170912035232p:plain

データバケツの登録

水をバケツに溜めるように、溜める必要のあるデータは専用のバケツを用意します。Data Bucketsメニューをクリックして緑色の「Add Bucket」を押し、次のような感じで登録します。

f:id:IntellectualCuriosity:20170912040731p:plain

ここで、このサービスの最大の問題点を意識することになります。

BlynkやMilkcocoaなどぼくが試した様々なサービスではデバイスからのデータの送信を明示的に指定できたのに対し、thinger.ioではデバイス側でデータの送信タイミングを明示できないんです。言い換えると、thinger.ioではデータを送信するコードを書きません。

詳しくはプログラムの説明でしますが、データの送信は上図のRefresh Modeに依存するようになっていて、無料プランでは1分未満を指定できないんです。しかも厄介なことに、Refresh Modeの時間を待ってから最初のデータを送信するんです。すなわち、無料プランではデバイスが動作したと認識されてから1分後にしかデータを送ることができないんです!なんじゃこりゃ!

まぁ、とにかく、シェアしているダッシュボードで使用しているバケツは下図の4つです。

f:id:IntellectualCuriosity:20170912043206p:plain

ダッシュボードの登録

Dashboardsメニューをクリックして緑色の「Add Dashboard」を押し、次のような感じで登録します。

f:id:IntellectualCuriosity:20170912050941p:plain

Dashboardを登録したらその中にWidgetを配置します。温度のGauege WidgetガイガーカウンターのTime Series Chartはこんな感じで登録しました。

温度のGauge Widgetの設定

f:id:IntellectualCuriosity:20170912051439p:plain

ガイガーカウンターcpm (min)のTime Series Chartの設定

f:id:IntellectualCuriosity:20170912051831p:plain

ダッシュボードのシェア

ダッシュボードの修正画面にある水色の「Settings」ボタンを押してShareを有効にすると、Share URLでダッシュボードを不特定多数の人とシェアすることができます。

f:id:IntellectualCuriosity:20170912053306p:plain

Access Tokensの設定

Access Tokensメニューをクリックするとシェアしたダッシュボードが登録されているのでクリックします。

f:id:IntellectualCuriosity:20170912053954p:plain

ダッシュボードに使用したデバイスは自動で登録されますが、バケツは手動で登録しないとシェアしたダッシュボードにデータを表示できません。ここでは無制限にバケツへの許可を与えています。

f:id:IntellectualCuriosity:20170912054412p:plain

 

プログラム

Geiger counter

昔作ったガイガーカウンターをESP8266とBlynkでIoT化する」のプログラムにThinger.io Arduino Libraryを追加して、Blynkとthingerの両方にデータを送信するようにしました。

ライブラリマネージャで「thinger」と入力するとライブラリを追加できます。

f:id:IntellectualCuriosity:20170912182426p:plain

thingerの基本コードは以下で、Blynkコードの後に付け加えています。

#include <ThingerWifi.h>

ThingerWifi thing("username", "deviceId", "deviceCredential");

void setup() {
  thing.add_wifi("wifi_ssid", "wifi_password");
}

void loop() {
  thing.handle();
}

で、肝心のデータの送信ですが、thingerの場合はsetup()に送りたい値を格納しているグローバル変数とデバイスのリソース名の関連付けだけを記述します。

thing["min_count"] >> outputValue(send_min_count);
thing["hour_count"] >> outputValue(send_hour_count);

min_countとhour_countがGeigerデバイスのリソースで、send_min_countとsend_hour_countがグローバル変数です。

データの送信はloop()のthing.handle()が勝手に行ってしまうので、自分でデータ送信のタイミングを制御することができないんです。思想の違いなんでしょうね。

 

DHT11 x Milkcocoa

温度と湿度は「WIO NODEとDHT11とバッテリーでNTPとDeep Sleepを駆使しMilkcocoaを経由して外の温度と湿度をWebページに表示する」のプログラムにThinger.ioライブラリを追加して、Milkcocoaとthingerの両方にデータを送信するようにしました。

ここで、データ送信のタイミングを制御できないことが問題になります。

このプログラムは温度と湿度のデータを送信したらDeep Sleepに入るようにしているので、loop()は1度しか実行されません。しかも、プログラムの実行時間は1分もかからないため、単純に基本コードの通りloop()にthing.handle()を書いただけではデータが送られないんです!

仕方なく、Deep Sleepに入る前に1分待って温度と湿度のデータが送られるように2つthing.handle()を実行するようにしました。

delay(60000);
thing.handle();
thing.handle();

thingerはDeep Sleepを使うようなプログラムとは合わないんだと思います。

 

おわり