色々な情報があって戸惑ったので、自分向けのメモを兼ねて共有します。
使ったもの
raspberry pi B+ブレッドボード
LED
抵抗
オスメスジャンパワイヤ
nodejsのインストール方法
apt-getで古いバージョンをインストールして、古いバージョンの機能を利用して新しいバージョンをインストールします。下記のコマンドで古いバージョンのnpmをインストールします。
sudo apt-get install npm
apt-getでnpmをインストールすると、古いバージョンのnodejsも自動的にインストールされます。
新しいバージョンのnodejsとnpmをインストールします。
sudo npm install -g n sudo n stable sudo npm update -g npm
インストールできました。
余談:
nodejsのバージョンが古い状態でnpmをアップデートしようとしても、アップデートできませんでした。
nodejsのアップデートを先にする必要があります。
「sudo npm -v」と「npm -v」で表示されるバージョンが異なるときは、ターミナルを立ち上げ直すか、raspberry piを再起動すると新しいバージョンに統一されます。
自分の場合npmのapt-getでのインストール時に、このようなエラーが出ました。
E: Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/o/openssl/libssl-doc_1.0.1t-1+deb8u5_all.deb Connection failed [IP: 203.178.132.80 80] E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
この場合、下記のコマンドを実行してからインストールを再実行するとうまくいきました。
sudo apt-get update --fix-missing
参考:
Raspberry Pi 3に最新のNode.jsをインストールする
Node.jsとnpmをアップデートする方法
Lチカする方法
プログラムの作成
適当な場所にgpioを操作するプログラムを作成します。mkdir ~/draft_projects cd ~/draft_projects vi gpio_led.js
14番ピンに接続されたLEDの1秒点灯、1秒消灯を5回繰り返すプログラムです。
~/draft_projects/gpio_led.js
var fs = require('fs'); var gpio_dir = '/sys/class/gpio/'; var led_pin_num = 14; var gpio_led_path = gpio_dir + 'gpio' + led_pin_num; var is_led_on; var led_on_counter = 0; var finish_led_on_count = 5; // export setting fs.writeFileSync( gpio_dir + 'export', led_pin_num ); // direction setting fs.writeFileSync( gpio_led_path + '/direction', 'out' ); console.log('finished setting'); // init led fs.writeFileSync( gpio_led_path + '/value', 1 ); is_led_on = false; // turn off led after 1 sec var blink = setInterval(function(){ if ( led_on_counter >= finish_led_on_count ) { fs.writeFileSync( gpio_dir + 'unexport', led_pin_num ); clearInterval(blink); console.log('finished.'); return; } if ( is_led_on ) { fs.writeFileSync( gpio_led_path + '/value', 1 ); is_led_on = false; led_on_counter ++; console.log('turn on'); } else { fs.writeFileSync( gpio_led_path + '/value', 0 ); is_led_on = true; console.log('turn off'); } }, 1000);
LEDを設置
gpioで操作するLEDを設置します。今回利用するのはraspberry pi B+なので、下記のように配線します。
gpioで操作していなくても、電流が流れているからか、ぼんやりLEDが光ります。
プログラムの実行
LEDの配線とプログラムのコーディングが済んだら、下記のコマンドでプログラムを実行します。cd ~/draft_projects sudo node gpio_led.js
うまくいくとLEDが5回点滅します。
実行時に下記のようなエラーが表示された場合、書き込み対象のパスが開かれたままになっている可能性があります。
fs.js:786 return binding.writeBuffer(fd, buffer, offset, length, position); ^ Error: EBUSY: resource busy or locked, write at Error (native) at Object.fs.writeSync (fs.js:786:20) at Object.fs.writeFileSync (fs.js:1343:24) at Object.(/home/pi/mabee/led_test.js:12:4) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10)
この場合、下記のコマンドでピンをunexportすると、動作するようになります。
echo 14 > /sys/class/gpio/unexport
参考:
プログラム作成の参考にしました。
http://qiita.com/koki_cheese/items/a4555d6ec3a32273cf36
https://ics.media/entry/10547/2
gpioのピン一覧です。
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
以上です。
何かの参考になれば嬉しいです。
更新履歴
2016/10/25nodejsのインストールを、apt-get、npm、nを利用する方法に変更しました。
2017/07/15
sudoでnodeのバージョンが異なる場合、の対処法にターミナルの再起動を追加しました。
0 件のコメント :
コメントを投稿