IoTなどと呼ぶから本質が見えなくなるんだ。’Sensor Computing’とでも呼べばよいのでは?ドア開閉通知システムを作る(1)序文
アイオーティーとかエーアイとかブロックチェーンとか呼ぶの止めませんか?
誤解を招く表現で本質が見えなくなるよりは、呼び方を改めた方が良いとは思いますが…。以下に私の案を示します:
IoT = Sensor Computing
AI = 深層学習による画像認識
Blockchain = クソの役にも立たないリンクリスト
来客を感知するためのドアセンサーを作りたい
ソフトウェア開発も長く続けていると、もう今年の流行りはこのフレームワークだ、いや来年はこれだ、といった意味のない反復行動にも飽きてきまして、かといって数十年前の設計を引きずる大企業様のシステムのお守りはもっと飽きてきまして、未知の分野といえばIoT関連、実世界のモノが動くような仕組みなら、まだ何とか興味を持てるのではないかと感じています。そこで、取り掛かりとしてセンサーの値を読む
とはいえ低レベル開発経験がない
私のキャリアの中で最も低レベル(ハードウェアに近いという意味)は、デジタルTVのための組み込みブラウザーの技術サポート、みたいな仕事だけで、あれはむき出しの基板にICEを接続してVxWorks上で動くアプリケーションの動作確認やらデバッグやらをやったのが一番低レベルであったのか?(私はP社のデジタルTV開発機を一台、煙を吐いてぶっ壊したような気がするけど気のせいだろう。気のせいではないだろう。その節はご迷惑をおかけしました)
そんな私ですが、その組み込みアプリケーションというのはCで書かれていたことだし、アプリケーション組み込みスクリプト言語を別途すれば、汎用言語はC/C++から勉強し始めた私は「JavaScriptしか触ったことがありません」というWebの世界しか知らない小僧っコよりも低レベルの世界は知っていることだし、「Windowsしか知りません」というSIerによくいる標準的な地球人類よりも、1990年代後半のLinuxブームの頃からUNIXを触っていたのだし、組み込み機器にありがちな「公式アプリケーションはWindows版しかない」と言われても「ンな訳ネエだろ2020年にもなって何がWindowsだ。未だにTeraTermなんて四半世紀前の遺物しか動作環境として考慮していないってどういう事?16ドットフォントが目に痛いんだよ、PC-98かよ。macOSのTerimnal.appでscreenコマンドを使えばシリアル通信ぐらいできますぅ〜Windowsしか知らない癖にエンジニア気取ってるンじゃねえよベロベロバー」くらいの事は思っている。
大体ネットと言えばインターネットしか知らない人は、シリアル通信の設定欄にパリティビットだのストップビットだのボーレートだのと書かれていてもそれら古代文明の技術が何を意味するのか分からないことだろう。私はインターネット以前の紀元前からパソコン通信にドハマリしていたので、そんなシリアル通信は理解しているし何なら今でもATコマンドぐらい書ける。「通信とはTCP/IPである(更にその上のHTTPである)」の時代に育った人間は、「シリアル通信という素の通信」をIoTで扱わなければならない時、追加で読まなければならない本が増えるだろう。UNIXという50年前の古いOSを直に触ったことがなければ、Terminalも例の「黒い画面」として敬遠するだろう(macOSのTerminal.appは白いですが)。追加で読まなければならない本がこれでまた増える。
そういう次第で、私の年齢からいっても、IoTはキャリア的にはミスマッチでも、知識、経験的には合っているのではないか?と思う。
1990年代後半、ポケモンの大ヒットによってゲームボーイの製品寿命が更に伸びた当時、プレイステーションなどの32ビット機によって一度は不必要になった技術 — つまりZ80アセンブラとか、ドット絵などの技術 — を持った人間の確保にゲーム開発会社が苦労したという話を思い出す。
センサーから通知までの仕組み
- ドアに設置された何らかの装置(たぶん磁力センサー)がドアの開閉を何らかの方法(たぶん無線通信)で伝える
→モノワイヤレスの製品群が良いだろう。Bluetoothはペアリングが外れた時に動かなくなるのであまり信用していない。WiFiは電力を食いすぎるしIFTTT経由にしてしまうと数秒のタイムラグがあり、同じフロアのイベントが一度、インターネットの木更津揚陸地点から海に入って太平洋横断ケーブルでグアムとハワイを経由してオレゴン州から揚陸されてアメリカのどこかのデータセンターで処理された結果がオレゴン、ハワイ、グアム、木更津を経由して自分たちのいるフロアに戻ってくるって無駄もいいところじゃないのか?なので、インターネットを経由せず、ペアリングなどもせずに一方的にデータを送信し続けるような仕組みが欲しかった。
2. 電波の届く範囲に設置されたPCがドア開閉時のシグナルを受け取り、データを二次利用できるように加工する
→Raspberry Piが良いだろう。バッテリー駆動を考えているなら、Zeroシリーズが良いだろう。
3. PCからLAN接続された別の装置が結果を伝える
→Google Nestに喋らせれば受けもよいだろう。元々Google Nestに任意の文章を読ませる機能は無いようだが、Raspberry Pi経由ならできるようだ。
ここでは1の装置選定をしたいと思います。「人が来たかどうか」を知りたいのなら、人感センサーを使うべきでしょう。しかし今回の場合は「ドアの開閉」という、開けたか閉めたか、ある意味デジタルな0と1を判別したいだけですので、そのような用途には畢竟、マグネットセンサーが向いているでしょう。
買ったもの
- TWELITE BLUE PAL & AMBIENT SENSE PALセット
無線モジュール BLUE PAL
開閉センサー OPEN-CLOSE SENSE PAL
専用ケース - USB接続親機 MONOSTICK BLUE
IoTの難しさはその取り扱いではなく、ドキュメントが無さすぎるせいだ
まずメーカーのWebサイトが分かりにくい。何がどこに書かれているのか全く理解できないのだ。どうしたらこんなWebサイトができるのだろうか?どこか無料のブログを借りて、そこに記事でも書いたほうが1兆倍マシだ。そのせいで、ある仕事をこなすには何と何が必要で、それらはどのように使えばよいのかが理解できない。
製品ネーミングも下手くそで、TWELITE(これで“トワイライト”と読むのだそうだ)だとか、なんとかパルだとか、製品名が全く頭に入ってこない。いっそ型番で呼んでくれたほうがまだ覚えやすいのに…。
それならユーザーのブログ記事などを読めばよいのでは、と思うのだが、これも情報が古くて、上記のようなAmazon限定セットが売られる前の話で、自分でハンダ付けをしなければ使えないような時代の記事が散見される。センサーで感知した情報を、USBスティックで受け取り、標準出力に流す、という事だけをとりあえずしたいのだけど、適当なドキュメントが見当たらなかった。
そこでメーカーに問い合わせをした。こういう組み込み機器は大抵が顧客企業を対象にしており、有料の年間サポートに契約すれば答えてやらんこともない、というビジネスをしているのですが、私のようなサポート契約をしていない個人にも答えていただけるのか…。