mbedが気軽に、そして簡単に使えるものであることは十分説明した。これ以降では、実際にmbedで動作するプログラムを作り、いかに簡単かをお見せしたい。
図2はmbedの開発環境にアクセスし、画面の左上にある「New」ボタンを押して新しいプログラムを作る準備をしたところだ。図中のソースコードは自動的に挿入されたものである。
これは単純にLEDを点滅させるプログラムだ。「DigitalOut」クラスによって、このプログラムが簡潔になっていることが分かる。DigitalOutはmbedの標準ライブラリに存在するクラスだ。このクラスはmbed基板上のLEDや端子を指定して使うことができる。この例では「DigitalOut myled(LED1)」となっており、初期化子としてLED1を指定し、myledインスタンスを作っている。
main関数ではこのmyledインスタンスに交互に「1」と「0」を代入することでLEDをON/OFFさせている。whileループ内のwait()関数は、指定された秒数だけそこで実行を止めるものだ。
DigitalOutクラスはLED以外の端子も指定できる。例えば「DigitalOut d_out(pin10)」のようにすれば、pin10を出力として使える(『d_out = 1』でHighを出力、『d_out = 0』でLowを出力する)。
アナログ入力を使うときは「AnalogIn ai(p20)」のようにすれば、aiから数値を取り出す(他の変数に代入するなど)ことでその値を得られるようになっている。このようにmbedライブラリは周辺制御を高度に抽象化し、マイコン内部の実装を隠蔽してしまうことで分かりやすいプログラムを作れるようにしている。
先に挙げたLEDを点滅させるサンプルでは、インスタンスの宣言こそC++言語の規則にのっとっているが、その後はインスタンスをC言語の変数のように扱っている。C++言語の知識がなくても、開発で困ることはないだろう。もっとも自分で独自のクラスライブラリを作るならC++言語でプログラムを書かなければならない。
mbedの標準ライブラリを使うには、先ほどのサンプルプログラムのようにまずmbed.hをインクルードする。mbed.hにはmbedの標準ライブラリだけでなくC言語の標準関数も使えるようにstdio.hやmath.hなどもインクルードするよう指定されている。printfやscanf、数学関数なども通常のC言語と同じように使える。
mbedでは開発者が独自に作成したライブラリを世界の開発者に向けて公開し、使ってもらうことが可能になっている。開発者コミュニティーの力がライブラリの数をどんどん増やしているのだ。
コミュニティーの力で生まれたのはライブラリだけではない、日本の開発者がmbedの拡張用ボードを開発した。このボードは「☆board Orange(スターボードオレンジ)」と名付けられている(図4)。☆board Orangeを使うと、プロトタイプづくりがより簡単になる。☆board Orangeは「きばん本舗」で入手できる。
mbedは40端子のDIP形状で、ブレッドボードなどに接続しやすくしてある。しかし、ブレッドボードで配線するのはなかなか面倒だ。プリント基板を作ってしまう人もいるかもしれないが、それも簡単ではない。
☆board Orangeを使えば、ブレッドボードで配線するなどの手間をかけずにさまざまな周辺装置を動かすことができる。このボードはキャラクタ表示液晶パネルやイーサネット端子、microSDカードスロット、USBコネクタを備えている。さらに独自のデバイスを接続するためのユニバーサル基板部も用意してある。
☆board Orangeがあれば、mbedを挿すだけで、すぐにこれらのハードウェアを利用したアプリケーションを試せるのだ。その実例としてキャラクタ表示液晶コントローラーを操作するサンプルを紹介しよう。
キャラクタ表示液晶を操作するには、「TextLCD」というライブラリを使う。これは「HD44780」互換のキャラクタ表示液晶コントローラーを操作するライブラリだ。自分のプログラムにライブラリをインポートし、ソース内でTextLCD.hをインクルード。後はTextLCDのインスタンスを作成して、そのメンバ関数を呼び出せば操作できる。
CookbookのTextLCDのページにある「TextLCD Hello World」リンクをクリックすると、このプログラムの概要を説明するページが現れる。ここで、「Import program into Compiler」というリンクをクリックすると、開発環境の画面が現れ、サンプルソース、ライブラリの全てを一度にまとめて取り込んで、そのままコンパイルして動くコード一式が用意できる。
インポートしたサンプルコードは、液晶コントローラーを接続する端子として、10番、12番、15番、16番、29番、30番を想定しているが、☆board Orangeでは、24番と26番〜30番で接続している。この部分を書き換えて、☆board Orangeの液晶ディスプレーを操作するようにしたプログラムは以下の通りになる。
#include "mbed.h" #include "TextLCD.h" TextLCD lcd(p24, p26, p27, p28, p29, p30); int main() { lcd.printf("Hello World!\n"); }
このライブラリでは液晶の「RW」端子を使わないようになっている。そのため、この端子をGNDに接続しておかなくてはならない。これは☆board Orange上のジャンパ(J5)で設定する。
mbedと☆board Orangeを組み合わせると、もっと複雑なことができる。しかも、比較的簡単なプログラムで実現できる。例えば、Twitterにログインして、一言書き込むということも40行程度のプログラムでできる(図5)。これは、開発者コミュニティーで公開されているライブラリとサンプルプログラム「TwitterExample」を使って、ごく簡単に実現できる。このサンプルプログラムはCookbookの「Twitter」ページから入手できる。
mbedはこれまでにない評価ボードだ。USBやイーサネットなどの周辺機能を扱うにも、その機能を持つクラスをインスタンス化して、関数を呼び出すというスタイルでプログラムを作れるので、マイコンのマニュアルと格闘する必要もない。組み込みの初学者だけでなく、手早くプロトタイプを作りたい開発者ならぜひとも注目しておきたい製品だといえる。
岡野 彰文(おかの あきふみ)氏
NXPセミコンダクターズジャパンでハイパフォーマンス・ミックスドシグナル インタフェースプロダクト/アプリケーション&ラボのシニアマネージャを務める。半導体アプリケーション・エンジニアとして20年の経験を持ち、これまでオーディオシステム、USB、マイクロプロセッサなどの製品を担当。現在はインタフェース関連とMCU製品のアプリケーション開発/顧客サポートに従事している。
Copyright © ITmedia, Inc. All Rights Reserved.