太陽フレアの影響が実際にどのくらいあるのか、部屋に設置しているガイガーカウンターで計測することができるのか確認するため、IoTプラットフォームサービスのthinger.ioを使ってガイガーカウンターとベランダの温湿度計のデータをビジュアルに表示させてシェアできるようにしてみました。
このURLからダッシュボードをシェアした画面を表示することができます。
で、結果ですが...下の図が9月8日の12:00から翌日の12:00までのガイガーカウンターの計測図です。
普段と全然変わっていませんでした!
thinger.io
話を膨らませることができない結果になってしまったので、使ったサービスやプログラムについてちょっと書いておきたいと思います。
まず、お初のクラウドサービスthinger.ioについて。すごーく簡単に言うと、これまで何回か使ったBlynkのWeb版です。今回はガイガーカウンターのグラフをシェアしたかったため、溜め込んだデータを表示できてそのままデータが追加されるグラフが用意されていたthihger.ioを選びました。
ITサービスでは珍しくスペインの会社で価格がユーロ!だったりしますが、しっかり無料枠も用意されています。
アカウントを作ってログインすると、こんな画面が表示されます。画面はシェア用のダッシュボードを作った状態です。接続しているデバイスが世界地図に表示されるところがワールドワイド!っと一瞬感心しますが、すぐにやり過ぎなことに気付いてしまいます...。メニューの一番下に”寄付”ボタンがあるのも「お金を払って使っている人がいないんだろうか?」という不安感を抱かせる仕様になっています...。
デバイスの登録
ダッシュボードで最初に行うのがデバイスの登録です。Devicesメニュークリックして緑色の「Add Device」を押し、次のような感じで登録します。
3番目の「Device credentials」は鍵みたいなもので、その下にある「Generate Random Credential」ボタンを押すとランダムな値が記入されます。
シェアしているダッシュボードで使用しているデバイスは、ガイガーカウンターとベランダの温湿度計の2つです。温湿度計は1時間に1度データを送信するとき以外は深い眠りについているため、大抵は”Disconnected"と表示されます。
データバケツの登録
水をバケツに溜めるように、溜める必要のあるデータは専用のバケツを用意します。Data Bucketsメニューをクリックして緑色の「Add Bucket」を押し、次のような感じで登録します。
ここで、このサービスの最大の問題点を意識することになります。
BlynkやMilkcocoaなどぼくが試した様々なサービスではデバイスからのデータの送信を明示的に指定できたのに対し、thinger.ioではデバイス側でデータの送信タイミングを明示できないんです。言い換えると、thinger.ioではデータを送信するコードを書きません。
詳しくはプログラムの説明でしますが、データの送信は上図のRefresh Modeに依存するようになっていて、無料プランでは1分未満を指定できないんです。しかも厄介なことに、Refresh Modeの時間を待ってから最初のデータを送信するんです。すなわち、無料プランではデバイスが動作したと認識されてから1分後にしかデータを送ることができないんです!なんじゃこりゃ!
まぁ、とにかく、シェアしているダッシュボードで使用しているバケツは下図の4つです。
ダッシュボードの登録
Dashboardsメニューをクリックして緑色の「Add Dashboard」を押し、次のような感じで登録します。
Dashboardを登録したらその中にWidgetを配置します。温度のGauege WidgetとガイガーカウンターのTime Series Chartはこんな感じで登録しました。
温度のGauge Widgetの設定
ガイガーカウンターcpm (min)のTime Series Chartの設定
ダッシュボードのシェア
ダッシュボードの修正画面にある水色の「Settings」ボタンを押してShareを有効にすると、Share URLでダッシュボードを不特定多数の人とシェアすることができます。
Access Tokensの設定
Access Tokensメニューをクリックするとシェアしたダッシュボードが登録されているのでクリックします。
ダッシュボードに使用したデバイスは自動で登録されますが、バケツは手動で登録しないとシェアしたダッシュボードにデータを表示できません。ここでは無制限にバケツへの許可を与えています。
プログラム
Geiger counter
「昔作ったガイガーカウンターをESP8266とBlynkでIoT化する」のプログラムにThinger.io Arduino Libraryを追加して、Blynkとthingerの両方にデータを送信するようにしました。
ライブラリマネージャで「thinger」と入力するとライブラリを追加できます。
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を使うようなプログラムとは合わないんだと思います。
おわり