マイコン
BeagleBone Black で お手軽に開発をしよう
筆者は「BBBの特色はどこなのだろうか……」と、ずっと悩み続けていました。 Linuxでサーバー建てるだけ、プログラムしてGPIOいじるだけならRaspberry PiやGalileoなど、他の組み込みLinuxボードでもできてしまいます。では、BBBでしかできないことって何があるのか……と悩んでいました。
しかし先日、ようやくその1つの答えがみつかりました。それは「USBケーブルを指すだけで開発できること」です。どういうことかというと、今まで扱ってきたRaspberry Piなどは少なくとも電源とコンピュータとの接続に2本のケーブルを用いる必要があり、また開発する際はSSHなどを使ってシステムにアクセスする必要がありました。しかしこのBBBは前回ちょっと触れたように、USBケーブル1本つなげるだけで、電源が供給され、シリアル接続ができ、ブラウザ経由でプログラムの開発が行えます。
今回はこのWebブラウザ経由でのプログラム開発を行う方法について解説を行っていきたいと思います。
【目次】
・Cloud9 IDEでLED Blinkしてみよう!
・まとめ
・Tips
・作者
Cloud9 IDEでLED Blinkしてみよう!
BBBには「Cloud9 IDE」というWebブラウザ上のIDEと、BoneScriptと呼ばれるNode.jsのプラグインを用いて、JavaScriptでGPIOの制御等が可能となっています。
まずはこれらを用いて、LANポートの上にある4つのLEDを制御して、定番のLED Blink(LEDの点滅。別名Lチカ)をしてみましょう。
Cloud9 IDEを開く
BBBをUSBで接続し、以下のURLを開いてください。
http://192.168.7.2:3000/
すると以下の様なページが表示されます。
これがCloud9 IDEのホーム画面です。
簡単なプログラムを作ってみる
それでは実際に、LED Blinkをするプログラムを作ってみましょう。
開発用ディレクトリを作る
左ペインにはプロジェクトフォルダやファイルの一覧が表示されています。ここで右クリックし、メニューから「New Folder」を選んで新しくディレクトリを作ってください。名前はとりあえず「myscript」としてください。
ソースコードファイルを作る
ディレクトリができたら、「myscript」ディレクトリを右クリックして「New File」を選択してファイルを作成してください。ファイル名は「ledblink.js」と入力してください。
ソースコードを記入する
「ledbkink.js」をダブルクリックして開き、以下のプログラムを入力してください。
```javascript var b = require('bonescript');
leds_out = function(status){ b.digitalWrite('USR0', status); b.digitalWrite('USR1', status); b.digitalWrite('USR2', status); b.digitalWrite('USR3', status); }
var state = b.HIGH;
blink = function(){ if (state == b.HIGH){ state = b.LOW; } else{ state = b.HIGH; }
leds_out(state);
}
// setup b.pinMode('USR0', b.OUTPUT); b.pinMode('USR1', b.OUTPUT); b.pinMode('USR2', b.OUTPUT); b.pinMode('USR3', b.OUTPUT);
setInterval(blink, 1000); ```
入力が終わりましたら、Ctrl + SまたはCommand + S等のショートカットを使って、変更を保存してください。
実行してみる
以下の図を参考に、Runボタンを押して実行を開始してください。
しばらく待つと実行が開始されるのですが、どうやらそのままではデバッグモードに入ってしまうようなので、下図を参考に右ペインの矢印マークを押してください。
するとLANポート上のLED4つが、点滅を始めます。
コードの解説
動くことを確認したところで、コードの解説を行っていきます。
このコードでまず最初に行うのは、以下の部分です。
javascript var b = require('bonescript');
この部分ではNode.jsのモジュールとしてBoneScriptを読み出し、変数bにオブジェクトを渡しています。以降BoneScriptのメソッドを扱う際には、以下のように変数bを通して行います。
javascript b.pinMode('USR0', b.OUTPUT);
次に実行される部分は少々飛びまして、以下の部分になります。
javascript // setup b.pinMode('USR0', b.OUTPUT); b.pinMode('USR1', b.OUTPUT); b.pinMode('USR2', b.OUTPUT); b.pinMode('USR3', b.OUTPUT);
この部分ではコメントの通り、LANポート上にあるUSB(USR0~3)を、出力ポートとして設定しています。
この次に実行されるのは、以下の部分です。
javascript setInterval(blink, 1000);
setIntervalメソッドは、第1引数のメソッドを、第2引数のタイミング(単位はms)で実行します。ここにblinkメソッドを入れることで、1秒毎にLEDのON/OFF切り替えを実現しています。
blinkメソッドの定義は少し戻って、以下のように定義されています。
```javascript var state = b.HIGH;
blink = function(){ if (state == b.HIGH){ state = b.LOW; } else{ state = b.HIGH; }
leds_out(state);
} ```
呼び出されるたびに、メソッド外にあるstate変数を参照し、HIGH/LOWを反転させます。そしてstateを引数にLEDを制御する、leds_outメソッドを呼び出します。
leds_outメソッドは、以下のように定義されています。
javascript leds_out = function(status){ b.digitalWrite('USR0', status); b.digitalWrite('USR1', status); b.digitalWrite('USR2', status); b.digitalWrite('USR3', status); }
このメソッドはBoneScriptのdigitalWriteメソッドを用いて、LEDたちを制御します。
以上のようにして、LED Blinkは動いています。
まとめ
今回はCloud9 IDEとBoneScriptを使って、JavaScriptでIOを触ってみました。 JavaScriptというと組み込みとは程遠い言語だと思っていましたが、Webブラウザで動くという手軽さとBoneScriptのお陰で、かなりお手軽に開発することが出来ました。 BoneScriptのメソッドがArduinoライブラリのメソッドと似せて作られているのもありがたいです。
次回以降もこのBoneScriptを使って、お手軽に工作をしてみたいと思います。
Tips
Cloud9 IDEとは?
Cloud9 IDEは、JavaScriptで記述された統合開発環境(IDE)です。オープンソースで開発が進められ、主にNode.jsの開発環境として使われています。
最大の特徴はWebブラウザ上で動作し、そのままプログラムと実行ができるところです。 BBBはこのIDEとBoneScriptが予めインストールされているため、本体をUSBを接続するだけでお手軽に開発が始められるようになっています。
Node.jsって何?
Node.jsはサーバーサイドで動作する(サーバーで処理が行われる)、JavaScriptインタプリタです。 JavaScriptというと通常HTML内に埋め込まれていて、みなさまのWebブラウザ上、つまりクライアントサイトで動作しますが、このNode.jsはサーバーサイドで実行が行われます。
今回の件に関しては、このサーバーサイドで動作するという特徴のお陰で、Webブラウザ上からBBB(サーバー)のIOを制御することが可能となっています。
作者
作者: 西永俊文
Twitter: tnishinaga
協力: マルツエレック株式会社
この 作品 は クリエイティブ・コモンズ 表示 - 改変禁止 4.0 国際 ライセンスの下に提供されています。