0

Raspberry PiでRuby/Arduino/Twitter/webcam

Raspberry Piが届いたのでセットアップしてArduinoでサーボモーター動かしたり、CdSで明るさ読んでTweetしたり、webcamでJPEGに撮影したりした。
raspbianというほぼdebianなOSを入れたのでかんたんだった。


購入

RSコンポーネンツをキャンセルしてModMyPiでケース付きのを買った。10日ぐらいで届いた。
Makershedでも売ってる。

RaspberryPi + modmypi case


SDカードにRaspberry Piを書き込む


akiroom情報でRaspbian “wheezy”を使うことに。

Amazonで買った16GBのSDHCカードに入れた。4GBあれば足りると思うけど安かったので16GB。

Amazonベーシック SDHCカード 16GB class10
AmazonBasics
売り上げランキング: 20


http://www.raspberrypi.org/downloadsからzipでダウンロードしてきて、
MacでUSBメモリにUbuntuのインストールディスク作ると同じ手順でSDカードに書き込んだ。
ただし今回はRaspberry Pi用にカスタムされたディスクイメージ(インストールディスクではない)をそのままいれる。


SDカードを抜いた状態と刺した状態でそれぞれ
mount
で増えてるデバイスを見つける。/dev/disk3が増えていた。


zipでダウンロードしてきたディスクイメージをdmgに変換してSDカードに書き込む
unzip 2012-10-28-wheezy-raspbian.zip
hdiutil convert -format UDRW -o 2012-10-28-wheezy-raspbian.dmg 2012-10-28-wheezy-raspbian.img
sudo diskutil umountDisk /dev/disk3
sudo dd if=2012-10-28-wheezy-raspbian.dmg of=/dev/rdisk3 bs=1m
sudo diskutil eject /dev/disk3


Raspberry Pi起動

SDカード、LANケーブル、USBキーボード、そしてHDMIをモニタに刺して、最後にMicroUSBで電源を刺して起動。
SSHを有効にするかとかlocaleとかの設定が出る。
基本的に全部ja-JP.UTF-8にしてSSHは有効のまま起動。

Raspberry Pi boot
CUIでログインできた。


あとはもう普通のdebianなので、普通に設定する。
Raspberry Piの日本語化 – ナントカ嬢とかを参考に。


パスワード変える

誰でもpi:raspberry でログインできてしまうので、
passwd
で変える。


電源を切る

sudo halt

再度電源入れたらなかなか起動しなくてあせったが、なんかSDカードに書き込んでた。
2回目の起動からはGUIが立ち上がった。ふつーにpython gamesでオセロとかやってたら時間経ってた。
Raspberry Pi boot


ユーザ名

いつも使ってる名前のユーザを追加してしばらく操作したけど、
Pi以外だと音をだす時とシリアルポートを使う時にpermissionが無いと言われるので、Piのままの方がヨサゲ


SSHでログイン

Raspberry PiのIPアドレスを調べる
sudo ifconfig
192.168.1.109だった

キーボードが多いと邪魔なので、手元のMacからログインする。
ssh pi@192.168.1.109


手元のMacの~/.ssh/configに
Host pi
HostName 192.168.1.109
port 22
User pi
こういう設定を書いて、

ssh pi
で接続するようにした。


色々アップデート、日本語環境

ディスクが遅いのか、けっこう待つ
sudo apt-get update
sudo apt-get upgrade

sudo apt-get install console-data
sudo apt-get install language-pack-ja
sudo apt-get install ttf-takao-mincho ttf-takao
sudo apt-get install locales
sudo dpkg-reconfigure locales


環境を整える

sudo apt-get install emacs23-nox screen zsh git


他のlinuxでいつも使ってる設定ファイルを持ってきて快適化
https://github.com/shokai/linux-dotfiles
https://github.com/shokai/mac-dot-emacs


zshellを使う
which zsh
chsh


ネットワーク設定

USBにWiFi刺した。

参考:WiFi/HowToUse – Debian Wiki

/etc/network/interfaces を設定する。
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
wpa-ssid 自宅のSSID
wpa-psk WPAのパスワード
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1


設定を有効に
sudo /etc/init.d/networking restart


これでしばらくは固定IPでWPA2なWiFiに接続できていたんだけど、理由はよくわからないが接続できなくなったのでeth0のほうを使うようにした。
あとで何とかする。

何とかした → Raspberry PiにWiFi付けた


Rubyをインストール


-fullパッケージができてインストール楽になりましたね
sudo apt-get install ruby1.8-full rubygems

ruby -v
gem -v
ruby 1.8.7 (2012-02-08 patchlevel 358) と gem 1.8.24が入った。

もう1.8は終わったので1.9以上にしたほうがいいです(2013年6月)

Twitterする


Twをインストールした

sudo gem install tw system_timer
tw # 認証する
tw raspberry piからtwでtwitterしてる



Arduinoを使う


Arduino Firmtaa gemでサーボやLEDやらを動かしてみた
sudo gem install arduino_firmata



Arduino IDEで [File] -> [Examples] -> [Firmata] -> [StandardFirmata]をArduinoの書き込んでおく。


デバイス名はDuemillanoveだとttyUSB0、UNOだとttyACM0らしい。
Duemillanoveは一度使うと抜き差ししないと認識しなくなるバグが発覚した。あとで直す。
UNOは問題ない。

直した → Raspberry Pi + Firmata + Arduino Duemillanoveのバグを直した


digital 11にLED、digital10にサーボを接続した
#!/usr/bin/evn ruby
require 'rubygems'
require 'arduino_firmata'

arduino = ArduinoFirmata.connect ARGV[0]

loop do
puts "0 -> 180"
arduino.digital_write 13, true
0.upto(180) do |i|
arduino.analog_write 11, i
arduino.servo_write 10, i
sleep 0.01
end

puts "180 -> 0"
arduino.digital_write 13, false
180.downto(0) do |i|
arduino.analog_write 11, i
arduino.servo_write 10, i
sleep 0.01
end

end


明るさをツイート


CdSをArduinoのAnalog 0に接続
Arduino 温度・明るさセンサ設置


ワンライナーでツイート
echo "Raspberry Piの明るさ `arduino_firmata --arduino=/dev/ttyACM0 analog_read 0`" | tw --pipe



これを使った → プログラムを一切書かずに、ネットワーク越しにArduinoを操作する

crontabに登録しておけば定期的にツイートできる。


USBカメラで撮影

CUIでUSBカメラキャプチャをやる
logicoolの古いwebcamがあったので使った。(上の写真のやつ)
古くてもう売ってないっぽい。
Raspbianなら、USB video class対応しているwebcamつまり最近のやつならどれでもドライバ無しで認識すると思う。


sudo apt-get install fswebcam
カメラつなげて
fswebcam -d /dev/video0 -D 2 -r 400 --jpeg 95 capture.jpg
これで撮影できた。

0

cometだけどsinatraからサーバープッシュできれば関係ないよね

前に書いたsinatra/streamingでcometするやつを使いやすいようにgemにして、sinatra-cometioというsinatraのpluginを作った。
https://github.com/shokai/sinatra-cometio

thin等のEventMachine上のサーバーで動く。Apache+Passenger等では動かない。


チャットを作った例 http://cometio-chat.herokuapp.com


インストール

gem install sinatra-cometio


なかなか簡単に使えるようになっている。socket.ioを参考にした。

サーバー側
onのイベント名でクライアント側からのアレを受け取って、クライアント側のイベント名を指定して送り返す
require 'sinatra'
require 'sinatra/cometio'

## echo
CometIO.on :chat do |data|
puts "#{data.name} : #{data.message}"
self.push :chat, data # server --> client
end

require ‘sinatra-cometio’すると /cometio 以下にcomet用のrouteやjsファイルが生成されるようになっている。


クライアント側
jQueryが必要。
cometio.jsを読み込むんだけど、cometio.jsのURLはcometio_jsというヘルパー関数が返してくれる
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="<%= cometio_js %>"></script>


on(イベント名, callback)でサーバーから来たデータを受け取る。push(イベント名, データ)でサーバーに送る。
var io = new CometIO().connect();

// client <-- server
io.on("chat", function(data){
consle.log(data.name+" : "+data.message);
});

// client --> server
io.push("chat", {name: "shokai", message: "hello"}); // 送信ボタン押したイベントとかから呼び出す


ちゃんと測ってないけど500ぐらいぶら下がってしばらくすると接続エラーが出始めた。300ぐらいなら問題ない。
大してメモリも食わないのでforkしておけばいいのではないか

まだsessionがないので、つないでいるクライアント全員に送るしかない、なんとかする

USBメモリからUbuntuインストールした はコメントを受け付けていません。

USBメモリからUbuntuインストールした

MacでUbuntuのインストールUSBメモリを作って、ネットブックに入れた。
うちにはCD-Rを焼けるマシンが無い。


デスクトップ版Ubuntu12.04.1のisoファイルをダウンロードしておく
Ubuntu Desktop 日本語 Remix CDのダウンロード | Ubuntu Japanese Team


isoをdmgに変換

hdiutil convert -format UDRW -o ubuntu-ja-12.04.1-desktop-i386.dmg ubuntu-ja-12.04.1-desktop-i386.iso

USBメモリを抜いた状態と刺した状態でそれぞれmountコマンドを使って、増えてるデバイスを探す。
/dev/disk2が増えていた。


書き込む。ボロいUSBメモリだったので20分ぐらいかかった。
sudo diskutil umountDisk /dev/disk2
sudo dd if=ubuntu-ja-12.04.1-desktop-i386.dmg of=/dev/rdisk2 bs=1m
sudo diskutil eject /dev/disk2

取り出してネットブックに刺してUSBメモリからブートしてインストール完了。

参考:MacでubuntuのインストールUSBメモリを作成する | Act as Professional – hiroki.jp by HIROCASTER

0

CUIでUSBカメラキャプチャ

Mac用


imagesnapを使う
% brew install imagesnap
% imagesnap capture.jpg
capture.jpgに保存される。


連写もできる。ファイル名の後ろに時刻が入るのでどんどん画像が増える。
% imagesnap -t 0.5 capture.jpg

ここからダウンロードしてきてもok
ImageSnap: Capture images from iSight and other sources from the command line


Ubuntu用


% sudo apt-get install fswebcam
% fswebcam -d /dev/video1 -D 2 -r 400 --jpeg 95 capture.jpg
capture.jpgに画像が保存される

連写すると、同じファイルに上書きされる。
% fswebcam -d /dev/video1 -D 2 -l 1 -r 400 --jpeg 95 capture.jpg


あまり連続保存するとディスクが痛みそうなので、ramdiskを使うといい
[Ubuntu]ramdiskを使う – 橋本詳解
[Mac]ramdiskを使う – 橋本詳解

0

電子工作始めたての頃に読むと良い部品屋のRSS

電子工作を始めたての人は、まず世の中にどんな部品が存在するのかを把握すると良いと思う。

このへん3ヶ月ぐらい読んでると、どんな部品が存在するのかわかってくる(他におすすめなRSSあったら教えてください)


秋月の新商品
http://shokai.herokuapp.com/feed/akizuki.rss


aitendoの新商品
http://www.aitendo.com/rss/rss.php


ストロベリーリナックスの新商品
http://pipes.yahoo.com/pipes/pipe.info?_id=43d7a8defa45bcda73071c0a157abadf


マルツのblog
http://marutsumake.blog74.fc2.com/?xml


共立のblog
http://blog.siliconhouse.jp/atom.xml


sparkfunのニュース
http://www.sparkfun.com/feeds/news


あまり多すぎても大変なので、ジャンルが被らない感じで適当に選んでみた。
どれも新入荷商品や商品紹介blog。大きい写真多めでfeedが全文配信されているので、よくわからん部品でもパラパラ見やすい。

何に使う部品か理解できなくても、気にせず名前や外見に見覚えがある部品を増やす。そのうち、それらが結合されて回路図とかが理解できるようになる。なのでパラパラ見ると良い。