0

Raspberry Piにnode.jsインストール

raspbianの場合、aptからインストールできるnodeは0.6.xなので古すぎる。
しかしソースからビルドするにもRaspberry PiのCPUがあまりにも弱いので2時間かかる。


よく見たらビルド済みのバイナリがあったのでコピーするだけだった

wget http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-arm-pi.tar.gz
tar -zxvf node-v0.10.24-linux-arm-pi.tar.gz
sudo mv node-v0.10.24-linux-arm-pi /usr/local/node

export PATH=/usr/local/node/bin:$PATH

node -v
v0.10.24

ただ、nodeだけgrunt-cliやsupertestのpackage.jsonがJSON parse errorにでインストールできない事がある。よくわからないけど

0

Raspberry PiのGPIOを使う

Raspberry Piの基板上のIC(BC2835)から出ているGPIOを使ってみた。
とりあえず3Vを出してLEDを光らせたり、スイッチをつないでon/offを検出したりした。
がんばればPWMやI2Cもできる。

回路

まずGPIOをオスメスのジャンパワイヤでブレッドボードに引き出す。
23,24番とGNDを引き出してLEDをつないだ。
18番とVCCの間にタクトスイッチを入れて、100Ωのプルダウン抵抗もつけた。

ピン配置は
RPi Low-level peripherals – eLinux.org
に書いてある。


デバイスファイルからGPIOを操作

Raspbianの場合、/sys/class/gpio/以下のデバイスファイルに標準入力するとGPIOが使える。
sudo su
echo 24 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio24/direction
echo 1 > /sys/class/gpio/gpio24/value ## LED点灯
echo 0 > /sys/class/gpio/gpio24/value ## LED消灯
rootじゃないと書き込めないのだが、sudoでpipeの右辺にroot権限を持たせる方法がよくわからなかったので事前にsudo suした。


pi_piper gemを使う

WiringPiが先存在してて有名なようだが、試したら動かなかった(エラーも出ない)のでpi_piperを使う。
WiringPiはC拡張だが、pi_piperはFFIとEventMachineを使ってGPIOを使っている。
・・・のだけど、ソースを読んだ感じたぶんFFIを使っているのはBC2835のI2C機能などを使う部分だけで、単純なdigital read/writeの操作はデバイスファイルごしにFile.openでやっている。
入力ピン状態変化イベントが遅く感じるのも、eventmachine使ってるのにThreadやsleep使ったりしているせいだと思う。ちょっと手を入れるとすごく速くなりそうなのであとでやる。


インストール
sudo gem install pi_piper
ネイティブコードをコンパイルするので少し時間がかかる。


pi_piperでLEDの点滅

GPIO 23,24番を1秒ごとに点灯消灯した。
非常にオブジェクト指向で良いと思う。

blink.rb
require 'pi_piper'

pin_a = PiPiper::Pin.new :pin => 24, :direction => :out
pin_b = PiPiper::Pin.new :pin => 23, :direction => :out

loop do
pin_a.on
pin_b.off
sleep 1
pin_a.off
pin_b.on
sleep 1
end
これも実行にはroot権限が必要
sudo ruby blink.rb


pi_piperでスイッチの押下判定

18番スイッチのon/off変化をイベントで取得した。
require 'pi_piper'

PiPiper.watch :pin => 18 do
puts "#{last_value} -> #{value}"
end

PiPiper.wait

ボタンを押したり離したりする毎にprintされる。

1

Raspberry PiのSDカードをコピーする

Raspberry Piはアプリケーションを動かしている時はスペックに不満は無いんだけど、セットアップに時間がかかる。
CPUが遅いからraspbianをインストールして色々セットアップが済むまで6時間以上はかかる。

そこで、よく使うものをあらかじめインストールしつつ、ssh鍵やhistoryなどは削除したものをイメージファイルにしておくことにした。
イメージファイルになっていれば何枚でも別のSDカードに複製できる。


ここに置いた

http://masuilab.org/~sho/furnicomp/README.md
http://masuilab.org/~sho/furnicomp/raspi/


必要なもの

4GBのSDカード、MacかLinux


SDカードからイメージに書き出し


SDカードのデバイス名をチェック
mount
df

イメージに書き出し
diskutil umountDisk /dev/rdisk1
sudo dd if=/dev/rdisk1 of=20130710-furnipi.dmg bs=1m
diskutil eject /dev/disk1
4GBのdmgファイルができる。
元になるSDカードのサイズでイメージのファイルサイズが決まるので、4GBのSDカードを使うようにしている。


gzに固めるとかなり小さくなる。1GB前後になった
tar -zcvf 20130710-furnipi.tar.gz 20130710-furnipi.dmg


日付を付けて http://masuilab.org/~sho/furnicomp/raspi/ にアップロードした

イメージからSDカードへ書き込む


unzip
tar -zxvf 20130710-furnipi.tar.gz


書き込む
diskutil umountDisk /dev/rdisk1
sudo dd if=20130710-furnipi.dmg of=/dev/rdisk1 bs=1m
diskutil eject /dev/disk1


起動


普通にRaspberry Piにさせば起動できる。
ログインはデフォルトのpi:raspberry

4GB以上のSDカードを使っている場合は、raspi-configでパーティションを拡張すれば全領域が使える。
sudo raspi-config
sudo reboot

0

Raspberry Piで録音再生

Raspberry Piに喋らせるの時はライン出力がひどかったけど、ファームウェアアップデートしたら良くなった。

sudo rpi-update


スピーカーはライン出力の普通のやつ、マイクはこれ使ってる
SANWA SUPPLY MM-MCUSB16 USBマイクロホン
サンワサプライ (2009-05-13)
売り上げランキング: 3,017



必要な物をインストール

sudo apt-get install alsa-utils sox libsox-fmt-all
soxは録音再生、wavにエフェクトかけたりできるしMacでも動くから便利
mp3やoggで録音・再生したりもできる。
でも新しく買ったMacbook Airで動かなくて悲しい。Macminiでは動いている。


マイクが認識されているか確認

マイクはUSBマイクを使った。
lsusbやarecord -lでデバイスが認識されているか確かめる。
lsusb
arecord -l


録音再生

export AUDIODRIVER=alsa
AUDIODEV=plughw:1,0 rec test.mp3
AUDIODEV=plughw:0,0 play test.mp3
AUDIODEV=plughw:0,0 play test.mp3 pitch -500 norm reverb


arecord/aplayでも録音再生できる
arecord -D plughw:1,0 -f cd test.wav
aplay -D plughw:0,0 test.wav


参考にした

Raspberry Pi • View topic – sox default device
EzzeP: Raspberry PiにJuliusを動かしてみた(再び)
Rodent's Outrage: Raspberry Pi recording/playback with Sound Blaster Play

2

Raspberry PiにRaspberry PiのUSB HUBから給電する

Raspberry Piは5V1Aの電源を必要とするが、ほぼ全てをRaspberry Pi内で使ってしまうので、外付けHDDやArduinoなどのそれなりに電源食うデバイスを付けると電源が足りない。
例えしばらく動いていても数時間以内に電源が落ちてしまう。もちろんモーターなんかも付けられない。

そこでUSBデバイスには外部電源を給電するためにUSB HUBを使うのだが、それだとRaspberry PiとUSB HUB両方に給電するとコンセントを2つ使ってしまう問題がある。


色々試した結果こうしたらコンセント1つで済んだ。ループしているように見えてループしていない。
2013-06-17 16.22.04

まずBUFFALOの一番安いACアダプタ付きUSBハブにUSB HUB付属のACアダプタで給電する。このACアダプタは5V2.3Aでているので、Raspberry PiとArduino3つとサーボモーターを同時に動かしても足りる。

USB HUBからRaspberry Piに給電し(上側のねじれたケーブル)、Raspberry PiのUSBポートを同じUSB HUBに接続する。ループしているように見えるけど、Raspberry Piの電源用USBコネクタにはUSBデバイスとして認識される機能は無いので問題ない。またこのねじれたケーブルは100円ショップで売っているケータイ充電専用のデータ線が無いケーブルなので、もしも今後USBデバイスとしてPCから認識されるRaspberry Piがでてきても同じ構成でいける。

USB HUBにはArduinoが3つつながっている。モーターが付いているのもあるけどどれも元気に動いている。