ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示
ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示

2017-12-28

raspberry pi zero wとダイソーのリモートシャッターとrubyで遊ぶ

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
raspberry pi zero wを買ったのは、bluetooth機器とつないで、ちょっと遊んでみたいなぁと思っていたことも一つの理由だったりします。

お手軽に遊ぶ材料として、ダイソーで売っているリモートシャッターがよさげかと思ってみました。以下と同じもののようです。



これを利用した例を以下のサイトを紹介していたので、参考にさせてもらいました。
https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0

こちらでは、bluebuttonというツールを利用しているのですが、ソースは以下にあります。
https://github.com/kinnalru/bluebutton

こちらのソースを見て、ちょっと遊んでみました。
こちらでは、二つのボタンを特に区別してなくて、押したことと長押しを検出していたので、ボタンを識別できるよう改造してみました。

上のIOSボタンは、押すとVolumeUpが送られてきているようです。
下のandoridボタンは、押すとEnterが来て、さらにVolumeUpが送られてきてるようです。

これで識別できそうなので、改造したのは以下のものになります。
rootで実行する必要があります。
これは、二つのボタンとそれぞれの長押しを検出して、さらにLINEに特定のメッセージを送るようにしてみました。


とりあえずIoTな気分を感じてみました。


2017-12-26

raspberry pi zero wを買ったのでusb接続でセットアップした

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

raspberry pi zero wを買いました。本当は単体で買いたかったのですが、なかなか単体で買えないのと、手ごろな手持ちのSDカードがなかったのと、電源もほどよいのが、ちょうどなかったので、ちょっと割高かなと思いましたが、セットで購入しました。

セットアップはusbでwindowsと接続して行うことができました。
手順は、
https://qiita.com/marron-akanishi/items/2ce4ae07c71dc8358093

https://qiita.com/gpsnmeajp/items/126fadd3e47cdd4a6c00
を見ればよさげです。
無線の設定の部分はraspi-configで設定したぐらいの違いしかないです。

途中でsshでraspberrypi.localと指定して接続するのですが、
うちにはすでに旧型のraspberry piがいて、
すでにraspberrypi.localを使っていたので、旧のほうにつながってしまいます。
新しいの方のを最初から名前を変える方法を探したのですが、
ちょっと見つからなかったので、最初に使っているraspberry piの電源を落として
raspberrypi.localで新しい方につながるようにしました。

その後、以下を参考に名前を変えました。
https://www.1ft-seabass.jp/memo/2015/04/21/raspberry-pi-hostname-memo/
名前を変える際は、無線LAN接続できるようにして、
無線でIPでも接続できるようになったのを確認してから変えたほうが良いです。
最初、上記を参考にせず間で名前を変えて、
無線設定も適当に確認しただけでやったら失敗して、
接続できなくなって最初からやりなおしになったりしたので、ご注意を。

2014-09-25

Raspberry Piで音声合成してしゃべらせてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piで音声合成を試してみます。

以下を参考にしています。
http://shokai.org/blog/archives/6893

Raspberry Piで音が出るようにするには、以下を参照ください。
Raspberry Piで録音再生をしてみる


音声合成にはopen-jtalkというものを利用します。

まずはopen-jtalkをインストールします。
sudo apt-get install open-jtalk hts-voice-nitech-jp-atr503-m001 open-jtalk-mecab-naist-jdic

デフォルトとは別の音声データを用意します。
wget http://downloads.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.3.1/MMDAgent_Example-1.3.1.zip
unzip MMDAgent_Example-1.3.1.zip
sudo cp -R MMDAgent_Example-1.3.1/Voice/* /usr/share/hts-voice/

ここまでくれば、音声合成はもう少しです。
open-jtalkで実際にしゃべらせるには、なんか面倒なコマンドを打つ必要があるようです。
それを簡単にするためのスクリプトが公開されているので使わせていただきます。

wget https://gist.githubusercontent.com/shokai/2892965/raw/jsay
chmod 755 jsay

ちなみにスクリプト内の最初の方でcdしている部分を変更することで声を変えることができるようです。

試してみます。
./jsay だめよー。だめだめ

い~~じゃないの~~

2014-09-24

Raspberry Piで録音再生をしてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piで録音と再生をしてみます。

以下を参考にしています。
http://cubic9.com/Devel/%C5%C5%BB%D2%B9%A9%BA%EE/RaspberryPi/%C6%FC%CB%DC%B8%EC%B2%BB%C0%BC%C7%A7%BC%B1/

今回、録音再生するために使ったのは、以下のものになります。
Raspberry PiにUSB接続して、これにスピーカやマイクを接続して使います。
 

まずは、機器を使えるようにします。いろいろ作業用に事前にrootになっておきます。
sudo su -

まずは接続されていることを確認します。
lsusb
とコマンドをうって
Bus 001 Device 006: ID 0d8c:013a C-Media Electronics, Inc.
みたいのが出ていれば、きちんと認識されています。

音関連モジュールの優先度を確認します。
cat /proc/asound/modules
---------------
0 snd_bcm2835
1 snd_usb_audio
---------------
となっていれば、内蔵オーディオが優先されているので、USBで接続したものの優先度をあげる設定が必要です。

変更は、以下のファイルに対して行います。
/etc/modprobe.d/alsa-base.conf

変更の仕方を検索すると以下の部分のコメントアウトして
#options snd-usb-audio index=-2

options snd_bcm2835 index=-2
を追加してsnd_bcm2835の優先度を下げる方法と

options snd-usb-audio index=0
を追加してsnd-usb-audioの優先度をあげる方法の2通りがある感じです。

今回はsnd-usb-audio優先度をあげてみます。
vi /etc/modprobe.d/alsa-base.conf
---------------
# options snd-usb-audio index=-2
options snd-usb-audio index=0
---------------

設定を変更したら再起動します。
reboot

再起動したら、またrootになっておきます。
sudo su -

cat /proc/asound/modules
としてUSBオーディオが優先されていることを確認します。
---------------
 0 snd_usb_audio
 1 snd_bcm2835
---------------

とりあえず音が出るかを確認してみます。mplayerというを使ってみます。
apt-get install mplayer

とりあえず最初から入っているmp3ファイルを探してみます。
find / -name *.mp3

見つけたファイルを再生して音が出ることを確認してみます。
mplayer /usr/share/scratch/Media/Sounds/Vocals/Sing-me-a-song.mp3

ちなみに音がなっている間に*を押すと音量が上がり、/を押すと下がるようです。


いよいよ録音を試して見ます。

まず、マイクの感度を最大にしておきます。
amixer sset Mic 16

録音は以下のような感じです。
arecord -r 16000 -f S16_LE test.wav

マイクでしゃべり終わったらcrtl+Cを押すと録音が完了します。

録音したものの再生は以下の感じです。
aplay test.wav



2014-06-05

Raspberry Piにつないだカメラの画像をfluentdに送ってみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piにつないだカメラで撮影した静止画のデータを別のマシンのfluentdに送って、保存してもらうことを試して見ました。


Raspberry Piでカメラ画像を処理するのにはOpenCVを使ってみます。

Raspberry PiでOpenCVを使えるようにする方法は、以下を参照してください。
Raspberry PiでOpenCVをrubyで使ってみた

そして、画像でデータを受け取るfluentdの方の設定については以下を参照してください。
fluentdに画像データを送ってみる


ここでは、Raspberry Piでカメラデータを取得して、fluentdにデータを送る部分を紹介します。

Raspberry Piでfluentdにデータを送れるようにするためにfluent-loggerをインストールします。
sudo gem install fluent-logger

カメラ画像をfluentdに送るプログラムは以下のような感じです。

vi send_image.rb
require 'opencv'
require 'fluent-logger'
require 'base64'

log = Fluent::Logger::FluentLogger.new(nil, :host=>'fluentdが起動しているホスト', :port=>24224)
cap = OpenCV::CvCapture.open

loop do
  #撮影間隔を以下のsleepで調整
  sleep 1

  img = cap.query
  #おくる画像のサイズを指定する場合は、以下のコメントをとる
  #img = img.resize OpenCV::CvSize.new 640, 360
  mat = img.to_CvMat
  data = Base64.encode64(mat.encode('.jpg').pack('C*'))

  unless log.post("exec_test.image", {"sender"=>"raspberry pi","image_data"=>data})
    p log.last_error # You can get last error object via last_error method
  end
end


これで
ruby send_image.rb
とすれば画像データをfluentdに送って、fluentd側では指定したディレクトリに画像を溜め込んでいきます。


そして、ため込んだ静止画データを利用して動画を作ってみたいと思ったわけです。
タイムラプスとかいうやつです。

ここからはRaspberry Pi側ではなく、fluentdが動いている側での作業になります。

静止画を動画に変換するためにffmpegを利用してみます。

なので、まずはインストールです。
yum --enablerepo=rpmforge install ffmpeg

ffmpegで静止画を動画に変換するには、ファイルに連番がついていないといけない模様です。
今回は、データを受け取った時間でファイル名が決まるようにしていたので、そのままでは使えません。

なので以下でファイル名を連番に変換します。
c=1 ; for i in *.jpg ; do ln $i img`printf %06d $c`.JPG ; c=$((c+1)) ; done

ファイル名を連番にできたら、以下を実行して動画に変換します。
ffmpeg -r 15 -i img%06d.JPG  out.avi


ネットワークさえつながればRaspberry Piのディスク容量を気にすることなく、いっぱい撮影をすることができるようになります。

データの送る方法としてfluentdを利用するのが最適なのか?という疑問はありますけどね。


2014-05-04

Raspberry PiでOpenCVをrubyで使ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Rapberry PiでUSBカメラを使う際にmotionを使うのを試してみたのですが、さらに画像からいろいろ認識するとかも試してみたいと思ってみました。

ちなみにmotionを利用する方法に関しては、以下をご覧ください。
Raspberry Piに大人の科学マガジンUSB特撮カメラをつないでみた
Raspberry PiにつないだUSBカメラの画像をブラウザから確認するものをrubyで作ってみた

画像から顔やらなんやらを認識するにはOpenCVを利用するわけです。
OpenCVは
sudo apt-get install libopencv-dev
でもインストールできるのですが、インストールされるバージョンは2.3系のものが入るようです。

OpenCVをrubyから使おうと思ったりする場合は、ruby-opencvというものを利用するのですが、こちらは2.4系を必要とします。

今回はrubyで利用するので、apt-getを利用せずにインストールします。

OpenCVは、以下のようにインストールします。

コンパイルに必要になるものを準備します。以下がすべて本当に必要なのかはよくわかりません。
sudo apt-get install build-essential libboost1.46-all-dev libqt4-dev libgtk2.0-dev pkg-config opencl-headers libjpeg-dev libopenjpeg-dev  libjasper-dev libjasper-runtime libpng12-dev libpng++-dev libpng3 libpnglite-dev libtiff-dev libtiff-tools pngtools zlib1g-dev zlib1g-dbg v4l2ucp python autoconf libeigen2-dev cmake openexr gstreamer-plugins-* freeglut3-dev libglui-dev libavc1394-dev libdc1394-22-dev libdc1394-utils libxine-dev libxvidcore-dev libva-dev libssl-dev libv4l-dev libvo-aacenc-dev libvo-amrwbenc-dev libvorbis-dev libvpx-dev

ソースを取得して展開します。今回は2.4.9を持ってきました。
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
unzip opencv-2.4.9.zip
cd opencv-2.4.9

コンパイルします。cmakeで指定したパラメータの意味は正直よく分かりません。そしてmakeはすごく時間がかかります。
mkdir build
cd build
cmake -DBUILD_DOCS=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=RELEASE -DWITH_TBB=OFF -DWITH_GTK=ON -DWITH_OPENGL=ON -DWITH_QT=OFF -DINSTALL_C_EXAMPLES=ON -DWITH_OPENCL=OFF -DWITH_CUDA=OFF -DWITH_OPENNI=OFF -DWITH_UNICAP=ON -DWITH_V4L=ON -DWITH_XINE=ON  ..
make

インストールします。
sudo make install


そして、ruby-opencvをインストールします。
sudo gem install ruby-opencv


ここまでのものが正しくインストールされたことを確認します。
以下のソースを実行してoutput.jpgにカメラ画像が保存されていればOKです。


カメラ画像から顔認識して顔の部分を四角で囲ってみます。カメラ画像はwebsocketを利用してブラウザで確認できるようにします。

rubyでwebsocketを利用するためem-websocketをインストールします。
sudo gem install em-websocket

で以下のソースを実行します。

実行したらwebsocketで画像を受け取るクライアントを用意します。とりあえず以下のhtmlを用意してブラウザで見れるようにします。
サーバ側においてもいいし、手元のPCにファイルとして用意してもよいのでブラウザから開くと顔認識した画像が見れるはずです。
ブラウザはchromeでしか試していないです。


ちなみに処理はすごく遅いです。体感的には2秒ぐらいで1回画面が切り替わる感じです。


以下がすごく参考になりました。
http://naohiro7.hatenablog.com/entry/2013/04/22/142243
http://shokai.org/blog/archives/8627


2014-01-13

Raspberry Pi上でrubyでOCR

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
先日、CentOS上でrubyでOCRを試しました。
試した内容は、rubyでOCRをご覧ください。

なので、今度はRaspberry PiでrubyでOCRをして見ます。

CentOSと同じようにtesseract-ocrを利用します。

ということで、まずtesseract-ocrをインストールします。
CentOSより簡単で以下でOKです。

sudo apt-get install libtesseract3 libtesseract-dev tesseract-ocr 
sudo apt-get install tesseract-ocr-eng tesseract-ocr-jpn

以下でインストールされたことを確認できます。
tesseract -v


で、お次はrubyで使えるようにするtesseract-ocrをインストールするわけですが、こちらを利用するには、leptonicaが必要になりました。tesseract-ocrを単独で動かす分にはなしでもOKでした。


なのでleptonicaをインストールします。
コンパイルに結構、時間がかかります。

wget http://leptonica.googlecode.com/files/leptonica-1.69.tar.gz
tar xvzf leptonica-1.69.tar.gz
cd leptonica-1.69
./configure
make
sudo make install

ここまで済んだら、gemをインストールします。

gem install tesseract-ocr


これでCentOSで実行した以下のテストコードが実行できるようになりました。



ちなみにleptonicaをインストールしないでtesseract-ocrを利用したら

なんかエラーが起きたよ
/tmp/.ffi-inline-1000/87da260298e169d1e5d4e8952649b2811b81311e.log
を見てね。みたいなことを言われて、logを見ると以下のようにleptonicaのヘッダーがないといわれてしまいました。

g++ -shared -fPIC    -o /tmp/.ffi-inline-1000/87da260298e169d1e5d4e8952649b2811b81311e.so /tmp/.ffi-inline-1000/87da260298e169d1e5d4e8952649b2811b81311e.cpp -llept 2>>/tmp/.ffi-inline-1000/87da260298e169d1e5d4e8952649b2811b81311e.log
/tmp/.ffi-inline-1000/87da260298e169d1e5d4e8952649b2811b81311e.cpp:1:34: fatal error: leptonica/allheaders.h: そのようなファイルやディレクトリはありません
compilation terminated.


2013-12-02

Raspberry PiとUSBハブにモバイルバッテリから給電しようと思ったけどあきらめた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry PiにいろいろUSBでくっつけるとなるとセルフパワーのUSBハブが必要になってきます。

それでも、いつでもどこでも利用できたらよいなぁと思いモバイルバッテリからRaspberry PiとUSBハブに給電できたら便利かもと思ってみました。

こんな感じです。

結論からいうとモバイルバッテリからUSBハブに給電する方法がわからなかったのであきらめました。

モバイルバッテリからUSBハブに給電するケーブルを自作した方はいました。
http://zigsow.jp/portal/own_item_detail/225839/


ちなみに2ポートあるモバイルバッテリはありました。



で他の方法とかを調べてみたらUSBハブからRaspberry Piに給電とUSB接続両方をさせることができることがわかりました。
http://shokai.org/blog/archives/7865

この方法ならばUSBハブ用にコンセントを一つしか使わないのでこれはこれでよいことを知ったと思ってみました。

どうしても外で使いたいならば、USBハブのコンセントを以下のようなポータブル電源につなぐというのもありかな?

2013-11-06

Raspberry PiにつないだUSBカメラの画像をブラウザから確認するものをrubyで作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry PiにつないだUSBカメラの画像をブラウザ経由で見れて、好きなタイミングで静止画で残せるものをrubyで作ってみました。

と言ってもカメラ画像をmotionでストリーミング処理して、その結果をimgタグで表示しているだけだったりします。

Raspberry PiにUSBカメラをつないでmotionで確認する手順は
Raspberry Piに大人の科学マガジンUSB特撮カメラをつないでみた
をご覧ください。

なのでmotionを動かしておくことが前提ですが、作ったのは以下のような感じのものです。

ざっくりした画面の説明は以下のような感じです。


sinatraを利用していて、ソースは以下においてあります。
https://github.com/vivahiraj/pi_camera


最低限motionの設定として以下をいじる必要があります。
control_localhost off
webcam_localhost off
output_normal off
#ファイルの出力先をsinatraで静的ファイルとしてみることができるpublic配下にする必要があります。
target_dir /home/pi/pi_camera/public/img/motion


ソースを取得した後の利用方法は、最初に
bundle install
をする必要がありますが、
その後、webサーバとして動作させるには以下のようにします。
bundle exec rackup
これで9292ポートでwebサーバが起動します。

撮った画像のリストが別に見れなくてもよいならばmotionが動いているRaspberry Pi上でなく別のマシンで動作させてもカメラ画像は見ることはできるはずです。

2013-10-24

Raspberry Piに大人の科学マガジンUSB特撮カメラをつないでみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
大人の科学マガジンUSB特撮カメラを買ってみました。



なのでRaspberry Piにもつないで見ました。

カメラを接続してRaspberry Piを立ち上げると、あっさりカメラを認識していました。

lsusb

Bus 001 Device 005: ID 058f:3861 Alcor Micro Corp.
みたいな感じのが出てくれば認識されているようです。

私のRaspberry Piの環境は、無線LAN接続してモニタ等は接続していない状態です。
(無線LAN設定に関しては、Raspberry Piを無線LAN対応させてみたを見てください。)
そんな環境なのでUSBカメラの画像はネットワーク経由でブラウザで見る感じにしたいと思ったのです。

それを実現するためにmotionというのを使いました。

motionは、動体検知で利用するものとして有名な感じです。
なにかカメラ撮影しているなかで、何かが動いたら写真を残すみたいなことができます。
今回は動体検知は使わないのですけどね。

インストールは、
sudo apt-get install motion ffmpeg
でOKです。

設定は、
/etc/motion/motion.conf
に記載します。

今回デフォルトから変えたのは以下の項目です。


#motionをネットワーク経由してブラウザで操作できるようするためにoffに変えます
#control_localhost on
control_localhost off

#カメラ画像をネットワーク経由で見えるようにするためにoffに変えます。
#webcam_localhost on
webcam_localhost off

#なんで変えたか忘れました
#ffmpeg_video_codec swf
ffmpeg_video_codec mpeg4

#動体検知で画像を残さないようにoffに変更
#output_normal on
output_normal off

#今回のカメラでは8はサポートしてないようなので6にしました。
#ただ8にしていても使えないから6を使うよ~~みたいなメッセージが出ていたので
#そのままでもよい気がします。
#v4l2_palette 8
v4l2_palette 6


設定が終わったら
sudo motion
とシェルで実行するとmotionが立ち上がります。
rootで起動する必要があるようです。

webで検索すると、ここまでやったら
http://raspberrypi.local:8081
みたいな感じで8081ポートに接続すれば動画が見れるみたいなことを多いのですが、
chromeでもIEでも見ることができませんでした。

どうやら動画の形式がmotion JPEGという形式になっているようで、chromeでは直接見ることはサポートしていないようです。

ですが、以下のような感じでimgタグで指定すれば、きちんと見れました。
<html><body>
<img src="http://raspberrypi.local:8081">
</body></html>


動画が見れると、動画に移っている画像を任意のタイミングで静止画で残したくなります。
motionでは8080ポートでmotionを操作できます。
静止画を残すには、
http://raspberrypi.local:8080/0/action/snapshot
で接続してあげればOKです。





2013-08-04

Raspberry Piを楽しむために必要そうなものをまとめてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piを楽しむために必要そうなものをまとめてみました。

・本体
これがなくては始まりません



・SDカード
OSの記録先などに利用します。最低4Gのclass10があればよいようですが、8Gぐらいはみたいな記述もよくみます。



・電源系
お手持ちのスマホの充電ケーブルでもOKですが、以下のようなものもあります。ケーブルは100円ショップのものでもOKです。


Raspberry Piの小ささを生かすためにモバイルバッテリーを使うのもよいです。



・ネットワーク系
ネットワークに接続した方が楽しめます。


無線LANに対応させるのが、なおオススメです。


無線化の方法として、無線LANドングルを利用するのでなく、コンバータを利用するのもよいかもしれないです。



・画面出力系
インストール時にはあった方が便利です。その後sshで接続するだけならば必要ないかもしれないです。
インストール時だけであれば安めのコンポジットケーブルでもよいと思いますが、他に画面を使っていろいろやるならばHDMIで接続した方が画面のきれいさは圧倒的によいです。出力先がPCモニタするにはHDMI-DVI変換ケーブルなどが必要です。


以下のような小さいモニタを接続する例もあるようです。以下の場合はコンポジットケーブルと12V出力できるバッテリーが必要そうです。



・入力デバイス系
インストール時にはキーボード、マウスがあると便利です。


以下のようなBluetooth対応のコンパクトなものを利用するケースもあります。



・電子工作系
電子工作を楽しむために必要なものはケースバイケースなのですが、まずはお試しには以下があるよいと思います。


アナログ入力とかはRaspberry PiではできないようなのでそのうちArduinoもあると便利かもしれません。Raspberry PiとはUSBで接続します。ケーブルはA-Bタイプが必要です。



・セルフパワーUSBハブ
USBでいろいろつけると電源系が心配な気配なのでセルフパワーUSBハブがあってもよいかもです。



・参考図書
いろんな本が出ています。



・ケース
なくてもよいのかもしれないですが、きれいにまとめたいならばあった方がよいかもです。


購入するのではなくLEGOで作成する例もあります。
以下が参考になります。
http://www.slideshare.net/keikakomura/raspberrypi-meets-lego-case
http://www.raspberrypi.org/archives/1354



2013-08-03

Raspberry PiのGPIOをブラウザからいじれるWebIOPiを試してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以前、GPIOでLEDをチカチカさせてみました。
Raspberry PiとRubyでLEDをチカチカさせる

その後、Raspberry PiでGPIOをブラウザからいじれるWebIOPiというものがあると知り試してみました。

WibIOPiに関しては、以下をご覧ください。
https://code.google.com/p/webiopi/


インストールは、以下のような感じです。

sudo su -
cd /usr/local/src
wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
tar xvzf WebIOPi-0.6.0.tar.gz
cd WebIOPi-0.6.0
./setup.sh

なんかいろいろインストールするのでちょっと時間がかかります。

RaspberryPiを起動したときにWebIOPiも自動起動させるならば、以下も実行します。
update-rc.d webiopi defaults

WebIOPiの起動は以下のとおりです。
sudo /etc/init.d/webiopi start

WebIOPiの停止は以下のとおりです。
sudo /etc/init.d/webiopi stop


デフォルトでは8000番ポートで起動するのでブラウザから接続します。
http://raspberrypi.local:8000/

ログインパスワードが聞かれますが、デフォルトでは
ユーザ名:webiopi
パスワード:raspberry
になります。


で、パスワード認証後の画面は以下のような感じになります。

GPIO Headerをクリックすると以下のような画面が出てきます。

このグレーのINとなっている部分をクリックするとOUTになります。
GPIO 27の横のINをクリックしてOUTにした例です。

そしてピン番号をクリックするとオレンジ色になりOUTの場合はHIGHになります。
13番のピンをクリックした例です。

このとき、以下のようなLEDを光らす回路を接続していたらLEDが光ります。再度クリックして黒に戻すと消えます。


ちょっと実験するには便利な感じです。


TOPページの他の部分をクリックすると以下のような画面が出ます。

GPIO Listは以下のような感じです。
GPIO Headerの表示方法を変更した感じです。


Serial Monitorは以下のような感じです。
こちらは試していないので、どんな動きをするのか不明です。


Device Monitorは以下のような感じです。

こちらも試していないので、どんな動きか不明です。


WebIOPiはAPIをいろいろ用意しています。
REST APIもあり、他のプログラムから利用することもできます。

APIの例です。
とりあえずGPIO27に対しての例で、リクエストURLは以下のような感じです。

現在状態取得
GET http://raspberrypi.local:8000/GPIO/27/value

利用状態をOUTに設定
POST http://raspberrypi.local:8000/GPIO/27/function/out

シグナルをHIGHにする
POST http://raspberrypi.local:8000/GPIO/27/value/1

シグナルをLOWにする
POST http://raspberrypi.local:8000/GPIO/27/value/0


というわけでRubyでいじってみた例です。

require "net/http"

def set_pin_out
  req = Net::HTTP::Post.new("/GPIO/27/function/out")
  set_req(req)
end

def pin_on
  req = Net::HTTP::Post.new("/GPIO/27/value/1")
  set_req(req)
end

def pin_off
  req = Net::HTTP::Post.new("/GPIO/27/value/0")
  set_req(req)
end

def set_req(req)
  req.basic_auth "webiopi","raspberry"
  Net::HTTP.start("raspberrypi.local", 8000) {|http|
    response = http.request(req, "")
    raise "NG" unless response.code == '200'
  }
end

set_pin_out
10.times do
  pin_on
  sleep 0.5
  pin_off
  sleep 0.5
end


RubyでGPIOを直接いじる場合はroot権限がないとダメでしたが、この場合はrootでなくてもGPIOが利用できます。
また別のマシンからもたたくことができるのも便利そうな気がします。

2013-07-30

ブレッドボードの配線図を描くにはFritzingが便利でした

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ブレッドボードの配線図を楽にいい感じに描きたいなぁと思っていたら、
Fritzing
というのがあるということを知りました。

なかなかよい感じです。

Raspberry Piの図も以下のサイトからダウンロードして追加してあげればパーツとして利用可能です。
https://github.com/adafruit/Fritzing-Library/blob/master/parts/Raspberry%20Pi%20Model%20B.fzpz

以下のサイトが参考になりました。
http://www.e-ark.jp/2013/02/12/%E9%9B%BB%E5%AD%90%E5%9B%9E%E8%B7%AF%E8%A8%AD%E8%A8%88%E3%83%84%E3%83%BC%E3%83%AB-fritzing-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/

2013-07-29

Raspberry PiとRubyでLEDをチカチカさせる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piは、GPIOという仕組みで電子工作を簡単に楽しめるわけです。
そんな電子工作をやってみたいとおもったのがRaspberry Piを買った理由のひとつでもあります。

Raspberry Piで電子工作をするには、ブレッドボードがあるとお手軽にはじめられます。
ブレッドボードとRasberry Piをつなぐには、ジャンパワイヤー(オスーメス)が必要です。


LEDとかブレッドボードを持っていないならば以下があるとよさげです。



まずは、GPIOのシンプルな使い方でLEDを光らせてみます。

Raspberry PiとLEDは以下のように接続します。

今回は27番PINを利用しています。
Raspberry PiのPINに関する情報は、以下が参考になります。
http://blog.livedoor.jp/victory7com/archives/25716142.html

以下のようにすれば、ルート権限のシェルでLEDを光らせることができます。

sudo su
echo 27 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio27/direction
echo 1 > /sys/class/gpio/gpio27/value
echo 0 > /sys/class/gpio/gpio27/value
echo 27 > /sys/class/gpio/unexport

上から順にざっくり説明すると
27番PINを利用することを宣言して、
27番PINを出力でりようすることを宣言して
27番PINの出力をHIGHにして
27番PINの出力をLOWにして
27番PINの利用を終了する
という感じです。

以下が参考になります。


とりあえず、上記でやっていたことをRubyでやってみます。

exp = open("/sys/class/gpio/export", "w")
exp.write(27)
exp.close

dir = open("/sys/class/gpio/gpio27/direction", "w")
dir.write("out")
dir.close

out = 1
20.times do
  val = open("/sys/class/gpio/gpio27/value", "w")
  val.write(out)
  val.close
  out = out == 1 ? 0 : 1
  sleep 0.5
end

uexp = open("/sys/class/gpio/unexport", "w")
uexp.write(27)
uexp.close

これをled.rbとでもして保存してrootで実行するとLEDがチカチカします。

きっと便利なgemがあると思って探してみたところ
pi_piper
というものがありました。

gem install pi_piper

でインストールできます。

でpi_piperを利用すると以下のような感じです。

require 'pi_piper'

pin = PiPiper::Pin.new(:pin => 27, :direction => :out)

10.times do
  pin.on
  sleep 0.5
  pin.off
  sleep 0.5
end

uexp = open("/sys/class/gpio/unexport", "w")
uexp.write(27)
uexp.close

これをled2.rbとでもして保存してrootで実行するとLEDがチカチカします。
すっきりしたような気がします。

最後の27番PINの利用をやめる部分はpi_piperでは対応してなかったので、led.rbのときと同じです。


Lチカだけで終わらないようにしたいなぁと思います。


2013-07-10

Raspberry Piにrubyをインストール

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piにrubyをインストールです。

OSはraspbianです。

sudo apt-get install ruby

でOKです。


以下がインストールされます。

ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [arm-linux-eabihf]

gem --version
1.8.23


2013-07-09

Raspberry Piを無線LAN対応させてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry Piはちっちゃいです。

なのでどんなところにも置けちゃいます。

いろんなところに置いて使うためには、ケーブルは少ないに限ります。

というわけで、無線LANに対応させてみました。


利用した無線LANアダプタは、BUFFALOのWLI-UC-GNMです。
せっかくなのでRaspberry Piに似合いそうなちっちゃいものを選びました。



私の環境は、
Raspberry PiのOSはRaspbian

無線LANの暗号化方式は、WPA-PSK-AES

IPアドレスはDHCPで配布されています。


まずはRaspberry PiのUSBポートに無線LANアダプタをさして、電源をいれてRaspbianを起動します。
これで無線LANアダプタはちゃんと認識されています。

ターミナルを起動して
sudo lsusb
とすると以下のように認識されているUSB機器一覧を見ることができます。

Bus 001 Device 002: ID 1234:5678 Standard Microsystems Corp.
Bus 001 Device 001: ID aaaa:bbbb Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0000:cccc Standard Microsystems Corp.
Bus 001 Device 004: ID 0404:0101 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]


また
sudo ifconfig
とするとwlan0としてインタフェースを認識していることもわかります。

eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.1.2 ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:729 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:608 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:70431 (68.7 KiB)  TXバイト:95914 (93.6 KiB)

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1 マスク:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:0
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)

wlan0     Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)


ここからが無線LANの設定です。
無線LANのssidがSSIDで、パスフレーズがPASSPHRASEだとします。

設定の基本情報を最初に作成します。
sudo wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf

これで設定の基本部分が記載されます。
以下のような感じになっていると思います。
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="SSID"
        #psk=PASSPHRASE
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

これを以下のように修正します。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        proto=WPA
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        priority=2
        ssid="SSID"
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

※上記ではなくて、こっちの方がよいかもしれないです。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        proto=WPA WPA2
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        ssid="SSID"
        psk=dc111d5dc0a222b3bb3333ab65be37b5e44dfb6da5555b6666ac7777777de688
}

次に起動時に無線LANに接続するように設定します。
sudo vi /etc/network/interfaces
以下のように修正します。

auto lo

iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

設定が完了したら再起動をします。
sudo reboot

再起動後に
ifconfig
を実行してみてwlan0にIPが振られていればOKです。

以下が参考になりました。
http://linux99.exblog.jp/i3
http://firtel.blogspot.jp/2012/09/raspberry-pilan.html


まだ使い始めて、それほど立っていないのですが問題なく使えています。

他に無線LANに対応する方法として、以下のような機器をコンバータとして利用して、無線を受けてRaspberry Piと有線でつなぐというのもよいかもしれないです。
これであれば、無線LANの設定はいらないので簡単ではあります。





追記:2013/07/26
IPアドレスをDHCPで取得しているので、時折IPアドレスが変わってsshで接続するために調べなおすといったことをしていました。
ちょっと面倒なのでホスト名で接続できるようにします。

仕組みとしては、zeroconfというものを使います。

raspberry piの方にはavahi-deamonというのを入れます。

以下を実行すればインストールされますし、自動起動するようになります。

sudo apt-get install avahi-daemon

特に設定をいじっていなければ
raspberrypi.local
というホスト名で利用できるようになります。

raspberry piのターミナルで
ping raspberrypi.local

として返答があれば、うまく設定されています。

そしてrasberrypiにsshで接続するwindows側の設定です。
一番簡単なのはiTunesをインストールすることです。
一緒にインストールされるBonjourというものが重要です。

ホスト名での接続に関して、以下が参考になりました。
http://openrtm.org/openrtm/ja/node/266



無線関連以外にもRaspberry Piを利用する上で必要そうなものをまとめてみました。
http://kingyo-bachi.blogspot.jp/2013/08/raspberry-pi.html

2013-07-07

Raspberry Piを買いました!

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
気になっていたRaspberry Piを買いました!


本も一緒に買ってみました。



遊び始めるには以下のものが必要なわけですが、できるだけ家にあるものを使いました。

・キーボード、マウス・・・家で余っているものを利用
・LANケーブル・・・家であまっているものを利用
・モニタ接続ケーブル(HDMIケーブルまたはコンポジットケーブル)・・・あまっていたコンポジットケーブルを利用
・電源ケーブル・・・スマホ充電ケーブルを利用
・SDカード・・・事前調査では8Gのclass10が必要とあり、これだけはなかったので購入

SDカードは、買った本によると2Gや4Gでもいけそうな感じです。
最初は、家にある余っているものを利用してもよいかもしれません。

買った本には、
NOOBS(New Out Of Box Software)
というものを利用してのインストール方法が紹介されています。

これはRaspberry Pi用のいろんなOSをいい感じに簡単にインストールできるようにするツールのようです。
これを利用する場合は4Gあればよいと書いてありました。

ただ、NOOBSはコンポジットケーブルでは画面に出力されないようです。
HDMIで接続していないと利用できなそうです。
今回、コンポジットケーブルで接続したのでNOOBSでのインストールはあきらめて
Raspbian
をSDカードに入れてインストールすることにしました。
本によると2Gあればよさそうな感じですが試していません。

本でも最終的にはRaspbianをインストールしているので途中からの手順は本に書いてあるとおり進めました。

NOOBSもRaspbianも
http://www.raspberrypi.org/downloads
からダウンロードできます。

ちなみにRaspbianをインストール手順としては以下が参考になりそうです。
http://2fps.net/?p=775

ちょっと忘れがちなポイントとしては
SDカードにOSイメージを入れるときに利用する
Win 32 Disk Imager
を起動するときには、管理者として実行する必要があります。
ちなみにSDカードに入れるときに
DDforWindows
を使っている例もあるのですが、こちらも管理者として実行しないとダメです。

一回SDカードに入れた後に、やっぱり違うのを入れたいなぁとか思った場合は
Windows標準のフォーマットではSDカード全体をフォーマットできなくなっている場合があります。

なのでSDアソシエーションが提供している
SDフォーマッター
も用意しておくと便利です。

インストールが完了すると
初期ユーザpiが作成されているので、パスワードraspberryでログインします。

最初、私はラズベリーを
rasberry
だと思い込んでいたので、いくらやってもログインできずに焦りました。
raspberry
pがあることに気づいていませんでした・・・



2013/08/04追記
Raspberry Piをはじめるときに必要そうなものをまとめてみました。
Raspberry Piを楽しむために必要そうなものをまとめてみた