Raspberry Piで航空機のADS-Bを受信してみました “IPアドレス固定化 ラズパイ環境整備 NTP RealVNC” (2)
“Raspberry Piで航空機のADS-Bを受信してみました “NooElec R820T SDR & DVB-T MESDR Mini dump1090” (1)“の続きです。
まずは、1件、トラブルシューティングから。
(1) エラー”usb_claim_interface error -6″への対処方法
前回のTALKで、 “usb_claim_interface error -6 Failed to open rtlsdr device #0.”というエラーが表示されたので、
“sudo rmmod dvb_usb_rtl28xxu”というコマンドでリカバった旨をお話したのですが、その後、いろいろと試行錯誤している過程で、
“error -6″が再発してしまいました。
エラー表示をじっくり読んでみると、”dvb_usb_rtl28xxu”というカーネルモジュールを、”blacklist”に登録して下さいという解決策が書かれていました。
で、ネットで調べてみると、”/etc/modprobe.d”というフォルダに、適当なファイル名で、”blacklist dvb_usb_rtl28xxu”と記述してリブートすれば解決するということでしたので、早速、試してみたのですが、一方に解消せず。
改めて、”/etc/modprobe.d”配下のファイルを確認してみると、”raspi-blacklist.conf”というそれっぽいファイルがあることが分かったので、そのファイルに同様の記述をし直してリブート。で、ようやく解決しました!
ちなみに、POOHの場合は、”nano”でファイル編集したので、”sudo nano /etc/modprobe.d/raspi-blacklist.conf”でファイルを開き、記述を追記しました。
(2) Raspberry Pi本体のIPアドレスを固定化
マック(macOS)から、”SSH“する時は、”ssh pi@raspberrypi.local
“ってコマンドを打てばいいんですが、
Raspberry Piで航空機のADS-Bを受信した内容を、例えば、マックの”Safari”で表示しようとすると、いちいち、”http://x.x.x.x:8080″という具合に、Raspberry Pi本体のIPアドレスを入力しなくてはなりません。”DHCP“環境ですと、IPアドレスは可変ですので、接続の都度、”ifconfig”等のコマンドで調べなくてはなりません。
ということで、IPアドレスの固定化に挑戦です。
・まずは、自宅にあるインタネットルータ(我が家は、AirMac)の設定情報を確認しておきます。
AirMacの場合は、こちらの画面で、AirMac本体のIPアドレスを確認してメモ。
続いて、こちらの画面で、DHCPの範囲を確認してメモ。ちなみに、IPアドレスの末尾が”2″〜”200″ですので、この値の範囲で、固定するIPアドレスを決める必要があるわけですが、POOHの場合は切りの良い数字にしました。(単に覚えやすいという理由。)
※ 以下、以下、sshでマックから接続している画面とRaspberry Pi側の画面が混在していますが、いずれも、Raspberry Pi側の設定作業です。
・Raspberry Pi側で、”/etc/dhcpcd.conf”という設置ファイルを編集します。
“sudo nano /etc/dhcpcd.conf”っていう感じです。
interface wlan0 ←WiFi通信の場合。
static ip_address ←RaspberryPi本体の固定したいIPアドレスを指定します。
static routers ←インタネットルータ(POOHの場合は、AirMac、デフォルトゲートウェイとも言います)のIPアドレスを指定します。マスクをかける必要がある場合は、例えば、”/24″という表記をお忘れなく。
static domain_name_servers ←DNSサーバーのIPアドレスのIPアドレスを指定します。POOHの場合は、GoogleのDNSサーバのIPアドレスを設定しました。
“~/etc/dhcpcd.conf”を上書き保存した後、設定内容を反映するために、
"sudo
service dhcpcd reload"
というコマンドを投入します。
“dhcpcd[xxxx]: sending signal HUB to pid xxx”というメッセージが表示されれば、設定完了です。
設定内容が終わったら、
・Raspberry Pi側で”ifconfig”コマンドを打って、設定設定が正しく反映されているかどうかチェック。
・マック側で、固定化したIPアドレスに向けて、”ping”を打ってみたり、
・今回の場合でしたら、マック側の”Safari”等で、”http://<固定化したIPアドレス>:8080″にアクセスしてみて下さい。勿論、”./dump1090 –net –interactive”を実行しておくことをお忘れなく。
(3) コマンド入力を楽にするためにパスを通す
今回のように、Raspberry Piで航空機のADS-Bを受信するために、”dump1090″を実行中にしておく際、
ターミナルで、”cd dump1090″で、カレントディレクトリを”dump1090″に切り替えた後、”./dump1090 –net –interactive”を実行する、といった二段階の手続きが必要になります。でも、これって、正直言って、面倒ですよね。
そういう場合、UNIX系の環境では、「パスを通しておく」ことで、スクリプトファイルやアプリの保存場所を、予めシステム側に伝えておくことができます。そうすれば、今回のように、”cd dump1090″というコマンドは不要になるわけです。
・まずは、パスの通し方を練習してみます。この作業の結果は、ターミナル画面を開いている間、一時的にしか有効になりません。
現時点でシステムが把握しているパスは、”echo $PATH”というコマンドで参照できます。”$PATH”とは、環境変数といって、システムの振る舞いを決めるためのデータの一種と思えば良いと思います。
“PATH=$PATH:”に続けて、通したいパスを追記していきます。今回の場合は、”dump1090″というフォルダを通しておきたいので、”PATH=$PATH:dump1090″という具合です。
追記した内容は、”export PATH”とすればOK。
試しに、”dump1090 –net –interactive”と打てば、ADS-B信号の受信が開始されるはずです。
・続いて、再起動しても設定が反映されるようにします。
Raspberry Pi側で、”~/.profile”という設置ファイルを編集します。
“sudo nano ~/.profile”と打てば、”nano”が起動してファイルの内容を編集できるようになります。
“~/.profile”の最後の行までスクロールした後、
今回のケースでは、”PATH=”$PATH:dump1090″”と入力して上書き保存します。Raspberry Piをリブートしてみて下さい。
リブート後、試しに、”dump1090 –net –interactive”と打てば、ADS-B信号の受信が開始されるはずです。
(4) Raspberry Piを最新の状態にしておく
この後、Raspberry Piで 、航空機のADS-B信号を常時フィードする運用を行う予定なので、突然、Raspberry Piの動作が不安定になることを出来るだけ回避しておく必要があると思い、Raspberry Piのファームウェアとシステム、アプリ等を最新の状態にアップデートすることしました。
・Raspberry Piのファームウェアを最新版にアップデートします。
“sudo rpi-update”を実行後、Raspberry Piをリブートします。このアップデート処理は、思ったほど、時間はかかりませんでした。
・Raspberry Piのシステム、アプリ等を最新版にアップデートします。
“sudo apt-get update”でネットから最新版をダウンロードしたうえで、
“sudo apt-get upgrade”で最新版を反映後、Raspberry Piをリブートします。但し、最新版の反映処理が半端なく長時間かかり、途中で止まっちゃわないか、ハラハラしながら1時間、モニターの前で見守っていました。
リブート直後、こんなダイアログが表示されて、反映処理は無事に完了しました。ま、これだけ時間がかかると、頻繁に、というわけにもいきませんが、何かの節目で、最新状態にはしておかなくっちゃね。
(5) Raspberry Piの時刻を日本標準時に設定しておく
ADS-B信号を常時フィードするようにする場合、正確な時刻を付してADS-Bデータを提供すべきです。
Raspberry Piに限らず、正確な時刻を必要とする電子機器は、”NTP“という通信プロトコルを使って時刻合わせをしています。
標準のままのRaspberry Piでは、”pool.ntp.org“というNTPサーバが指定されています。ま、これはこれで良いのですが、有志によって運営されている仮想NTPサーバなので、クリティカルでないパソコン等の使い方では、このままで全く問題ないと思います。
でも、可能な限り正確な時刻設定をしておきたい場合は、日本国内ですと、日本標準時を提供している”国立研究開発法人 情報通信研究機構 NICT“の”日本標準時グループ”が運営しているサーバにアクセスしておきたいです。勿論、その他にもいろいろなNTPサーバが公開または利用できるわけですが、公開されている範囲で、出来るだけ上位のサーバを利用した方が遅延がないので、厳密に言えば、より正確という感じになります。
“NICT公開NTP FAQ“ページからの受け売りになりますが、NTPサーバって、下図のように、階層構造になっていて、最も上位に位置するのが”原子時計“、その配下に、上から順に、”ストラタム Stratum-1″~”ストラタム Stratum-16″と呼ばれるサーバが繋がっています。ちなみに、日本の場合、”ストラタム Stratum-1″は日本標準時、米国の”ストラタム Stratum-1″は米国標準時(GPS)。
そんな前置きはともかく、今回は、”ストラタム Stratum-1″の”NICT” (ntp.nict.jp)を設定します。ネットで検索すると良く目にするマルチフィード”ntp.jst.mfeed.ad.jp”は、下図でお分かりの通り、”ストラタム Stratum-2″という位置関係にあります。
(上図はNICT公開NTP FAQより抜粋しました。)
それでは、Raspberry PiのNTPサーバ設定を変更していきます。
“sudo nano /etc/ntp.conf”で、NTP関連情報が設定されているファイルを編集します。編集した内容を保存した後、”sudo service ntp restart”でシステムに変更内容を反映します。
“sudo nano /etc/ntp.conf”には、先程触れた”pool.ntp.org“というNTPサーバがマルチフィード形式で設定されていますので、それらをコメントアウト(“#”)したうえで、”pool ntp.nict.jp iburst”を追記し、ファイルを更新します。で、”sudo service ntp restart”。
設定作業が終わったら、”ntpq -p”というコマンドで、設定内容をチェックしておきます。一覧リストのなかで、”*”印が付いているサーバが、現時点で利用しているNTPサーバになります。
序に、macOS環境のNTPサーバも変更しておきます。ちなみに、今回は、自宅のiMacの設定を変更しましたが、海外等に持っていく予定のMacBook Proはデフォルトのまま。理由は、海外で日本標準時を参照しようとすると、インターネット上のホップ数が増えてしまい、かえって遅延が発生してしまうからです。
変更する場合は、画面左下の鍵を開けて下さいね。
念のために、”ターミナル”で、”ntpq -p”を打って、設定内容がちゃんと反映されているか確認しておきます。
(6) SSHもいいけど、やっぱりビジュアルにリモートしてみる
Raspberry Piって、基本はコマンド系のシステムなので、macOS環境からリモートする時も、SSHで繋げれば、それはそれで違和感はないんですが、長年、マックを愛用している身からすると、何やかんや言っても、直感的なユーザインタフェースの方が心が落ち着きます。
それと、近いうちに、ADS-B信号を常時フィードするようになったら、羽田空港の滑走路方面に近い、自宅のリビングルームの一角にRaspberry Piを置こうかなあ、と思っているので、その時はディスプレイ、キーボード、マウス等は取り外すつもりでいます。
なので、この段階で、SSH以外にも、Raspberry Piをリモートできる状況を確保しておこうと思い、どのシステム環境でも導入が容易な”VNC“を使えるようにしておくことにしました。
幸い、最新版のRaspberry Piでは、標準的に”RealVNC“をサポートして(デスクトップメニューにアイコンが表示されている)いるし、
“netstat -nlt”コマンドでチェックしてみると、VNCサーバもLISTEN状態になっています。
なので、マック側で、Raspberry Piで立ち上がっているRealVNCサーバに接続すれば良さそうです。
ネットで一通り検索してみると、マックの”Finder”メニューの”移動:サーバへ接続…”項目で、簡単に接続できるようです。
でも、実際にやってみるとエラーになってしまいます。ちなみに、エラー表示の指示通りに設定してもだめでした。
続いて、”Finder”のサイドバーにある”共有”でトライしてみました。
でも、こちらもエラー。ネットで検索してみると、さも簡単に接続できるように説明してくれていますが、実際にやってみると、尽くその通りにはなりません。
こうなったら、macOS側もRaspberry Piと同様、RealVNCで統一してみればいいかも、ということで、macOS版のクライアントアプリをインストールしてみました。ダウンロードサイトは、”こちら“。
ちなみに、クライアントアプリだけで良いので、サーバは今回パスです。
インストール後、IPアドレスで接続してみると、あっけなく接続完了!!認証情報は、Raspberry Piのやつね。
一度、接続に成功すれば、こんな具合にサーバ情報がアイコン化されるので、次回以降は、アイコンをダブルクリックすればOKです。
これで、SSHとVNCの二刀流で接続できるようになったので、いよいよ常時フィードに挑戦だなあ。
序に、iPhoneと、
iPad miniそれぞれに、iOS版の”RealVNC”をインストールしてみました。実際に使ってみた感触では、ADS-B信号を常時フィードするようになったら、iPad miniを常設のリモートモニターにすると良さそうです。しかも、iPad mini辺りだと、Retinaディスプレイなので、Raspberry Piで使っているディスプレイよりも、表示がとっても綺麗で、ターミナル上の文字も鮮明。これは良いなあ。
(7) 適切なキーボードの種類を選択する
“SSH”や”VNC”でリモートログインしている時は、macOSのキーボードが使えるので支障がないのですが、”Raspberry Pi”本体のディスプレイで作業をしている時、アンダースコアやニョロニョロ(チルダ)といった特殊文字を打つ時、キートップ通りの文字を打てなくて困っていました。
POOHが”Raspberry Pi”で使っているキーボードは、格安の”GMYLE USB 接続有線 スリム コンパクト キーボード 78キー 日本語配列 [ホワイトとシルバー]“なので、日本語キーボードを指定していたんですが、それだと、思った通りの文字を入力できません。
で。いろいろ試行錯誤した結果、”英語 (Macintosh)”に設定すると、少なくとも特殊文字は、支障なく打てるようになりました。ま、”Raspberry Pi”で日本語を直接入力する機会は当分なさそうなので、当面はこれでいいかも。
UNIXコマンドブック第4版 [ 田谷文彦 ] |
新しいLinuxの教科書 [ 三宅英明 ] |
[改訂第3版]Linuxコマンドポケットリファレンス [ 沓名亮典 ] |
ホームページ”THE POOH FILES”にも是非お立ち寄り下さい。