0

Raspberry PiにrbenvでRuby2.0.0インストールした

aptのrbenvが0.3.0と古かったので

Ubuntu12.04にrbenvインストールして、crontabやdaemontoolsも設定した

と同じ手順で0.4.0をgitから入れた。
けどビルドに2時間以上かかったので、aptで1.9.3-p194を入れればいいと思う。


crontabや、foremanで書きだしたupstartも

/home/pi/.rbenv/shims/bundle exec ruby hogehoge.rb
で起動したら問題なく動いた。

0

Raspberry Pi/Raspbianでupstartを使う

% sudo apt-get install upstart
でsysvinitが消えてupstartが入り、
一度リブートしたら有効になった。

0

Sinatra RocketIOで家のRaspberry PiのArduinoをリアルタイムで見る

RocketIOのサンプルとして、それなりに激しい処理が低スペックマシンで動くかテストするために作った。

http://status.shookai.org

ソースコード
https://github.com/shokai/rocketio-arduino-sample


こういうのが表示されてるはず


物理的な意味ではこうなってる
R0020611


Arduino Firmata on Rubyで、ADコンバータに温度センサと明るさセンサを付けたArduinoを読んで0.3秒毎にSinatra RocketIOでブラウザにpushしている。

5秒毎にCPUとメモリ使用量もpushしてる。
あと新規接続/切断がある度に全クライアントに接続数を通知してる。


60行ぐらいのSinatra40行ぐらいのJavaScriptでできてる。


JavaScript側を抜粋すると、こんな感じでそれぞれイベント待ちしておいて

io.on("arduino", function(data){
$("#temp").text("気温:"+data.temp+"度");
$("#light").text("明るさ:"+data.light);
});

io.on("stat", function(data){
$("#cpu").text("CPU:"+data.cpu+"%");
$("#mem").text("メモリ:"+data.mem+"%");
});

io.on("clients", function(data){
$("#websocket").text("websocket:"+data.websocket);
$("#comet").text("comet:"+data.comet);
});


サーバー側はsinatraの中にArduinoでセンサーを読むEventMachineのタイマーをベタ書き。
io = Sinatra::RocketIO

## Arduino sensors
io.once :start do
begin
arduino = ArduinoFirmata.connect ENV['ARDUINO'], :eventmachine => true
rescue => e
STDERR.puts "#{e.class} - #{e}"
next
end
EM::add_periodic_timer 0.3 do
light = arduino.analog_read 0
$logger.debug "light : #{light}"
temp = arduino.analog_read(1).to_f*5*100/1024
$logger.debug "temperature : #{temp}"
io.push :arduino, :temp => temp, :light => light
end
end
CPUとメモリは同じ要領で、psコマンドの結果をparseして送ってる。


Sinatra側で定期的に行う処理は、 Sinatra::RocketIO.once :start の中で登録すると良いです。
“start”はeventmachineとwebsocketサーバーの準備が整ったら発火するイベント。
onではなくonceなのは1回目だけ呼ばれるという意味。


あと、Arduino Firmataの最近のバージョンからeventmachine用の起動オプションを付けた。
ArduinoFirmata.connect "/dev/tty.usbデバイス名", :eventmachine => true
EM::runの中でこうやって起動するとThreadのかわりにeventmachineで動くようになった。
Sinatraの中で動かすときはこうしないと、タスク切り替えがうまくいかない。

11

Raspberry Piに喋らせる

Raspberry Piが音声で状況報告してくれると、画面を接続していなくても状況がわかって便利です。
音はUSBスピーカで出した方がいいですね。ヘッドフォン端子からの出力は無音でもブチブチ音が出ててきびしい。

OSはraspbian使ってる。

OpenJTalkをインストールする


Mac/Linuxに日本語を喋らせるに書いたOpenJTalkをセットアップする

sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic htsengine libhtsengine-dev hts-voice-nitech-jp-atr503-m001

デフォルトの声が怖いのでMMD agentの声を入れる
wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.3/MMDAgent_Example-1.3.zip
unzip MMDAgent_Example-1.3.zip
sudo cp -R MMDAgent_Example-1.3/Voice/* /usr/share/hts-voice/

OpenJTalkに喋らせるコマンドを作った。適当な場所に置いておく。
jsay はい
で喋る。


スピーカ

USBスピーカ接続するとドライバインストールや設定なしですぐ音がだせる。


音をヘッドフォン端子から出す

R-Pi Troubleshooting – eLinux.orgより
sudo amixer cset numid=3 1
1じゃなく2にするとHDMIから出る。0は自動判別


ヘッドフォン端子の音量調節

sudo apt-get install alsa-utils
amixer set PCM 0%
amixer set PCM 20%
のようにして設定する。
でもプチプチ音がひどい。

ファームウェアアップデート

ファームウェアアップデートしたら音が良くなるらしいのでやってみる
https://github.com/Hexxeh/rpi-update
READMEの通りにやる。
Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS
Performing self-update
sARM/GPU split is now defined in /boot/config.txt using the gpu_mem option!
Updating firmware (this will take a few minutes)
fatal: Failed to resolve 'HEAD' as a valid ref.
動かない。


結論:USBスピーカ買え

1

Raspberry Pi + mjpg-streamerでwebcam動画配信


HTMLにimgタグで埋め込んでwebブラウザで見れる


これそのままやってみた → Raspberry Pi に Webカメラを接続して動画を配信してみる Chick Lab
ロボット作ったりしててすごい Raspberry Piでロボットを作る Chick Lab


mjpg-streamerインストール

sudo apt-get install subversion libjpeg-dev imagemagick
svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
cd mjpg-streamer/mjpg-streamer
make


カメラ起動


20fpsで配信するとCPU90%使っちゃってApache2を殺したりしたので、2fpsにしたら10%前後になった。
./mjpg_streamer -i "./input_uvc.so -f 2 -r 320x240 -d /dev/video0 -y" -o "./output_http.so -w ./www -p 8080"

port 8080 で起動する。


普通にHTMLにimgタグで埋め込んだら動画になった。
<html>
<body>
<h1>Raspberry Pi</h1>
<img src="http://192.168.1.6:8080/?action=stream">
</body>
</html>