GVCとは、パソコンなどに接続されているマイコンとそれに接続されている各種センサーやスイッチなどのデバイスの総称です。
Global Versatile Controller(GVC):汎用制御装置
ちょっと欲張りな名前ですが、よーするに
「まーできるだけ簡単にやれることやろうよ」
というコンセプトのものです。
Linuxなどのパソコンと、PICを搭載したGVCのマスターコントローラー、そして各種センサーやリレー、スイッチ、赤外線リモコンなどを接続して、誰でも「比較的簡単にホームICTとかM2Mといったようなものを実現しようと言うプロジェクトです。
で、ただやるにしても出来るだけプロトコル(手順)を統一しておいたほうがいろいろと楽だよね、ってことで、GVCとやり取りするためのプロトコルを皆さんに提案したいとおもいます。
もしよかったら皆さんも一緒にGVCプロトコルを作って、いろんな制御をしてみませんか?
■GVCについて
Global Versatile Controller:GVCは「汎用制御装置」と言う意味で、ハードに弱い人&ソフトに弱い人それぞれが簡単に自分のウィークポイントな分野にも手を出せるように、またハード屋さんとソフト屋さんがもっと簡単に繋がれるように、という目的で提案するものです。PICを搭載したマスターコントローラーと、それらに接続されたセンサーやスイッチなどのモジュール、そしてマスターコントローラーとパソコンなどがやり取りをするために定義するプロトコル、そしてそれに基づいてデータを受け取るデーモンやサービスなどのソフト、また各種制御命令を出すコマンドなどの総称です。
話は少し飛びますが、H8やらPICやらAVRやらArduinoやらmbedやら、最近はどんどんハードウェア側の敷居が下がってきていますし、ソフトウェアもマシン語からC言語、そして各種スクリプト言語へとこれまた敷居が下がってきています。
ですが、どうもやっぱり両者の壁はなかなか厚い。その壁を少しでも低くして、双方が出来るだけ簡単に繋がるためにはどうしたらよいか?というかそうするための便利なツールがないかな、と思って探したものの見当たらなかったので、ならば自分たちでつくるか、というモノになったのがGVCです。
ハードとソフトはそれぞれ個別に皆さんあれこれいじられていると思いますのでここでは割愛しますが、その両者が繋がるために必要な「プロトコル:手順」がなかなか見つからないので、そこまで含めた提案をしてみたいとおもいます。もちろんまだまだ足りない部分ばかりかとは思いますが、これからどんどん充実させていきたいと思いますので、皆さんのご提案、ご協力をいただければ幸いです。
現在(Rev.2)はPICをベースとして、なるべくI2Cで接続できるセンサーやデバイスを接続して、データのやり取りをしています。これは汎用性を持たせることと、少しでも複数のモジュールを接続しやすく&離れたところにデバイスを設置できるようにという目的のためです。
■GVCのプロトコル
GVCのプロトコルは非常に簡単です。1つのサイクルの中に複数のメッセージがあり、それぞれのメッセージの中には1つのデータが入っている、というものです。
メッセージのタイプは200種類以上で、メッセージのコアには
・メッセージフォーマット
・コマンド/リザルト
・データ長
・データ(あれば)
・チェックサム
があり、これらにさらに、メッセージが流れるI/Fにより、メッセージタイプやGVCコントローラーの番号などが付与されます。またメッセージの中には、スタートメッセージという特殊なメッセージがあります。このメッセージは1つのサイクルの最初、GVCが各種データを最初から送出する際の区切りとなるメッセージです。
基本的な文字列メッセージのフォーマットは以下のようになります。
たとえば照度や温度、湿度など、GVCに接続されているセンサー類からのデータもメッセージでどのようにやり取りするかを決めることで、ハードウェア側とソフトウェア側が簡単にやりとりできるようにしています。まだまだメッセージの定義はTBD(To Be Determined)ばかりですので、皆さんからどんどん定義リクエストがいただけたら幸いです。
これらのメッセージにのって、各種データや制御が、GVCと各種デバイスモジュール、gvcdやgvcとの間で、次のようなシーケンスでやり取りされることを想定しています。
GVCは長らくプロトタイプ(~Rev.1)状態でしたが、2013年度中にRev.2を第一版として公開する予定です。
ソフトもハードもオープンにすることでハードとソフトがうまく融合できたらいいなと思います。
GVCにご興味を持っていただけたならぜひご連絡、ご質問いただければと思います。