Rasbperry piとnode.jsでSPI通信を使用する

adc-pi-spiというnpmモジュールを発見。ちょうどいいので使ってみる。
https://npmjs.org/package/adc-pi-spi

coffeescriptを使っているようなのでcoffeescriptをインストールしておく。

sudo npm install -g coffee-script

サンプルコード
main.coffee

ADC = require 'adc-pi-spi'
options =
    tolerance: 10        #default = 10
    pollInterval: 200    #default = 200
    channels: [0,1,2,3]    #default = [0]

adc=new ADC('/dev/spidev0.0', options)

adc.on 'change', (channel, value)->
    console.log 'channel ', channel, 'is now', value

process.on 'SIGTERM', () ->
    adc.close()

process.on 'SIGINT', () ->
    adc.close()

process.on 'exit', () ->
    adc.close()

実行する。

$ npm install adc-pi-spi
$ sudo coffee main.coffee

バイスが開けないというエラーが出た。

Error: Unable to open device
  at [object Object].Spi.open (/home/pi/project/mcp3208/node_modules/adc-pi-spi/node_modules/spi/spi.js:64:22)
  at /home/pi/project/mcp3208/node_modules/adc-pi-spi/lib/index.coffee:21:4, <js>:36:18
  at new Spi (/home/pi/project/mcp3208/node_modules/adc-pi-spi/node_modules/spi/spi.js:60:29)
  at new ADC (/home/pi/project/mcp3208/node_modules/adc-pi-spi/lib/index.coffee:20:37, <js>:35:19)
  at Object.<anonymous> (/home/pi/project/mcp3208/main.coffee:7:9, <js>:12:9)
  at Object.<anonymous> (/home/pi/project/mcp3208/main.coffee:1:1, <js>:30:4)
  at Module._compile (module.js:456:26)

/dev/spidev0.0っていうところが怪しそうだと思っていると、以下の記事を発見。
http://www.raspberrypi.org/phpBB3/viewtopic.php?p=132128

/etc/modprobe.d/raspi-blacklist.conf
でSPI通信が遮断されているらしい。

# blacklist spi and i2c by default (many users don't need them)                                                            

blacklist spi-bcm2708
blacklist i2c-bcm2708

のSPIの部分をコメントアウトする。

# blacklist spi and i2c by default (many users don't need them)                                                            

#blacklist spi-bcm2708
blacklist i2c-bcm2708

Raspberry piを再起動してもう一度実行する。

$ sudo reboot
$ sudo coffee main.coffee

動いた。

sudo coffee main.coffee 

channel  0 is now 693
channel  1 is now 24
channel  2 is now 40
channel  3 is now 243
channel  1 is now 35
channel  2 is now 0
...

ソースをのぞいたらspiというnpmライブラリに依存していたので
これを使った方法も試してみる。