今年、超小型のLinuxとして話題だったRaspberry PiをRTL2832Uドングルのサーバとして試用してみました。比較的簡単にビルドし、動作させることができました。
小型のLinuxをRTLサーバにすることによって、アンテナ直下にドングルとLinuxを置いて、EthernetやWiFiでアクセスすることが可能になります。まずは実験ということでrtl-sdrを動作させて、gnuradioから利用する手順を書いてみます。
RTL2832Uドングルに対応したSDRソフトウェアは、その制御にosmocomで公開配布されているlibrtlsdrというライブラリを利用しています。このライブラリはRTLドングルに対応したSDRソフトウェアに採用されていますが、実はそれ単体で利用できるコマンドラインツールが付属しています。
- rtl_sdr I/Q信号をファイルに保存
- rtl_fm FM受信とデコードしてRAW Audioを出力
- rtl_tcp ネットワーク経由でチューナ制御とI/Q信号取得
- rtl_test ドングルからチップなどの各種情報を取得する
これらのコマンドを使って、いろいろな受信を行うことができるようです。まずはrtl_tcpで受信リモートサーバ化することを試してみます。
以下に構築手順を示します。
Raspberry PiへDebianをセットアップ
Raspberry Pi用のdebianのディスクイメージが公式サイトに用意されているのでこちらからダウンロードしてSDカードにセットアップします。手順は上記サイトを参考にしてください。2012-10-28版がリリースされていたので、今回改めてセットアップを行いました。
SDカードに書き込みができたらネットワークのセットアップを行います。そのままでもDHCPで利用可能になっています。今回はMacBook ProとEthernetケーブルで直結で使うために固定アドレスを割り当てました。設定は/etc/network/interfacesファイルを編集します。
- raspberry pi: 192.168.2.1
- macbookpro: 192.168.2.2
Ethernetケーブルで直結した状態で、sshによるログインやscpによるファイルコピーができることを確認しておきます。
libusbのインストール
公式サイトよりlibusb-1.0.9.tar.bz2をダウンロードし、Raspberry Piにコピーと解凍し、configure、make、make installします。セルフ環境での実行ですので特段難しいことはありません。
$ tar xfj libusb-1.0.9.tar.bz2
$ cd libusb-1.0.9
$ ./configure
$ make
$ sudo make install
rtl-sdrのインストール
osmosdr.comからはrtl-sdrのソースはgitで配布されていますが、raspberry piのdebianにはgitが入っていません。またautoconfも必要なのですがこれも入っていません。そこで別のPCでダウンロードし、autoconfをかけてからraspberry piにコピーし、raspberry piでビルドします。
$ cd rtl-sdr
$ ./configure
$ make
$ sudo make install
$ sudo make install-udev-rules
$ sudo ldconfig
セットアップ
RTL2832UドングルをUSBコネクタに差し込み、アンテナを接続します。MacBook ProとRaspberry PiはEthernetケーブルで直結した状態です。
まずは、rtl_testでデバイスを認識していることを確認します。
$ rtl\_test
Found 1 device(s):
0: Generic RTL2832U (e.g. hama nano)
Using device 0: Generic RTL2832U (e.g. hama nano)
Found Elonics E4000 tuner
Supported gain values (14): -1.0 1.5 4.0 6.5 9.0 11.5 14.0 16.5 19.0 21.5 24.0 29.0 34.0 42.0
Reading samples in async mode...
無事に認識しているようです。lsusbコマンドでの確認も役立ちます。
rtl_tcpリモートサーバ
rtl_tcpを起動してリモートサーバとして動作させてみます。
コマンドラインから以下のコマンドでrtl_tcpを起動します。
$ rtl\_tcp -a 0.0.0.0
一方gnuradioの方は、OsmoSDR Sourceが入ったフローグラフを構築します。以下はいつものようにFMラジオの例です。
OsmoSDR Sourceのパラメータ設定で、Device Argumentsに、rtl_tcpとIP、ポート番号の指定をします。
上記のように設定して、フローグラフを動作開始させると受信開始します。直接Macにドングルを差したのと同じような使い勝手です。ゲインや周波数の調整も可能です。フローグラフを適宜構成することでアマチュア無線やエアバンドも受信することももちろん可能です。
CPU負荷ですが、サンプリングレート1.024MHzでは20%程度となりました。arm11 700MHzのCPUとしては思ったよりも軽快に動作している印象です。
メモ
- 当初libusbとrtl-sdrをMacOSX+CodeSourceryによるクロスコンパイルでビルドしていたのですが、Raspberry Pi用debianにはコンパイラが入っていることがわかったのでセルフコンパイルすることにしました。
- Raspberry Pi(debian)は、ドングルを接続しないと400mA弱の消費ですが、ドングルを接続しrtl_tcpを動作させると500-600mA弱の消費でした。全体ではおよそ3W程度の消費電力となります。
- ネットワークの無線化またはPoEで電源供給することを考えています。
- 一度gnuradio(OsmoSDR Source)を動作停止し、2回目の動作をさせようとするとrtl_tcpが不正終了してしまいます。何か不具合がありそうです。
- 小型Linuxということで、ドングルも超小型のP160を使用してみました。
- ドングルによっては動作しないものがありました。R820Tを使用したドングルが、レジスタ書き込みが失敗した旨のエラーとなり動作させられませんでした。
- rtl_fmコマンドはFMだけではなくAMやSSBなど受信機としての復調モードが一通り揃っています。あとは音声さえ再生できれば単体でラジオになります。
- 7月に入れていたRaspberry Pi用のDebianではオンボードの音声ミニジャックからサウンドを出力することができませんでしたが、今回2012-10-28版にしてみたところサウンドを再生することができました。Raspberry Piを単体で利用することもできますので、この方法については別途書きたいと思います。
- Raspberry Piは今年の春先からとても話題になったのですが、納期に時間がかかることでも有名でした。私はかなり早い7月に入手していたのですが全然活用していませんでした。今回ようやく活用方法が見つかりました。
参考