Raspberry Pi 2 B 日記
Facebookの友達限定公開でワイワイやってたんだけどブログにまとめろと圧力を掛けられたのでボチボチまとめていこうと思います。
最初に
Raspberry Pi 2 B & Raspbianです。その他の環境のことは知りません。以下でRasPiと書いた場合でもRaspberry Pi 2 Bのことを指します。
$ uname -a Linux nishio 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux
用意すべきもの
「RasPiはキーボードやHDMIケーブル、モニターがなくても使える」は命題としては真です。デフォルトでsshdが動いているので、ユーザpi、パスワードraspberryでログインして使えます。僕もそれを真に受けて最初はその構成でいじり始めました。
ただし、sshdが起動しないようなトラブルが起きた瞬間、HDMIがないと問題の詳細を知るすべがなく、キーボードがないと設定を書き換えるすべがなく、「イメージを焼き直してゼロからやり直し」しか手がなくなります。
僕は結局、HDMIケーブルとUSBキーボードを用意しました。
買って後悔したもの
AmazonでRasPiを見ると、一緒に良く買われているものとして以下の2つがおすすめされます。そうか、おすすめか、と何も考えずに買ってしまったのですけど、結局買ったことを後悔して別のものを買いなおしました。
microSD
TranscendのmicroSDですが、しばらく使っているうちに以下のような現象が起こるようになりました。
- イメージを焼きこんだ直後は問題なく動いているが、リブートするとカーネルパニック
- イメージを焼きこんだ直後でも動かない
カーネルパニックの内容は「Unable to mount root fs」ブートローダが走った後rootをマウントしようとして失敗するというもの。その後、全く同じカーネルパニックを起こしている人のブログを発見し(Raspberry PiでSDカード相性が原因で起動エラーを繰り返す時の対処法 | 1ft-seabass.jp.MEMO)microSDのハードウェアが原因である可能性を疑ってコンビニで売ってたmicroSD(Panasonic class10 8GB RP-SMNB08GJK)に変えてみたらあっさり動いたのでTranscendのmicroSDの問題である可能性が高いかと。
Transcendで同じカーネルパニックを起こし、ディスクの修復をしてイメージを焼きこんだ直後は動いたけども、リブートしているうちに動かなくなるというよく似た報告(Raspberry Pi死んだ - にるぽっぽ)ではTranscendを2枚ダメにしてから東芝に変えて、その後は再発してないようですね。
友人の意見:
今後はとりあえずSandiskを使うことにします。Raspberry Pi 2 推奨 16GB SanDisk MicroSDHC Card SDSDQUAN-016G-Z4A
USB Wifi
BUFFALOのWLI-UC-GNMEですが、最大消費電力が2.5Wです。
RasPi経験1日目はiPhoneについてきた1A(=5W)のACアダプタを使っていたのですが、ということは供給される電力の半分をUSB Wifiが消費してしまうということです。ちなみに上記microSDがリブートすると壊れる問題が発生したのはこのUSB Wifiを装着してからのことなので、これの電力消費が大きいことが原因になっているかもしれません。検証はしてません。
まあなんにせよ、触ってあまりの熱さにびっくりしたので1.3WのPLANEX 無線LAN子機 GW-USNANO2A (FFP)を買いなおしました。
ACアダプタ
上記の電力不足が上記microSD破損につながっている可能性があるという件、1AのACアダプタを使うのはRasPiを不安定にする可能性が高いと考えて、2.2Aのに変えました。妻が使っていたのを奪ったのでAmazonで同じ商品を見つけられないのだけどYAZAWAテーブルタップ型1AC+2USB2A 0.5m 黒 H3005BK2U2AのようなUSBポートのついてるACタップです。
追記: 10台以上のRasPiを運用している人から「Transcendを使っているけど問題が起きたことはない。電源はAnkerのを使っている」という情報がありました。Anker 20W 2ポート USB急速充電器 71AN7109-W2A
WindowsでのZeroconf
IPアドレスがDHCPで振られる場合、それをどうやって特定するかが問題になります。RasPiではデフォルトでahavi-deamonが動いているのでZeroconfでraspberry.localを名乗ります。つまり「ssh pi@raspberry.local」でログインできるわけです。
ネットワークが固定なら、固定IPを振るという選択肢もなくはないですが、特にネットワークを移動する予定がある場合や、自分自身がネットワークの管理者ではない場合にはZeroconfの方が有用です。ちなみに、僕は家でいじりつつ、会社にもっていって無線LANにつなぎたいのです。
Macでは試してないですが、デフォルトでBonjourが動いているのでこれで名前解決ができるはずです。Windowsの場合、iTunesをインストールすることで名前解決ができるようになりました。
僕の環境では起動時に"avahi-daemon disabled because there is a unicast .local domain"とエラーメッセージを出してavahi-daemonが止まることがありました。妻が同じくらいの時間帯にMacbookAirを使っていたのでそれがunicast .local domainを作ったのかもしれません。/etc/default/avahi-daemonを以下のように書き換えて無視するようにしました。 see: Raspberry Pi avahi-daemon disabled because there is a unicast .local domain - solved - JackenHack
AVAHI_DAEMON_DETECT_LOCAL=1
同一ネットワーク内に複数のRasPiが存在しうる場合、名前で特定できなくなるので、/etc/hostnameと/etc/hostsを編集しておくべきでしょう。
Wifiの設定
ssh経由だけで使っている場合、ネットワーク設定を失敗してつながらなくなると「イメージ焼き直し」しか手がなくなるのでよくないです。僕は結局キーボードを調達しました。
オフィシャルの解説:Setting WiFi up via the command line - Raspberry Pi Documentation。日本語でも「Raspberry 無線LAN」とかで検索すればいくらでもヒットするかと思います。Adafruitの解説:Setting up Wifi with the Command Line | Adafruit's Raspberry Pi Lesson 3. Network Setup | Adafruit Learning System
/etc/network/interfacesにSSIDやパスワードを直接書いてしまうやりかた(以下、直書き)と、wpa_supplicantを使う方法とがあります。まずはwpa_supplicantで試しました。wpa_supplicantはRasPiでデフォルトでインストール済みです。
$ ps -ef | grep wpa root 3239 1 0 14:28 ? 00:00:00 /sbin/wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid -i wlan0 -D nl80211,wext -c /etc/wpa_supplicant/wpa_supplicant.conf
この設定をやっていたころHDMIケーブルやキーボードがそろってなかったので詳細は検証していないのですけど、/etc/network/interfacesにはデフォルトでiface eth0 inet manualと書かれていて、Wifi設定時にこれを編集しないで残すとDHCPクライアントがエラーで起動せず、有線ごとつながらなくなったように思います。iface eth0 inet dhcpにすればOK。
「初回USB Wifiを刺した時にwlan0の項目が書かれる」という説明をよく目にしますが、wlan1ってインターフェイスもinterfacesに書かれていました。これを消さずに残してもDHCPクライアントがエラーで起動しないように思います。検証はしていません。
wpa_supplicantに詳細な情報を書く場合、当然ルータ側の設定と同一にする必要があります。SSIDがステルスでないなら、iwlist wlan0 scanでスキャンするのが良いと思います。で、こちらにスキャン結果と設定ファイルの書き方の対応表があるので参考にするとよいかと。Raspberry Pi • View topic - wpa supplicant config file
wpa_supplicantを使っていて無線LANがうまく動かない場合、まずはwpa_supplicantを使わない直書きの方法で試して、問題がwpa_supplicantにあるのかどうか問題を切り分けるのがよいでしょう。僕の場合は使わない方法で問題なくつながりました。
設定を変えたらrebootしろと書いてあるケースが多いですが、sudo ifdown wlan0; sudo ifup wlan0 とか sudo service networking restart でオンオフできます。
またwpa_supplicantは設定ファイルを変更すると数秒で自動的に読み直すはずで、手動だとwpa_cli reconfigureで設定リロードができます。一度、直書きでつながっている状態で設定リロードしたらエラーメッセージを表示してwpa_supplicantプロセスが死んでしまったので、上でps -efで確かめた際のコマンドラインオプションで起動しなおしました。
再起動するよりもコマンドラインからオンオフした方が、その後のDHCPの動きなど変更の結果が観察できて状況を理解しやすいと思います。
ケーブル直結
(書きかけです)
avahi_autoipd
シリアル接続
アナログデータを読む方法
未整理生データ
https://www.facebook.com/nishiohirokazu/posts/10206808077057036
https://www.facebook.com/nishiohirokazu/posts/10206825122043150
https://www.facebook.com/photo.php?fbid=10206831537123523&set=a.1175498944176.2027303.1129148772&type=1
https://www.facebook.com/nishiohirokazu/posts/10206874568039269