(再まとめ)Raspberry Piの設定からラピロのWiiリモコン制御まで
というわけで(?)、いざ!ラピロを再起動させようと思います。現状は、ラピロの本体は組み上がっていて、Raspberry Piには素のRaspbianのインストールまでが終わっている状態です。作業予定は以下。
- 無線LANの設定
- ファイル共有(Samba)の設定
- Raspberry Piのシリアル設定の変更
- Wiiリモコン利用可能設定
- WiiリモコンでのArduino制御プログラム作成
- SDカードのバックアップ(絶対!)
- ラピロの動作テスト
どれも一度自分が記事にしてきたことなので、適宜参照しながらやっていきたいと思います(過去の自分よ、ありがとう)。二回目ということで、これまでよりもまとまった形の記事にはできるかと思います。
まずはじめの注意事項として、Raspberry Piの設定をする1.〜5.のステップでは、まだRaspberry Piとラピロ本体のArduino基盤は接続しません。Raspberry Piに直接電力供給した方がRasbperry Piが安定して動作しますし、Arduino基盤経由で電源供給していると、その間にサーボモータには電力が供給され続けて、あまり部品によろしくなさそうなので。Raspberry PiとArduinoボードを接続するのは、最後の7.のステップまでお預けです。
1. 無線LANの設定
WiFi/Bluetoothコンボモジュール『PLANEX BT-Micro3H2X』を使用。モジュールをセルフパワータイプのUSBハブに挿して、USBハブをRaspberry Piに挿す(WiFiモジュールは結構電力をくうので、設定中にRaspberry Piが電力不足で落ちたりしないようにするため)。
Raspberry Piを起動させたら、デスクトップのWiFi Configアイコンから、WiFi設定GUIを起動(デスクトップ画面が立ち上がらない場合は、コマンドラインでログイン後、”startx”)。
- Adapterの欄にwlan0が表示されていることを確認
- “Manage Networks”タブを選択して、”Scan”をクリック
- 自宅のアクセスポイントが検出されたら、ダブルクリック
- 暗号化キーを入力、”Add”
- “Current Status”タブを選択して、”Connect”で接続
これでSSH接続できるようになる(<–Raspberry Piの初期設定で意図的にSSHをOFFにしていなければ)ので、以後はデスクトップPC(自分の場合はMac)のターミナルからSSHでログインして作業をする(その方が何かと動作が軽快だし、何よりこの記事を書きながら作業しやすいので。。。)。デスクトップPCからログインするために、Raspberry Piの現在のIPアドレスを覚えておく(先ほどのWiFi ConfigのGUIから確認するか、コマンドラインで”ifconfig”で確認)。
初めてRaspberry Piの環境をつくったときには、今後SSHとかで接続しやすくなるように、ここから頑張って固定IPを割り振るように設定したのだけれど、今回は別のアプローチで、Bonjourとやらを使ってみることにする。自分も全然知らなかったのですが、IRKitがこの仕組みを使っているということで、初めて知りました。DNSなしで、IPアドレスではなくホスト名で接続できるようにしてくれるらしい。
ということで、Bonjourの設定をする。参考は、こちらの記事。Bonjour互換のavahiというサービスが使えるらしい。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install avahi-daemon $ sudo reboot
これで接続がいったん切れるので、再起動されるのを待つ。ここで、自分の環境では何故かRaspberry Piの再起動が途中でフリーズ。wlan0の設定の後に止まったようなので、いったんWiFiモジュールを抜いて、ログイン後にWiFiモジュールを挿し、ifconfigでモジュールが認識されていることを確認(*次立ち上げたときは普通に起動した。謎)。
デスクトップPCのターミナルに戻って、以下のコマンドを実行。
$ ssh pi@raspberrypi.local
これで繋がる…はずなんだけど、繋がらない。IPアドレスの指定ではSSH接続できるので、avahiサービスがうまく起動していない模様。
もう少し調べてみた結果、どうやらavahi用の設定ファイルを書き足してやらなくてはいけない。参考はここの後半、”The flexible way: set up avahi / zeroconf. “の項目。
“/etc/avahi/services/multiple.service”のファイルを作る。内容はとりあえず丸写しで。
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=RackMac</txt-record> </service> <service> <type>_ssh._tcp</type> <port>22</port> </service> </service-group>
ファイルを作成できたら、avahi-daemonを再起動。
$ sudo /etc/init.d/avahi-daemon restart
これで、いったんログアウトしてから改めて
$ ssh pi@raspberrypi.local
を試すと、無事ログインできました。意外と時間かかってしまった。。。
2. ファイル共有(Samba)の設定
次に、GUIでも簡単にファイルをやりとりできるように、Sambaを設定する。ラピロをいじる上で必須ではないですが、できるようにしておくといろいろ便利なので。
これは一度、自分でやっているので、そのまま同じことをする。
$ sudo apt-get install samba $ sudo apt-get install samba-common-bin
インストールした後は、/etc/samba/smb.confの末尾に以下を追記。
[pi] comment = pi's home path = home public = Yes read only = No writable = Yes quest ok = Yes force user = pi directory mode = 0777 create mode = 0666
追記が済んだら、以下を実行(ユーザ名:piの場合)。
$ sudo smbpasswd -a pi New SMB password: Retype new SMB password: Added user pi. $ sudo service samba restart
Macでsambaに接続する場合は、「Finder -> 移動 -> サーバへ接続」でアクセス可能。1.でBonjour (avahi)の設定をしている場合は、サーバアドレスは”smb://raspberrypi.local”になる。
これで、GUIでファイルのやりとりができるようになりました。
3. Raspberry Piのシリアル設定の変更
Raspberry Piを、 ラピロ本体のArduino基盤と接続するために必要な処理。これをやっておかないと、Raspberry PiからラピロのArduino基盤にメッセージがうまく送れず、動作を制御できない(*少なくとも自分が初めて動かしたときはそうだったけれど、今はどうなっているのかは不明)。
これも、前に一度やっているので、そのまま同じことをする。
以前書いたときは「ここを見てね」でかなり省略してしまったので、今回はもう少し丁寧に書きます。
$ sudo wget https://raw.github.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console $ sudo chmod +x /usr/bin/rpi-serial-console
これで、必要なソフトのインストールは完了。次に、現在のシリアルコンソールの状況を確認する。
$ rpi-serial-console status Serial console on /dev/ttyAMA0 is enabled
これがenabledだとよろしくないので、disabeldに変えます。
$ sudo rpi-serial-console disable Serial console has been disabled, a reboot is required to make this take effect
要求通りに再起動して、SSHで再接続、状態を確認。
$ rpi-serial-console status Serial console on /dev/ttyAMA0 is disabled
これでOK。
4. Wiiリモコン利用可能設定
Raspberry PiがWiiリモコンを受け付けるようにする。これまた前に一度やっているので、そのまま同じことをする。
ここも、以前書いたときは「ここを見てね」で省略してしまったので、今回はもう少し丁寧に。
$ sudo apt-get install --no-install-recommends bluetooth $ sudo apt-get install python-cwiid
必要なソフトのインストールは以上。次に、Raspberry PiでBluetoothが有効になっているかを確認。
$ sudo service bluetooth status [ ok ] bluetooth is running.
Wiiリモコンが発見できるかの確認。Wiiリモコンの1ボタンと2ボタンを同時押しして、LEDが点滅している状態にしてから、
$ hcitool scan Scanning ... 00:19:1D:A0:86:23 Nintendo RVL-CNT-01
こんな感じの表示がでればOK。次にサンプルソースをダウンロード。
$ wget http://www.raspberrypi-spy.co.uk/archive/python/wii_remote_1.py
これを実行。
$ python wii_remote_1.py Press 1 + 2 on your Wii Remote now ... Wii Remote connected... Press some buttons! Press PLUS and MINUS together to disconnect and quit. Button 1 pressed Button 2 pressed ...
こんな感じの表示がでればOK。
5. WiiリモコンでのArduino制御プログラム作成
4. で取得したサンプルソース(wii_remote_1.py )にちょっと手を加えて、ラピロの制御信号を遅れるようにする。
これについては、以前にちゃんと書いているので、以下、そのまま転載。
RAPIROの本家サイトにあるDualshock 3用のソースコードから、シリアル通信に必要な部分だけをとってきて、先ほどのwii_remote_1.pyに組み込んでやればOK。ボタンは11個あるので、好きなモーション(“#M0″〜”#M9″)を好きなボタンに割り振る。こんな感じ。
import cwiid import time import serial com = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10) button_delay = 0.5 ... if (buttons & cwiid.BTN_UP): print 'Up pressed' com.write("#M1") # Forward time.sleep(button_delay) if (buttons & cwiid.BTN_DOWN): print 'Down pressed' com.write("#M2") # Back time.sleep(button_delay) ...
なお、”import serial”が必要なので、実行前に以下のインストールが必要。
$ sudo apt-get install python-serial
これで、準備OK。
すぐさまラピロを動かしたいところですが、はやる気持ちを抑えて、ここでいったんRaspberry PiのSDカードのバックアップをとります。
6. SDカードのバックアップ(絶対!)
Raspberry PiとArduino基盤を接続して、頭の部品も完全にねじ止めしてしまうと、Raspberry Piの画面出力ができなくなるので、Raspberry Piのデバッグが難しくなります。その状態で、不用意にラピロ(Raspberry Pi)の電源をON/OFFしていると、 SDカードのデータが破壊されて起動できなくなることは充分に起こりえます(起こりました)。
というわけで、ここまでやってきたことを無駄にしないために、 SDカードのバックアップをとります。Mac環境でのやり方は、以下に詳しく書きました。
Windows環境での方法は、他にいくらでも書いてくれているところがあると思うので、そちらを参照してください。
7. ラピロの動作テスト
さて、バックアップをとったらいよいよラピロの動作テストです。Arduino基盤とRaspberry Piを接続して、頭部をねじ止めします。
ラピロの電源を入れて、Rasbperry Piが起動したと思われるまで待ったら(このへん、できたらLEDか何かで判断できるようにしたい)、SSHで遠隔ログイン。SSHでログインできない場合は、起動に失敗していると思われるので、いったんWiFiモジュールを抜いた状態で立ち上げてからWiFiモジュールを挿すか、ちょっとごちゃごちゃしますがセルフパワーUSBハブ経由WiFiモジュールを挿す、等を試してみる。
無事にログインできたら、5.で作成したファイル(ここでは、rapiro_wii.pyとする)を実行します。
$ python rapiro_wii.py
あとは、Wiiリモコンの1ボタンと2 ボタンを同時に押し続ければ、接続が確立されるハズ。1ボタンか2ボタンに何かラピロの動作を割り振っていれば、繋がった瞬間にその動作を実行してくれるので、わかりやすいです。
自分の場合は、繋がったらラピロがバンザイします(1ボタンに”#M5″を割り当てているので)。かわいい。
歩かせてみます。かわいい。
以上です。自分は記事を書きながら調べながらなので4時間ぐらいかかりましたが、作業するだけなら多分2時間かからないと思います。
一ヶ月半ぶりぐらいに動かしてみましたが、やっぱりかわいいです、ラピロ。
ディスカッション
ピンバック & トラックバック一覧
[…] (5/18 追記) このあたりの手順をまとめなおしたものを、こちらに記載しておきました。よくわからなければ、そちらも参照してみてください。 […]
[…] してやればモータ駆動なしでRaspberry Piを駆動することができます(うまくいかない場合は、ここに書いてあるシリアル設定がdisableになっているか確認。enableだと立ち上がらないことがあ […]