2009.02.16
Beagle BoardでLEDを点滅させる
私がBeagle Boardに興味を持つようになったきっかけのひとつに、簡単にアクセスできるセンサー用インターフェースが拡張ヘッダーに豊富に用意されていることがある。ここに適当なコネクターをハンダ付けすれば万事オーケーだ(私は、写真のようにArduinoっぽいメスヘッダーを付けた)。
コネクターを取り付けたら、あとはこれを何に使うかによって変わってくる。Beagle Boardでひとつわからなかったのは、これらのピンと通信する方法だ。Linuxは、GPIO、I2C、SPIといった、よく使われるセンサー用インターフェースに対応している。
私はBeagle Boardを手元にあるセンサーにかたっぱしからつなぎたいと思っていたのだが、Beagle Boardの信号が1.8Vだと知って考えてしまった(この問題については将来の記事で詳しく扱う予定だ)。手始めにLEDを点滅させようと思っていたのだが、それにはまず、Beagle Boardで走るLinuxとGPIOの使い方を習得しなければならない。
私は、Beagle Board system reference manualの表17を見て、どのピンが、GPIOのどのポートに対応しているかを調べた。拡張ヘッダーのグランド(27と28)に近いピンを使いたかったので、GPIO_168(ピン24)を選んだ。
まだ、わからないことがいくつかある。そのひとつが、表17のA、B、C、Dの各オプションの意味だ。GPIOポートを要求したときに何の問題もなかったから、たぶん、OSが「OMAP3530の中のマルチプレックスコントロールレジスタの設定」をやってくれるのだろう。
かくして私は、GPIO_168がピン24に繋がっていることを探り当てたのだが、どうしたらそれを使えるのかがわからなかった。そうするうちに、Linux documentation in the AVRFreaks Wikiというサイトに出会った。ここには、私が知りたかった情報がすべて書かれていた。下のサンプルを見ればわかると思うが、Linuxのシェルを使って/sysディレクトリにある擬似ファイルへのコマンドを書くだけでよかったのだ($PORTはポート番号)。
コマンド | 効果 |
---|---|
echo $PORT > /sys/class/gpio/export | 書き込み用にGPIOポートを開く。 |
echo $PORT > /sys/class/gpio/unexport | GPIOポートを解放する。 |
echo “high” > /sys/class/gpio$PORT/direction | ポートをハイにする。 |
echo “low” > /sys/class/gpio$PORT/direction | ポートをローにする。 |
Beagle Boardでこれを試すときは、getting the Angstrom Linux distribution runningにあるBeagle Boardチュートリアル に従ってほしい。これができると、Beagle BoardでLinuxが走るようになり、シリアルターミナル(Linuxのminicom、Mac OS Xのscreen、WindowsのHyperTerminalまたはPuTTYなど)を使ってLinuxとの通信が可能になり、コマンドをタイプできるようになる。
Beagle Boardのルートにログインして、strobe_gpioというファイルに次のプログラムを書き加える。
Beagle Boardにはviエディタが入っているので、vi strobe_gpioとタイプし、iとタイプして挿入モードに切り替え、このプログラムを貼り付けるのだ。次に、ESCキーを押してコマンドモードに抜けて、ZZとタイプしてファイルを保存する。これでLinuxシェルに戻る(この操作がよくわからないときは、世界に山ほどある viエディタの使い方を参照してほしい)。
次に、chmod 755 strobe_gpioとタイプし、写真のようにLEDをセットする(短い足をピン28に、長い足をピン24に)。コマンド ./strobe_gpio 168
を試してみよう。LEDが点滅するはずだ。
このデモはBeagle BoardでLEDを点滅させるための最良の方法ではない。あくまでも、センサーやマイクロコントローラーとBeagle Boardを対話させるための第一ステップと考えてほしい。
– Brian Jepson
[原文]