マグボットで使用しているRaspberry Pi Type BのSDカードの内容をMicro SDカードにコピーして使用しようとしたらB+が起動しませんでしたが、sudo apt-get updateと、sudo apt-get dist-upgradeをしてMicro SDカードにコピーしたらB+で動きました。
マグボットで使用しているRaspberry Pi Type BのSDカードの内容をMicro SDカードにコピーして使用しようとしたらB+が起動しませんでしたが、sudo apt-get updateと、sudo apt-get dist-upgradeをしてMicro SDカードにコピーしたらB+で動きました。
2014年の8月末を目処にマグボットのハード、ソフトの情報を公開するために作業中です。今年に入って、小池研究室以外の方がマグボットを製作されることが急速に増えましたので、多くの皆様にマグボトットを製作して使っていただくために情報を整理して公開できるようにいたします。
に倣いAquesTalk Pi を「個人的」に使ってみます。
http://www.a-quest.com/products/aquestalkpi.html
からダウンロードします。
Raspberry Piのブラウザ Midoriを使いました。
/home/piに
aquestalkpi-20130827.tar.gz
がダウンロードされるので展開します。
|
1 |
$ tar xzvf aquestalkpi-20130827.tar.gz |
/home/piの中にaquestalkpiといディレクトリが作成されるのでそこに移動します。
|
1 |
$ cd aquestalkpi |
しゃべらせてみます。
|
1 |
$ ./AquesTalkPi "おはよう。" | aplay |
声を声種f2にするには(デフォルトはf1)
|
1 |
$ ./AquesTalkPi -v f2 "こんにちは。" | aplay |
にします。
AquesTalk Piを入れるといままで使えていたOpenJTalkが使えなくなってしまいました。
aquestalkpiのディレクトリを削除してもだめだったので
OpenJTalkを再インストールしました。
共存できないようです。
AquesTalk Piはインストールも簡単でとても扱いやすくてすばらしいのですが、
大学などで公式に使用するにはライセンスが必要なので
とりあえず、現在はマグボットでは使用しません。
非商用、個人でマグボッットで使用するのには問題ないと思います。
ライセンスについては
AquesTalk Pi の使い方まとめ
AquesTalk Piの詳しい使用方法については
AquesTalk Pi
をご覧下さい。
Rubyで作ったWebSocketサーバを自動起動してみます。
|
1 |
sudo nano /etc/rc.local |
で
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi exit 0 |
の
|
1 |
exit 0 |
の前に
|
1 |
ruby /home/pi/mubogt_server_v1_0_0.rb & |
と書く。
mubogt_server_v1_0_0.rbはWebSocketサーバのファイル名
最初にruby、最後に&をつける。これがミソ。
バックグラウンドで実行します。
これをつけないとフォラグラウンドで実行されて、いつまでたっても解放されず
コマンド受付状態にならない。
&をつけないと、
先に行けずに止まってしまうでしょう。
mubogt_server_v1_0_0.rbに実行権を付与。(これが必要かどうかわからない)
|
1 |
chmod +x /home/pi/mubogt_server_v1_0_0.rb |
自動起動後に
|
1 |
ps ax |
でこのプロセスが走っているか確認できます。
しかし、この方法ではシステム起動時に「一度だけ」起動するので、途中で何かの原因でプロセスが止まるとそれきりになります。
止まってもなんどでも起動するのではればデーモン化が必要です。
これは次のステップで。
起動時にスクリプトを実行する方法としていくつか方法があるが、ここでは比較的簡単にできるrc.localにスクリプトを書く方法を試してみる。
rc.localを編集
|
1 |
sudo nano /etc/rc.local |
中身は以下。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi exit 0 |
例えば
mubogt_server_v1_0_0.rb
を
exit 0の前に
|
1 |
ruby /home/pi/mubogt_server_v1_0_0.rb |
と書いて
再起動
|
1 |
sudo reboot |
する。
スクリプトは
シェルスクリプトでもRubyやPythonの起動スクリプトでもいい。
ハマったのはデフォルトでrc.local内のスクリプトが自動起動しなかったこと
|
1 |
sh /etc/rc.local/mubogt_server_v1_0_0.rb |
とすれば動くのでスクリプトには問題ない。
仕方ないので実行権を付与してみる。
|
1 |
sudo chmod +x /etc/rc.local |
これで動いた。
デフォルトで動かないのは、こう書いてあるので当然ですね。
|
1 2 |
# In order to enable or disable this script just change the execution # bits. |
rc.local内のスクリプト
|
1 2 3 4 |
_IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi |
は、起動するとIPアドレスを表示してくれます。
以前にjsayという日本語音声プログラムを試してみたので
これを
|
1 2 3 4 5 |
_IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" jsay "$_IP" fi |
と加えることで
起動時にIPアドレスをしゃべるようになりました。
RUbyのファイルの1行名に
|
1 |
#!/usr/bin/ruby |
(シェバン)
があるが、それがあると
test.rbを実行するのにホームディレクトリ上で
|
1 |
ruby test.rb |
でも起動するが、
|
1 |
/home/pi/test.rb |
だけで起動する。
ファイル名のtest.rbはtestでもいい。Linuxは拡張子で判断していない。
実際やってみると以下のことでハマった。
|
1 2 |
#!/usr/bin/ruby puts "Ruby start" |
をなぜか1行目は空白で、2行名から書いていたので、ファイルが実行できず。1行名から書く。
ruby test.rbは、実際はファイルの位置を明記して
|
1 |
/home/pi/test.rb |
として実行する。最初にrubyと書かなくていい。
もしくは、
|
1 |
./test.rb |
で実行。
.はホームディレクトリをさす。
test.rbではなく、./test.rbと打たないといけないのは
ホームディレクトリにパスが通っていないから。
本当はtest.rbと打ちたいですが
ホームディレクトリにパスを通すと危険だそうです。
参考
カレントディレクトリのプログラムを実行するには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/040execcaprog.html
変数pathにカレントディレクトリを含める方法(あまりよくない)
http://www.not-enough.org/abe/manual/comm/command-path.html
Raspberry PiにUSBスピーカーをつなげても鳴らない。
alsamixer でF6を押してUSBスピーカーを選択してもUSBスピーカーに切り替わらない。
sudo amixer cset numid=3 1 にはUSBスピーカーの項目はない。
USBスピーカーは サンワサプライ MM-SPS2UWH
http://www.sanwa.co.jp/product/syohin.asp?code=MM-SPS2UWH&cate=1
USBハブ経由でつなげました。
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/
に習って
USBスピーカーの優先順位を上げる。
|
1 |
sudo nano /etc/modprobe.d/alsa-base.conf |
|
1 |
options snd-usb-audio index=-2 |
を
|
1 |
options snd-usb-audio index=0 |
にする。
保存してリブート
|
1 |
sudo reboot |
優先度を確認
|
1 |
cat /proc/asound/modules |
|
1 2 |
0 snd_usb_audio 1 snd_bcm2835 |
となっていれば成功。
USBスピーカーから音がでました!
追伸
せっかくUSBスピーカーにしたのに音質が悪いです。他に問題があるのかもしれません。