BeagleBone の Node.js に express を導入したところで Web ブラウザから LED のオンオフをさせてみる。http://address:port/led/ON で USER LED3 を点灯、http://address:port/led/OFF で消灯させる。実はとても簡単だ。
まず、app.js に Routes を追加。
// Routes app.get('/', routes.index); app.get('/led/:sw', routes.led); これを追加
routes/index.js に LED 操作と応答を追加する。
/* * GET home page. */ exports.index = function(req, res){ res.render('index', { title: 'Express' }) }; // これ以下を追加
var bb = require('../bonescript'); var ledPin = bone.USR3; setup = function() { pinMode(ledPin, OUTPUT); } bb.run() console.log("bb run"); exports.led = function(req, res) { if (req.params.sw == 'ON') { digitalWrite(ledPin, HIGH); } else if (req.params.sw == 'OFF') { digitalWrite(ledPin, LOW); } res.write(req.params.sw); res.end(); }
ベースディレクトリ以下に /var/lib/cloud9/bonescript ディレクトリをコピーしておく。これで OK。app.js を起動してブラウザから URL にアクセスすれば LED 点灯で ON、消灯で OFF が表示される。今回は簡単な文字列を返しただけだが、HTML で自動リフレッシュを仕込めば簡単Lチカのできあがり。
同じように BeagleBone での入力も得られる筈だと思ったのだけれども、どうやるんだこれ。digitalWrite はあるけど digitalRead が無い。Linux の GPIO 操作に則ってデバイスファイルから読み込めば良い筈なんだけど適当に書いて実行するとエラーになった。これについては追って調べることにしよう。i2c 入力についてはサンプルがある。
次回は ajax でインタラクティブに操作してみる。
[2012.01.18 追記]
入力がうまくゆかないのは pinMode で GPIO の設定(mux)をする際に MODE7 設定と併せて常に出力モードにしているため。入力時には 0x07 || 0x30 (入力+プルアップ指定)とすれば良い筈だ。と言うか、そもそもここで mux をいじる必要あるのか?
おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。