本連載について
最近、IoT(Internet of Things)という言葉がはやっていますが、この言葉自体は1999年にケビン・アシュトンという人が提唱した言葉です。組み込み機器をネットワークに接続することでデータを相互にやりとりしたり、組み込み機器からデータを収集したりすることが可能となり、さまざまな可能性が広がります。IoTという言葉はこうして形成されたネットワークあるいは機器を指します。歴史的には随分と古いものですが、10年以上たって急にはやりだしたのは、組み込み機器の性能が上がって高度な処理が可能になり、組み込み機器のライブラリやツールが整備されて開発が容易になってきたためでしょう。特に最近の組み込み機器はプログラミング(プログラムを書くこと)と、プログラミング(そのプログラムをCPUに書き込むこと)が容易になっている上、ICE(インサーキットエミュレータ)というデバッグのためのツールが充実しており、またそれらが非常に安価に(場合によっては無料で)入手できるので、入門の敷居は昔と比べて非常に下がっていると言えます。
組み込み機器の入門記事というのは、はるか昔からありますが、どちらかというとLEDを点灯してみたり、センサーなどの入出力機器を制御してみたりといったハードウェアの制御に焦点を当てたものが多いと言えます。実際、こうした入出力機器が自分のプログラムで動作する体験から得られるドキドキ、ワクワク感というのは他には得がたいものがあります。今回の連載はこうしたデバイスの制御よりは、IoTに重点を置き、組み込み機器をネットワークに接続してサンプルをいくつか作成してみることを目指します。そのため、基本的なハードウェアの解説は最小限にとどめ、サーバ・アプリケーションとの連携を中心に解説します。
mbedとは
mbedはIoTのためのプラットフォーム、OS、ツールといったエコシステムを、標準をベースとした方法で構築するための団体で、ARM社が主導しています。一般には、mbedという言葉はARM社のマイクロコントローラ(以降、単にコントローラと呼びます)を用いたプロトタイプ開発用のボードを指すことが多いと思われますが、それは、mbedが提供するデモボードのことを指しています。mbedのデモボードにはいくつか種類がありますが、一番有名なのはARM Cortex M3を用いたmbed NXP LPC1768(図1)で、単にmbedと言った場合は、このデモボードを指すことが多いでしょう。本連載でもこのデモボードのことを今後、単にmbedと呼称します。
デモボードは広く出回っているので、入手は困難ではないでしょう。筆者は秋月電子通商で入手しましたが、円安の影響で価格が上昇しているので、検索エンジンで安く購入できるところを検索してみるとよいかもしれません。
LPC1768はさまざまな入出力を持っていますが、その中でもEthernetを備えているのが特徴の一つと言えます。これを用いることで簡単にインターネットに接続可能な機器を作成することができます。本連載では、より手軽にmbedを試せるようにアプリケーションボード(図2)を使用します。これにより多くのI/Oをはんだ付けなしに試せるようになります。アプリケーションボードにはEthernetのRJ-45コネクタも実装されているので、そのままEthernetのケーブルを接続できます。
IoTとして活用可能なコントローラのいくつかを表(IoTとして利用可能なコントローラ)にまとめました。左側がローエンド、右側がハイエンドになります。
PIC18F66J60 | mbed LPC1768 | Raspberry PI 2 | |
---|---|---|---|
CPU |
8bit クロック 42MHz |
32bit クロック 96MHz |
32bit 4コア クロック 900MHz |
ROM | 64KB | 512KB |
Micro SD card (公式には32GBまで) |
RAM |
4KB Ethernet用に 8KBの専用バッファあり |
32KB USB/Ethernet用に 32KBのバッファあり |
1GB |
OS | なし |
簡単な リアルタイムOSあり |
Linux |
プログラミング言語 | C | C/C++ | さまざまなものが利用可 |
PIC18F66J60は、チップ自体が$3くらいなので非常に安価にシステムを構成できますが、CPUは8bitですし、RAMが4K Byteしかないため、ネットワーク制御用としては限られた機能しか提供できません。逆にRaspberry PI 2の場合は、一昔前のPC並みのスペックを有しており、プログラミング言語に高級言語を用いることが可能なので、開発を非常に楽に行えます。しかしLinuxベースなので、応答性能が必要な場面では、専用にデバイスドライバを書かなければなりませんし、シャットダウンせずに電源を落とすとファイルシステムが損傷を受ける可能性があるなど、取り扱いにPCと同じような神経を使う必要があります。mbedはIoT用のコントローラとしてはミッドレンジと言えるでしょう。開発にはC/C++を用いなければならないので、Raspberry PI 2よりは敷居が高いと言えますが、高速な32bit CPUと32K ByteのRAMを備えているため、さまざまなネットワーク制御に対応が可能です。また、簡単なリアルタイムOSが用意されているため、割り込み処理などの低レベルな記述を行わなくても、比較的容易にバックグラウンド処理を実装できます。
LPC1768の仕様の詳細についてはmbedのページを参照してください。
mbedでの開発の特徴
初心者にとって、組み込み機器の開発にはいくつかの難関があり、代表的なものとして以下のようなものが挙げられます。
- 部品をはんだ付けしないといけない
- プログラムを機器に書き込むために書き込み用の機器(以降本連載では、プログラマと呼びます)が必要
- 開発環境をPC上にセットアップしなければならない
部品のはんだ付けそのものはブレッドボードなどを用いることで回避できますが、それでも面倒な配線作業は残ります。配線を間違えれば正しく動作しないだけでなく、最悪の場合、部品が壊れるかもしれません。今回はmbedのデモボードとアプリケーションボードを使いますので、配線作業はまったく不要で、残る注意点は、デモボードをアプリケーションボードに差し込む時に方向を間違えないこと、静電気に注意すること、ピンを折らないように気を付けることくらいです。
最近のコントローラは、数本の信号線をプログラマに接続すれば書き込みが可能になっています。書き込みに使用する線は入出力ピンと共用になっているケースが多いですが、それでも回路に接続したままで書き込みが可能なように配慮されているので、わざわざ書き込みのためにコントローラを回路から外す必要はありません。しかしそのためには回路側では設計に配慮が必要ですし(例えば負荷容量が一定値を超えないようにする)、書き込みの際には配線の他にも、プログラマのセットアップや操作が必要で、初めての場合には戸惑うことも多いでしょう。mbedは最初からUSBポートの一つがUSBストレージ・クラスに対応したデバイス(つまりはUSBメモリ)になっており、ここにプログラムを書き込んでやれば、コントローラ起動時に自動的にそのプログラムを読み込んでくれます。このためプログラム書き込みのために特殊なハードウェアは一切必要ありません。
開発環境の整備も初心者にとっては荷の重い作業です。組み込み開発の世界でも最近は統合開発環境(IDE)が提供されるようになり、IDEをセットアップすればひととおりの環境がそろうようになったので、昔と比べれば随分と楽になりました。それでも、例えばUSBやEthernetにアクセスするためのライブラリを集めてきたりといったところは、Webページ上を探し回る必要があることが多く、特に組み込み用のコントローラは種類が多いために正しいモジュールを見つけるのは一苦労でしょう。mbedはブラウザ上で動作するIDEを提供しており、新規に何かインストールする必要はまったくありません。ブラウザ上で動作するIDEでコードを書き、必要なライブラリを選択してビルドすれば、ブラウザ経由で実行モジュールが自動的にダウンロードされるので、それをUSBメモリとして認識されているmbedにコピーしてやるだけで済みます(詳細はこの後解説します)。
mbedアプリケーション・ボード
すでに述べた通り、今回の連載ではmbedアプリケーション・ボードを使用します。このボードには数多くのデバイスが搭載されていますが、詳細はmbed application boardのページを参照してください。日本ではスイッチサイエンス社が取り扱っており、筆者もここで手に入れました。
なお、連載第1回では、アプリケーション・ボードは使用しませんので、mbedのボードだけあれば十分です。
それでは早速mbedを使ったプログラミングを始めましょう。