パール木本のPerlテックブログ

世界的プロジェクトに携わるPerlプログラマー「パール木本」のテックブログ。書籍「業務に役立つPerl」,ユーチューバー, 木本システム代表取締役社長。

IoTをPerlとC言語を組み合わせて作れる現実的な実装を思いついたのでここに記す

IoTをPerlとC言語を組み合わせて作れる現実的な実装を思いついたのでここに記す。

IoT課題

僕が感じているIoTの最も大きな課題は、機器に、HTTP通信を追加することは、コスト的や安全性の問題で難しいということです。

ハードウェアと接続する部分は、通常、C言語かアセンブラで書かれますが、C言語とアセンブラは、HTTP通信のようなテキスト通信は得意ではないからです。また、メモリの制約があるので、テキストのような可変長データを扱うことは、メモリオーバフローで止まってはいけない機器では、怖いと思います。

本日、アーキテクチャーを分離して、比較的簡易に実装できる方法を思いついたのでここに書き記します。ハードとソフトを扱っている、電気屋さん、SIerさんなど、参考になると思います。

センサーなどのハードウェアに、ブルートゥースモジュールを追加する

まず、物理的なものの、ひとつの例としてセンサー機器を上げます。これは、器械を監視して、物理的な情報を、デジタル情報に変換できるものとします。

センサー機器に、ブルートゥースモジュールを追加します。センサー機器は、HTTP通信を行う必要はなく、ローカルな他の機器と、ブルートゥースで通信できるように構成します。

HTTPのようなWebの規格に沿う必要はなく、独自規格でOKです。C言語で、センサーで取得したデータを、ブルートゥースで送信できる実装を書きます。

コントローラーは、2 in 1 のWindowsパソコン

次に、2 in 1 のWindowsパソコンを準備します。これは、取り外すとタブレットにすることができ、開発するときは、パソコンとして使用します。このコントローラーは、センサー機器のそばにおきます。

ボタンを押したり、センサーの情報を表示するのは、ブラウザです。新Edgeや、Chrome、Firefoxなどが使えるでしょう。

「え、ブラウザって、Web側としか通信できないじゃん...」

えぇ、それでいいんです。Webサーバーをインターネット上に、準備します。Webアプリケーションを作って、センサー情報表示の画面を作ります。

センサー機器から送られてきたデータをStrawbery Perl + Mojolicious + Mojo::UserAgentでWebに送信

このWindowsパソコンには、Strawbery Perlをインストールします。そして、MojoliciousをCPANからインストールします。そして、Mojo::UserAgentと呼ばれる非同期で、Webへ通信できるモジュールを使用します。

非同期I/Oは、IOループと呼ばれる処理を、無限にループしています。IOループの中には、一定間隔で、実行できる処理を記述できます。この処理で、センサー機器からブルートゥースで送信されてきたデータを読み取ります。読み取ったデータは、Mojo::UserAgentのpostメソッドで、Webサーバー側に送信します。

Webサーバーは、データベースやメモリストアなどに、センサー情報を保存します。これで、センサー機器、Windowsパソコン、Webサーバまでの、情報の経路がつながります。

ロングポーリング技術で、Webに送信された技術をすぐに取得

Windowsパソコンは、コントローラーとして、Webブラウザの画面が表示されています。

「でも、どうやって、サーバーに送られたセンサー情報をすぐに取得するの?」

これは、JavaScriptによるAjaxを使って、HTTPリクエストを投げますが、そのままサーバー側とつなぎっぱなしにします。これは、ロングポーリングと呼ばれる技術で、Webサーバー側からの、push通信に利用することができます。

Webサーバーがセンサー情報を受け取ったら、接続されているロングポーリングの情報を、返すことによって、push通知を行います。

これで、センサー機器、Windowsパソコン(ユーザーエージェント)、Webサーバー、Windowsパソコン(Webブラウザ)という経路がつながりました。

Windowsパソコンが、二重の役割を果たしているわけですね。

工夫すれば、逆の経路も実装できると思います。「Webブラウザボタンポチ→センサー機器の操作」

IoTに役立つWeb技術について詳しく知りたいならパール木本のPerlプログラミングちゃんねる


Perlゼミの爆速プログラミングちゃんねる 紹介動画