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-26

gemのデフォルトの接続先がいつのころやらhttpsでの接続になっていたこと知ったのです

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
opensslでいろいろ実験していたせいでopenssl環境がわけわからなくなった環境で
gemのバージョンを2.0.3にあげたら、何もインストールできなくなったわけです。

どうもssl絡みがおかしなことになっていることはわかったので
gem installのときに
--source http://rubygems.org
をつけたのですが、残念ながらうまくいかなかったのです。


gem source
を見てみたら
https://rubygems.org/
となっており、
他の古めの環境で確認したら
http://rubygems.org/
になっていたので、同じようにしてみようと思ったわけです。

以下のようにすることで
gem source -a http://rubygems.org/
httpでの接続もできるようになりました。

このおかしな環境でopensslをどうこうするのも面倒だったので
gem source -r https://rubygems.org/
でhttpsの接続先を削除したりもしちゃいました。

2013-07-19

rubyでutf-8の「-」をsjisに変換しようとしたらエラーが出たとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
utf-8からsjisに変換するときのよくある話ではあります。

詳細は、以下のサイトがわかりやすいです。
http://space.geocities.jp/nequomame/java/mojibake/mojibake_01.html

「-」だけでなく他の文字でも同様の問題がおこることがあります。

urf-8の「-」には、見た目は一緒だけど二つ存在します。
そのうち一つは、sjisへの変換に失敗して、もう一つは成功します。

以下のような感じです。

[1] pry(main)> "FF0D".to_i(16).chr('utf-8')
=> "-"
[2] pry(main)> "FF0D".to_i(16).chr('utf-8').encode("cp932")
=> "\x{817C}"
[3] pry(main)> "2212".to_i(16).chr('utf-8')
=> "-"
[4] pry(main)> "2212".to_i(16).chr('utf-8').encode("cp932")
Encoding::UndefinedConversionError: U+2212 from UTF-8 to Windows-31J from (pry):4:in `encode'


なので、「-」が入る可能性がある文字列strに対して以下のように対処してみました。

str.gsub("2212".to_i(16).chr('utf-8'),"FF0D".to_i(16).chr('utf-8')).encode("cp932")

他のやり方もありそうな気がします。

2013-07-12

朝、ラジオ体操をすることにしてみて一月ほどたちました

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
体をちっとも動かしてないなぁ~と思っていたわけです。

平日は6時半に起きる生活をしていたのですが、ふと6時25分からNHKでテレビ体操なる番組をやっていることに気づいてみました。

10分ぐらい早くおきてラジオ体操ぐらいするのもよいかもなぁと思ったわけです。
ラジオ体操第一だったらやり方はわかっていますしね。
ちなみに平日だけで日曜日はぐっすり寝ています。

やりはじめて一月ぐらい経ったわけですが、
やせたか?
と聞かれると正直あんまり変わらないです。

ラジオ体操第一とラジオ体操第二あわせても70kcalぐらいの消費のようなので、体操だけでやせるという虫のよいことはありません。

ただ体操には体を伸ばすものが多いので、なんかすっきりはします。
ヨガとかストレッチとかそんな感覚に近いかもしれません。

あと、続けやすい気がします。
たまたま自分が普段起きている時間のちょっと前だったので、それほど無理もしてないですし、
何より6時25分になったら、こっちの都合などお構いなしに始まるというのはよいです。

いつでもどこでも好きな時間に10分やってください。
と言われると逆にやらないので時間が決まっているというのはよいです。

一つ誤算だったのは、毎日ラジオ体操第一をやると思っていたのですが、そうではなく
みんなの体操

ラジオ体操第二
の組み合わせでラジオ体操第一がない日もあります。

みんなの体操とラジオ体操第二は、よくわかってなかったので最初はあたふたしてみました。
すぐに慣れますけどね。

ちなみに以下の体操が放送されます。
月曜日:みんなの体操とラジオ体操第一
火曜日:みんなの体操とラジオ体操第ニ
水曜日:みんなの体操とラジオ体操第一
木曜日:ラジオ体操第一とラジオ体操第二
金曜日:みんなの体操とラジオ体操第一
土曜日:みんなの体操とラジオ体操第ニ
日曜日:見たことないので知りません

以下の本を見てポイントをおさえてやると、もっとヨサゲな感じです。

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を楽しむために必要そうなものをまとめてみた

2013-07-05

ActiveScaffoldでセレクトボックスで特定の値を選択させる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
いろいろできちゃうActiveScaffoldのコネタです。

ActiveScaffoldでセレクトボックスを使うときに、デフォルト値として特定の値を選択させておく方法です。

以下は、hogeカラムをセレクトボックスにしていて、tomatoをデフォルトとして選んでおく方法です。

config.columns[:hoge].form_ui            = :select
config.columns[:hoge].options[:options]  = ["potato","tomato","egg"]
config.columns[:hoge].options[:selected] = "tomato"

ちなみに、このブログでactive_scaffoldに関しての情報を他にも乗せています。
ActiveScaffoldの小ネタのまとめ