BeagleBoneでAirPlay

Raspberry PiでAirPlay対応という記事をITmediaで見たのでBeagleBoneでも出来ないか調べてみた。
やっている事は単純。
BeagleBoneに入れたUbuntuでShairportをinstallして動かすだけ。

sudo apt-get install git build-essential libssl-dev libcrypt-openssl-rsa-perl libao-dev libio-socket-inet6-perl libwww-perl avahi-utils pkg-config
sudo -H cpan -i HTTP::Request
HTTP::Requestの箇所を以下の4つ置き換えて実行。
HTTP::Message
Crypt::OpenSSL::RSA
IO::Socket::INET6
Net::SDP

git clone https://github.com/albertz/shairport.git
cd shairport
make
sudo make install
sudo cp -a shairport.init.sample /etc/init.d/shairport
/etc/init.d/shairport start
stopするなら
/etc/init.d/shairport stop

とりあえずこれで繋がったけどDVI-D Audio cap経由で音出ず。
失敗?

Arduinoで遊ぼう その1(赤外線解析 1)

Arduino UNOを買ったので、何に使おうか考えた結果とりあえず赤外線リモコンの赤外線解析をして見ようと思う。
ネットで似たような事をやっている記事(*1,*2,*3)を見つけたので、それを参考にやってみよう。

準備したもの
Arduino UNO(Arduinoをはじめようキットで購入)

参考書籍 :Arduinoをはじめよう:読み物としてもおもしろい。始めてマイコン制御する人にも分かりやすく書いてある。

赤外線受信IC : rpm7138-r
回路構成基盤その他 : Arduinoをはじめようキットに入っていたブレッドボードや配線コネクタ
============================================
まず始めに、Arduinoの開発環境を入手する。
http://playground.arduino.cc//Learning/Linux
http://playground.arduino.cc//Linux/Ubuntu
やったことは、Ubuntu 12.04環境下ではapt-get update/upgradeしたあと

$ sudo apt-get install openjdk-7-jre
$ sudo apt-get install arduino

だけ。
USBでArduino UNOとPCを接続して、

$ sudo Arduino

とコマンド実効。
シリアル接続を確認する。
IDEのメニュー"Tools"->"Serial Port"からArduinoを指定して接続を確立する。
そして、テストコードを実行してみる。Io pin 13にLEDを接続して(pin13 , GNDに接続)LEDを点滅させてみる。

const int TargetIO = 13;

/* setup()は、Arduinoを初期化する関数。電源ON時に1回実行する */
void setup()
{
pinMode(TargetIO,OUTPUT); //IOの入出力設定を出力にする。
}

/* Arduinoのメイン処理を記述する。必ず必要。*/
void loop()
{
digitalWrite(TargetIO,HIGH); //TargetIOに対してHiする。
delay(1000); // 1sec wait
digitalWrite(TargetIO,LOW); //TargetIOに対してLoする。
delay(1000); // 1sec wait
}

メニュー"Sketch"->"Verify/Compile"でコンパイルして、CTRL+Uか"File"->"Upload"でプログラムをArduinoに転送する。
そうすると、Io pin 13に接続してあったLEDが1 sec置きに点滅する。
Arduinoのコーディングの例を見たければ、Arduino tutorialを参考にすると良い。
さあ次回は、赤外線解析に移ろう!

BeagleBoneにUbuntu入れてDLNAサーバー立ち上げてみよう その3 おまけ

DLNAサーバーが立ち上がったけれども、REGZAで動画を見たい。特にmp4を。

Mediatombのトランスコーディング設定を行う。
ここここといった先人が培った知識をまたも拝借。

結果、ffmpeg トランスコードは失敗。2ch情報などを参考にスクリプトを以下の様に作成する。
どうも、ffmpegでトランスコードしたファイルの出力先の指定に問題がありそうだと2chに書かれていた。
詳細は、ログ /var/log/mediatomb.log を見て調べてみましょう。
んで、ffmpegでトランスコードする部分のスクリプトを以下の様にして見た。

#!/bin/bash

FFMPEG_PATH="/usr/local/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="1024k"
VIDEO_FRAMERATE="25"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="128k"
AUDIO_SAMPLERATE="44100"
AUDIO_CHANNELS="2"
FORMAT="dvd"

exec "${FFMPEG_PATH}" -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \

  • r ${VIDEO_FRAMERATE} -acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} \
  • ac ${AUDIO_CHANNELS} -f ${FORMAT} - > "${OUTPUT}" 2>/dev/null

ここの 2>/dev/null がミソ。
そうすると上手い事、mediatombが落ちる事無く動いた。
※使っていないトランスコードの設定部分はoffにして置きましょう。使っていないというエラーでmediatombは落ちちゃいます。

ちなみに結果は、処理が重くて再生出来ず。Ubuntuを入れたCore i5のPCで同じconfig.xml,同じ動画ファイルで実行したら再生出来たので、BeagleBoneでのトランスコードは荷が勝ちすぎた。orz

BeagleBoneにUbuntu入れてDLNAサーバー立ち上げてみよう その2

linux上のminicomにてBeagleBoneにてUbuntuが起動したことを確認。

デフォルトでは

ID : ubuntu
Pass : temppwd

まず、LANケーブルを差してネットワークが繋がっている事を確認する。

$ifconfig eth0

ipアドレスが表示(192.168.xx.xxみたいに出たらOK)したら繋がっている事を確認
もし、繋がっていなかったら・・・webでやり方を探しましょう。

$sudo apt-get upgrade
$sudo apt-get update
$sudo apt-get install aptitude

これすると以下のエラー

The following packages have unmet dependencies:
aptitude : Depends: libboost-iostreams1.46.1 (>= 1.46.1-1) but it is not installable
Depends: libcwidget3 but it is not installable
Depends: libept1.4.12 but it is not installable
Depends: libsigc++-2.0-0c2a (>= 2.0.2) but it is not installable
Depends: libxapian22 but it is not installable
Recommends: apt-xapian-index but it is not going to be installed
Recommends: libparse-debianchangelog-perl but it is not installable
E: Unable to correct problems, you have held broken packages.

うーんどうやってエラーを解決すれば良いのやら。ググレカスという天の声が聞こえたのでググった。
https://bitcointalk.org/index.php?topic=117909.0
http://askubuntu.com/questions/121959/sudo-apt-get-update-error
https://forums.ubuntulinux.jp/viewtopic.php?id=11861
で調べて、

cd /var/lib/apt
sudo mv lists lists.old
sudo mkdir -p lists/partial
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade

ここまででinstallされたアプリを更新が完了する。

sudo apt-get install ssh

ここを参考にsshログイン

$ssh username@ipaddress

すると以下のエラーが、

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge:hoge.
Please contact your system administrator.
Add correct host key in /home/username/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/username/.ssh/known_hosts:1
remove with: ssh-keygen -f "/home/username/.ssh/known_hosts" -R IP_ADDRES
ECDSA host key for IP_ADDRESS has changed and you have requested strict checking.
Host key verification failed.

と出たので、known_hostsの中身を消去してもう一回ログイン試行したら出来た!
SSHにログインが出来たら、
BeagleBoneのDLNA化に取りかかる。ここここを参考にする。

$sudo apt-get install mediatomb

DLNAサーバーの設定を変更する。

$sudo vi /etc/mediatomb/config.xml

PS3の設定を行う。

あと、DLNAのサーバー名を変更しておく。
BeagleBoneDLNA< /name>

ではmediatombを再起動する。

$ sudo /etc/init.d/mediatomb start
Starting upnp media server: mediatomb.

PS3でメディアサーバーの検索をかけて出てこればOK。
しかし、通常ファイル設定していないと出てこないので、
DLNAサーバーにブラウザでアクセスする。

http://BeagleBone_IP_ADDRESS:49152/

ブラウザ上で外部接続したHDDなりフォルダなりを共有する。
これで、PS3にてDLNA再生ができるようになった。

うーん。思ったよりも時間がかかった。
そのほとんどは、RegzaHDMI出力やVNCでのアクセスしようとしたからなのだが。
結局失敗した。誰か教えてー

BeagleBoneにUbuntu入れてDLNAサーバー立ち上げてみよう その1

BeagleBone Ubuntu
を参考にして

pre-buildイメージを取得、SD cardに展開する。

wget http://rcn-ee.net/deb/rootfs/precise/ubuntu-12.04-r9-minimal-armhf-2012-11-29.tar.xz
Verify image with:
md5sum ubuntu-12.04-r9-minimal-armhf-2012-11-29.tar.xz
8ed60e5a86671366825f7adb1c0e7a27

tar xJf ubuntu-12.04-r9-minimal-armhf-2012-11-29.tar.xz
cd ubuntu-12.04-r9-minimal-armhf-2012-11-29

sudo ./setup_sdcard.sh --mmc /dev/mmcblk0 --uboot bone

microSDにデータを書き込んで、BeagleBoneで動作確認。
しかし、まともにFTDIでのシリアル通信が出来ない。Linuxのminicom設定が出来てなかったため。
以下の設定を別途実施

sudo minicom -s

+-----[設定]------+ |
| ファイル名とパス名 |
| ファイル転送プロトコル |
| シリアルポート |
| モデムとダイヤル |
| 画面とキーボード |
| "dfl" に設定を保存 |
| 新規に設定を保存 |
| 終了 |
| Minicom を終了 |
+---------------+

ここでdflに設定を保存する。
以下のコマンドでファイルが作成されていることを確認。

ls /etc/minicom/
minirc.dfl

そしてminirc.dflファイルを編集してminicomで立ち上げる設定を書き込む。

# Machine-generated file - use "minicom -s" to change parameters.
pu port /dev/ttyUSB1
pu baudrate 115200
pu bits 8
pu parity N
pu stopbits 1
pu rtscts No
pu xonxoff No

ttyUSB1のところを環境に応じて変更。他の設定はBeagleBoneではそのままでいいはず。Android/Angstromは同じでいけた

ここで力尽きた。

linuxでsvnを使ってみた

BeagleBoneのコード管理をバージョン管理にしたくなってきた。参考書籍に書かれているコードを書き換えていくと元が何だったのか訳が分からない。

さてバージョン管理ソフトとしてSVNを使ってみようと思う。
後々redmineで問題対応を内々にログとして残しておきたいので、tracでも良いんだけどそれらと親和性のあるsvnを採用。
今までSVNと言えばwindowsTortoiseSVNを使用していたが、今の開発環境であるlinux(Ubuntu)でも似たような事をしたいので調べてみた。
Rabbitなるものを発見

HPの記述にしたがってrepositoryからダウンロード&インストール

まず、Ubuntuのapt-getで検索するリポジトリURLを登録する

deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu **DISTRIBUTION** main

これをそのまま/etc/apt/sources.listの最後尾に追加したら見事に撃沈。

DISTRIBUTION**は、UbuntuのDISTRIB_CODENAMEの事で、

cat /etc/lsb-release

で自分のディストリビューションを調べて置き換える。私の場合は

deb http://ppa.launchpad.net/rabbitvcs/ppa/ubuntu precise main

だった。

あとは、リポジトリをアップデートしてインストール。

sudo apt-get update
sudo apt-get install «packages»
…where packages are

rabbitvcs-nautilus3 for the Nautilus 3.x extension (use this for Ubuntu 11.10, Oneiric Ocelot)
rabbitvcs-nautilus for the Nautilus 2.x extension
rabbitvcs-thunar for the Thunar extensions
rabbitvcs-gedit for the GEdit extension
rabbitvcs-cli for the command line launchers

ここで、またinstall出来ず。

sudo apt-get install rabbitvcs-nautilus3 for the Nautilus 3.x extension

と打っていた。ちゃんと見ればforより後ろのは説明文である事が分かるので余計な文を追加していただけだった。

sudo apt-get install rabbitvcs-nautilus3
sudo apt-get install rabbitvcs-thunar
sudo apt-get install rabbitvcs-gedit
sudo apt-get install rabbitvcs-cli

でインストール完了。
ただし、いまいち使い方分からない。使い方探すのに時間かかりそうなのでrabbitvcsでのリポジトリ作成は後日に。
いまは、ターミナル上から実行しよう。
まず、svnリポジトリフォルダを作成する。

svnadmin create /home/myrepo/trunk

/home/myrepo/trunkにsvnのファイルが作成されているので、確認しましょう。
次に作成したフォルダに差分管理したいファイルをコミットする。
*suでrootになっておく。

svn import -m "new" /home/mine/PrjSrc/test file:///home/myrepo/trunk

ここで、/trunk/testは作成されないことに注意。作成したい場合はtrunk/testとリポジトリURL指定すること。

  • m "コメント" は、コミットメッセージが必要なので適当でもいいから書いておく。

コミットが成功したか確認する。

svn list file:///home/myrepo/trunk

checkoutしてみる

svn checkout file:///home/myrepo/trunk

成功したらOK。

これで、いままで止まっていたBeagleBoneで遊ぶ為の準備が出来た。