BeagleBone ScriptのSDカードからブートしているUbuntu 14.04でBoneScriptを使いLチカを試してみようと思ったのですがエラーが発生して動作しません。kernelを3.8.13から3.14に上げているのが問題になっているようです。OctalBoneScriptを使うと3.14でもLチカできそうなので試してみます。
GPIOのワイヤリング
ブレッドボートとのGPIOのワイヤリングは、Blinking an LED with BeagleBone Blackを参考にしました。
LEDや抵抗、ジャンパーワイヤーはAmazonで購入したArduinoをはじめようキットの付属品を使います。
GPIOの拡張コネクタレイアウトはこちらを見ながら作業します。P8とP9の位置は間違えないようにします。
BoneScriptのサンプル
BoneScriptはNode.jsでハードウェアをコントロールできるパッケージです。eMMCにインストールしたDebianのイメージでは最初から使える状態になっています。SDカードにインストールしたUbuntuにはBoneScriptはインストールされていないので、package.jsonに記述してnpmからパッケージをインストールします。サンプルプログラムはINSPIRE: BEAGLEBONE BLACK RESOURCESのワークショップを参考にコードを書きました。
/*eslint-env node */ |
BoneScriptのバージョンは0.2.4です。
$ npm list bonesctipt |
pinModeのエラー
プログラムを実行するとGPIOを操作するpinModeメソッドでエラーが発生してしまいます。どうもカーネルのバージョンが変わるとデバイス名に変更があるようです。BoneScriptは3.8.xのカーネルでないとpinModeのメソッドは動作しないようです。
$ sudo node app.js |
SDカードのUbuntu14.04はカーネルを3.14に上げていました。
$ uname -a |
Problem with GPIO / pinMode #93を読むとOctalScriptを推奨しているのでこちらを試してみます。
3.8.x kernelでないとCylon.jsもエラーになる
だだしこの状態だとCylon.jsのcylon-beagleboneもLEDのデバイスを操作できません。Cylon.jsを動かすことが目標なので不都合がでてきます。しばらくはCylon.jsを使う場合、kernelを3.8.13のままにしているeMMCのDebianをブートします。
OctalBoneScriptのサンプル
OctalScriptはBoneScriptをより安定させ良くテストされたNode.jsのライブラリを提供することを目的としています。そのためBoneScriptで書いたコードはOctalBoneScriptと互換性があります。前回コードからrequire
するモジュールをoctalbonescriptに変更します。また秒でLチカが終了するようにタイマーのクリアも追加しました。
/*eslint-env node */ |
OctalBoneScriptのバージョンは0.4.12です。
$ npm list octalbonescript |
DEBUG=bone
を追加して起動するとデバッグモードで起動できます。ようやくLチカができるようになりました。
$ sudo DEBUG=bone node app.js |
error: CapeMgr not found: undefined
Lチカは成功しましたがerror: CapeMgr not found: undefined
のエラーメッセージが出ています。すでにリポジトリのIssuesに上がっていました。error: CapeMgr not found: undefined #11
kernel 3.14ではCapeの構成を動的に変更することができなくなっているようです。OctacBoneScriptではGPIOとしてPinを使うモード変更はサポートされていないためエラーが発生しますが、一応Lチカはできるみたいです。