SBC を使ってIoT システムをハードとソフト合わせて作成してみたが、結果感想として楽しかった。
ハードウェアの制作(と言った程では無いけど…)は非常に簡単だったし、プログラム(スケッチ)のサンプルもIDE/追加ライブラリー に付属していたり、ネットで検索すれば沢山サンプルも見つかるので、センサー等デバイス毎に単体テストしながら切ったり貼ったりして、積み木を組み上げるような面白さを感じる事ができた。
今回感じた事柄と次のアイデア
測定値の追加
今回はBME280 センサーで得られる温度、湿度、気圧を計測したが、世の中非常に多くのセンサーが存在するので、追加で色々と計測データーが取れるようにしてみたい。
照度や振動などは簡単に追加出来そう…
WiFi/WEB の簡易性と将来性
大きなシステムでのWEBサーバーの構築は経験があるが、IoT での使用はその簡易性に可能性を感じた。
WEBサーバーの動作として、リクエストされたURL に対して単にブラウザに情報(通常HTML) を返すといった固定概念があったが、IoT では特定のURL リクエストを一種のコマンドとしてIoT 側で簡単にイベント(例えばライトを点ける様な)を発生させる事が簡単に出来る事に気付いた。
例:
http://xxx/led1_on -> 1番目のLED をオンにする
http://xxx/led1_off -> 1番目のLED をオフにする
何らかの認証を実装しないと少し怖い機能ではあるけど、その容易性による可能性は非常に大きいと感じた。
グラフ作成の容易化
今回たまたま自宅にMunin というグラフ化環境があったので使用したが、プラグインを作成しなければならなかったと多少面倒でもあった。
IoT に機能を追加する毎にプラグインの更新を行う事を考えれば、クラウドサービス等を検討した方が良いかと思った。
こちらのクラウド・サービスなどは使い易そう… -> Ambient
WEBリクエスト不感性
今回の実装では特に問題とはならなかったが、WEBリクエストが同時に行われると正常なレスポンスが出来ない様…
最初下記の様に記述していたんだけど、delay(3000) の3秒間に複数のWEBリクエストが来ると同時には処理出来ず、ブラウザ上でエラーとなった。
— Example 1
void loop(void) { server.handleClient();
delay(3000);
}
—-
暫定対応ではあるが、こういう問題を少しだけでも避ける為、メインループ内で待ち(delay)が必要な場合は、下記のように記述するようにした。
— Example 2
void loop(void) {
server.handleClient();
// WEB待ち細分化ループ
for (uint8_t i = 0; i < 30; i++) {
server.handleClient();
delay(100);
}
}
—-
根本的には非同期にリクエストを受け付けられるように実装すべきかな…
ただそういう実装はスケッチの見通しが悪くなると思うので、効果を考えればそこまで行う必要は無いだろうとも思っていたりする。
少々残念なOLED ディスプレー
アマゾンでセット販売の物を購入したが、OLED ディスプレーが一部黄色とやや特殊な残念仕様な物だった… orz
まあ、安価な物なので別途アマゾンで白仕様2枚セットをポチった…
一枚当たり500円弱!
測定精度
元々変化のトレンドを知りたかったという事から、絶対的な精度自体はそれ程重視はしていなかった。
手持ちの複数の温湿度計と比べてみた所、温度は殆ど同じ値が表示されるのでまずまず精度は高いように見える。
湿度はかなり低めに値が出て、大体10から15程度の違いが見られた。
スケッチ(ソースコード)記述スタイル
スケッチの記述はあちこちから寄せ集めたので、記述スタイルにばらつきが見られるのが少し気持ち悪い…
変数の名前付けも統一性が感じられなくなっているし、時間があればそういう所に気をつけて清書してみたい。
第二弾に続く…