obniz + Machinist でラクラク IoT センサーロガー:スマホでも開発可能!おうち IoT
obniz でラクラク IoT センサーロガーを無料で維持したい!
前回の記事のように、Google Cloud Functions で obniz を 1分おきに動かして、センサーの値を記録していました。しかし、Google スプレッドシートに記録していたため、データが溜まってくるとシート自体を開くにも重すぎて開けなくなってきてしまいました。
そこで、IoT 向けのデータ保存サービスを試してみたいと思っていたのですが、AWS IoT など少額かもしれませんが維持費がかかるため、とりあえずクレジットカード登録不要で無料プランのある、IIJ の Machinist を使用してみました。
ハードウェアとインターネットが繋がる IoT 開発では、複数のプログラムが必要になることが多いですが、今回の方法では
- プログラムはたった1枚のHTML
- 環境構築不要・スマホでも開発可能
- 複雑な設定なし
- クラウドサービス月額費用無料
で IoT センサーロガーを開発することができます!!
obniz とは
obniz(オブナイズ)は日本の CambrianRobotics 社が開発したマイコンボードで、Wi-Fi に接続してインターネット経由で操作します。簡単に Wi-Fi に繋がり、ファームウェアの書き込み不要で API 経由で操作するので、インターネットと連携したハードウェアをサクッと作れるのが特徴です。
Machinist の料金プラン
執筆時点で Machinist の料金プランは以下の通りでした。
フリープランでは1ヶ月以上前のデータは消えてしまいますが、とりあえずラクに維持してみたいのでフリープランで試してみます。
Machinist は複雑な設定も不要で始められる
Getting Started - Machinist の通り、必要な作業はたったこれだけでした。
- メールアドレスとパスワードを入力して新規登録
- 届いたメールから本登録用リンクをクリック
- ログインしてアカウント設定からAPIキーをメモ
obniz から Machinist に送信するプログラム
HTMLが開かれる、またはサーバーレスイベントとして実行されるたびに、obniz に繋いだ BME280 (温湿度・気圧センサ)の値を Machinist にアップロードするプログラムを作成しました。
obniz 開発者コンソールのリポジトリにてHTMLを新規作成し、以下のコードをコピー&ペーストします。
以下のコードのうち、書き換える部分は以下のとおりです。
- obniz ID
- Machinistのアカウント設定からコピーしたAPIキー
- BME280 の配線の定義:BME280 - obniz パーツライブラリに従う (他のセンサを使用する場合は、obniz パーツライブラリに従い配線の定義とセンサ読み取り・送信部分を書き換える)
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/[email protected]/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h1>obniz Sensor Logger</h1>
<button id="post">送信</button>
<script>
let obniz = new Obniz("XXXX-XXXX");//obnizのIDを指定してください
const url = "https://gw.machinist.iij.jp/endpoint";
const token = "YOUR_API_KEY";//MachinistのAPI KEYを指定してください
let sensor;
let param = {
"agent": "Home",
"metrics": []
};
function addMetrics(param, name, value) {
param.metrics.push({
"name": name,
"namespace": "Environment Sensor",
"data_point": {
"value": value,
}
});
}
function sendParams(url, param, token) {
let xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.onreadystatechange = function () {
if (this.readyState == 4) {
console.log(xhr.response);
if (typeof done === "function") {
obniz.close();
done();
}
}
}
let p = JSON.stringify(param);
xhr.send(p);
}
obniz.onconnect = async function () {
obniz.io8.output(true);
sensor = obniz.wired("BME280", {vio:0, gnd:1, sdi: 2, sck: 3 });
await sensor.applyCalibration();
const obj = await sensor.getAllWait();
param.metrics = [];
addMetrics(param, "temperature", obj.temperature);
addMetrics(param, "humidity", obj.humidity);
addMetrics(param, "pressure", obj.pressure);
console.log(param);
sendParams(url, param, token);
}
$("#post").click(async function (e) {
const obj = await sensor.getAllWait();
param.metrics = [];
addMetrics(param, "temperature", obj.temperature);
addMetrics(param, "humidity", obj.humidity);
addMetrics(param, "pressure", obj.pressure);
console.log(param);
sendParams(url, param, token);
});
</script>
</body>
</html>
obniz サーバーレスイベントに登録
obniz 開発者コンソールのサーバーレスイベントにて、作成したプログラムが定期実行されるように登録します。
obniz のサーバーレスイベントでは現在1日150回まで実行できるそうなので、10分おきに実行されるよう設定しました。
「テスト実行」を押せば、今すぐ実行もできます。
実行履歴も見ることができます。プログラム中で console.log
等で出力したログも後から見返すことができるので、何かトラブルがあったときも安心ですね。
記録されたデータ
Machinist に記録されたデータはこのようになりました!
スマホでもいつでもどこでも最新のデータが見られます。便利ですね。
グラフもきれいで、拡大表示やCSVダウンロードなど機能が揃っています。
最後に
最初は jQuery の $.ajax
で POST しようとしたのですが、 Authorization Bearer
の部分がうまくいかなかったようで、 XMLHttpRequest
を使って実装しました。
Machinist では複数の端末(agent)からのデータをまとめて閲覧することができるようですし、送信するデータにタグや、位置情報などのメタデータをつけることもできるようです。また、データを「監視」して「アクション」に繋げる設定も簡単にできるようになっているようです。
Machinist には、 JavaScript からでも簡単にデータを送信することができました。obniz との相性も良さそうです。
大量の obniz をばらまいてデータを収集したいですね!
Author And Source
この問題について(obniz + Machinist でラクラク IoT センサーロガー:スマホでも開発可能!おうち IoT), 我々は、より多くの情報をここで見つけました https://qiita.com/y-hira/items/d1b7384f16a43ce9dc3a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .