前回はM5StickCとロードセルで「はかり」が完成しました。
今回は「はかり」で測定した値を、時系列のグラフとして見れるようにしたいと思います。
クラウドを使う
測定結果をアップロードし続けることで、それらのデータを可視化して表示してくれる、無料のクラウドサービスがあります。MathWorksのThingSpeakや、日本の会社のAmbientなどです。どちらも無料で利用できますが、保存できるデータの数に制限があります。ちょっと調べてみました。
ThinkSpeakの無料版
ThingSpeak™ Licensing FAQのページによると
・最大4チャネル
・1年間に300万メッセージ/年 or 8200メッセージ/日
・メッセージの送信間隔は最低15秒
Ambient(無料)
Ambient 諸元/制限のページによると
・最大8チャネル
・8000件/日
・メッセージの送信間隔は最低5秒
どちらも、メッセージ数は同じくらいですが、Ambientの方が8チャネル保存でき、送信間隔も短いですね。チャネルはデータを保存する箱のようなもので、用途ごとに区別してデータを保存することができます。
あと大きいのはAmbientは日本語でokなんですね。というわけでAmbientを使ってみたいと思います。
Ambientのセットアップ
ユーザー登録
Ambientのホームページの右上に[ユーザー登録(無料)]のボタンがあるので、それをクリック。
メールアドレスと、好きなパスワードを入れて[ユーザー登録(無料)]ボタンをクリックします。すると、設定したメール宛に「Ambient 新規登録確認メール」というメールが届きます。
が、私のgmailの場合は、迷惑メールに入ってしまい、しばらく気づきませんでした。すぐに届ていたようなので、しばらくしても届かなければ、迷惑メールフォルダを確認してみてください。
届いたメールに記載のURLをクリックすると、登録が完了します。
チャネルを作る
[My チャネル]で[チャネルを作る]をクリックすると、チャネルが1つ追加されます。これでデータを入れる箱ができました。
ここに表示されている、ユーザーキーと、ライトキーを使って、M5StickCからAmbientにデータを送ります。
M5StickCのプログラム
Ambientのライブラリを追加
公式のこのページにライブラリーのインポートの方法が書いてあります。公式のGitHubからCloneのzipファイルをダウンロードして、インポートします。
私の場合はインポートせずに、srcフォルダの中の「Ambient.cpp」「Ambient.h」のファイルを、Arduinoのプロジェクトフォルダの中に入れて使うことにしました。
プログラムの作り方
これが、とてつもなく簡単なんです。
... #include "Ambient.h"//ヘッダファイルをインクルード ... Ambient ambient; //Ambientクラスを生成 void setup() { ... ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化 ... } void loop() { ... ambient.set(1, Value); //データ列1にValueの値をセット ambient.send(); //Ambientにデータを送信 ... }
5行追加するだけです。
- ヘッダファイルを読み込み
#include "Ambient.h" - クラスを生成
Ambient ambient; - 初期化
ambient.begin(channelId, writeKey, &client); - データをセット
ambient.set(1, Value); - Ambientへ送信
ambient.send();
これだけで、Ambientにデータを送信できます。3.の初期化時に、チャネルを作ったときに表示されていた、ユーザーキーと、ライトキーを指定します。
Ambientに測定結果を送信するプログラム
以前に作った「はかり」としてのプログラムに、Wifiにつなぐためのコードと、Ambientにデータを送信するコードを追加してみました。
プログラムはこちら→m5stick_ambientScaleからダウンロードできます。
//Wifi const char* WifiSSID = "SSID"; //アクセスポイントのSSID const char* WifiPassword = "POSSWORD"; //アクセスポイントのパスワード WiFiClient client; //Ambient unsigned int channelId = CHANNEL_ID; // AmbientのチャネルID const char* writeKey = "WRITE_KEY"; // ライトキー Ambient ambient;
20,21行目のWiFiのアクセスポイントの設定と、25,26行目のAmbientのチャネルID、ライトキーをご自身の環境に合わせて設定していただければ、他は変更する必要はありません。
これで、60秒に1回、Ambientに測定データを送信するプログラムができました。
エヴァちゃんで実験
愛犬「エヴァ」ちゃんのお気に入りの座布団の下に、「Ambient対応はかり」が入っています。座布団に乗っていれば、数字が上がるはずです。
本来の体重は25kgぐらいだったと思いますが、座布団があり全体重が「はかり」に乗るわけではないので、重さは1kgちょっとですね。
朝からお昼まで記録してみました。
だいたい1時間に1度、重さが0になっているので、寝ている時でも、1時間ごとに起きて水を飲むか、体を伸ばしているようです。
また、20分から30分間隔で重さが階段状に変わることから、それくらいの時間間隔で体勢変えているようです。
人用に離床センサを作りましたが、ペットの離床もこれでわかりますね。
2019.10.9 追加 つづきはこちらです
追加終わり
コメント
はじめまして
とても参考になるサイトで助かります。
ありがとうございます。
Ambientで可視化まで出来ました!
Azureで同じことをしたいのですが、可能でしょうか?
自分なりにコード書き換えてみたのですが、エラーになり進みません。
ご教示いただけないでしょうか?
具体的なコードを示していただけますと幸甚です。
ディアさん
情報がお役に立てて嬉しいです。
Azureに関して知っていないため、どうプログラムを改造するのかわかりません。
ごめんなさい。
ありがとうございます。
承知いたしました。これからもこちらのサイトには足を運ばせていただきます。
ボードは何を選択してますか?
また、
#include
のプログラムでエラーがおきているのですがなにか設定の問題なのでしょうか?
このプログラムに限らず設定の「ボード」には書き込みたいターゲットのボード名を指定するのが決まりごとになっています。
記事のプログラムはM5Stick-Cを想定しています。
私の環境では正常にコンパイルできましたよ。
環境によってエラーが起きてしまうと難しいですね
無線による測定方法については可能なのでしょうか?
私は使ったことはありませんが、ESP Nowという機能を使うと、他のM5Stick-Cなどに比較的簡単にデータを送信することができるようです。
ESP Nowで調べてみてはいかがでしょうか。
ありがとうございます。
調べてみます。
ambientscaleのプログラムのファイルの中にMACOSXというファイルがあるのですがどちらを使用したらよろしいのでしょうか?
MACOSXフォルダはwindowsでは不要なので、削除してかまいません。
色々調べたのですが、やはりコンパイルエラーが解消されませんでした...
「ボードM5Stick-Cに対するコンパイル時にエラーが発生しました」を消すことができません
このエラーメッセージに心を折られそうです笑
ライブラリマネージャーからM5Stick-Cのライブラリはインストールしましたか?
[ツール]→[ライブラリを管理]→「M5Stick-C」で検索しインストール
インストールしてます
何行目でどんなエラーが発生しているのか分からないので、こちらでは解決策が検討することができません。
別のパソコンで環境をセットアップして、プログラムをコンパイルしてみてはいかがでしょうか。
どうやらcppファイルなどがある場所に関係ないファイルがあることが問題だったようです。
ロードセルで計測した数値を表示させる方法またはエクセルなどに表示する方法はわかりますか?
追伸 あけましておめでとうございます
あけましておめでとうございます。
今年もkohacraft.comをどうぞよろしくお願いします。
コンパイルできてよかったですね。
ambientに送信すればグラフとして表示されますよ。
ambientに記録されたデータをダウンロードすればエクセルで開くこともできます。
ambientを使用しないとやはり不可能なのでしょうか?