Raspberry Pi Zero Wireless、ソフトウェア無線、FlightAwareを使用してオーバーヘッドフライトを追跡する
この記事では、Raspberry Pi ZeroWirelessを使用してお住まいの地域のフライトを追跡する2つの方法を紹介します。また、64×64RGBマトリックスを制御する方法も示しています。
Raspberry Pi Zero Wirelessは、非常に多くのことができる10ドルのマイクロコンピューターです。この記事では、このPiを使用してお住まいの地域のフライトを追跡する2つの方法を紹介します。また、64×64 RGBマトリックスを制御して、フライト番号を表示する方法も示しています。
この記事では、Raspberry Pi ZeroWirelessを使用して3つの別々のプロジェクトを実行します。プロジェクト1では、PiAwareを使用して平面追跡デバイスを作成します。プロジェクト2では、上記の飛行機からデータを収集します。プロジェクト3では、RPi ZeroWを使用して64×64RGBマトリックスを制御する方法を紹介します。
プロジェクト1:Raspberry PiZeroワイヤレスプレーントラッカー
パート | コスト | メモ |
---|---|---|
ラズベリーパイゼロワイヤレス | $ 10 | |
SDRレシーバー | $ 21 | 他の多くのUSBSDRレシーバーが機能する可能性があります |
4GBmicroSDカード | $ 6 | より大きなカードが機能します |
USB-MicroUSBアダプター | $ 5 | |
MicroUSBハブ(オプション) | $ 8 | PiZeroにはmicroUSBポートしかありません。アクセサリを取り付けるには、ハブ/コンバータが必要です |
広帯域アンテナ(オプション) | $ 50 | アンテナは1090MHzをカバーする必要があります |
1090 MHzバンドパスフィルター(オプション) | $ 20 |
リソース
- Raspbian Jessie(インストールガイド)
- PiAwareのインストール
この実験は、Raspberry Pi ZeroWirelessを使用して行われました。ただし、次のコードはRaspberryPiバージョン2以降で機能するはずです。ワイヤレスなしでPiZeroを購入した場合は、ワイヤレスUSBネットワークドングルを使用して追加できます。
ステップ1:SDカードを準備する
最新のRaspbianJessieをコンピューターにダウンロードします。
画像をSDカードに書き込みます(Linux、Mac OS、およびWindowsのガイドは次のとおりです)。
ステップ2:SDカードを変更する
SDカードのルートディレクトリに「ssh」という名前のファイルを作成します。ファイル拡張子もファイルの内容もありません。このファイルによりSSHが有効になり、Piにリモートアクセスできるようになります。
次の内容の「wpa_supplicant.conf」という名前のファイルを作成します。 YourWifiNameとYourWifiPasswordの値を、Wi-Fiネットワークへの接続に使用する名前とパスワードに変更します。
network ={
ssid ="YourWifiName"
psk ="YourWifiPassword"
key_mgmt =WPA-PSK
}
ステップ3:インストールして起動する
コンピューターからSDカードを取り出し、Raspberry Pi ZeroWirelessにインストールします。ボードの端に最も近いMicroUSBポートを使用して、RaspberryPiを電源に接続します。 Raspberry Piが起動してWi-Fiに接続するまで、約1分待ちます。これらの構成ファイルを使用すると、デバイスでキーボード、マウス、またはディスプレイを使用する必要はありません。
ステップ4:円周率を見つける
PiのIPアドレスを特定します。これは、ルーターにログインして接続されているデバイスを確認するか、Look @ Lan(Windows)やnmap(LinuxおよびMac)などのIPスキャナーを使用して実行できます。デバイスが2、3分以内に表示されない場合は、電源を切り、SDカードをPiから取り外し、コンピューターに再挿入して、 ssh を再確認します。 および wpa_supplicant.conf ファイル。
ステップ5:Piに接続する
Windows:Puttyなどのツールを使用してPiに接続します。プログラムをダウンロードして実行し、PiのIPアドレスを入力して、[接続]をクリックします。セキュリティ証明書について尋ねるウィンドウが表示されます。[はい]をクリックしてください。
LinuxおよびMac:ターミナルを開き、「[email protected]」または「sshpi @ ipaddress」(例:「[email protected]」)と入力します。
プロンプトで、デフォルトのユーザー名は「pi」、デフォルトのパスワードは「raspberry」です。
ステップ6:Piを構成する
「sudoraspi-config」と入力してEnterキーを押します。
パスワード、タイムゾーン、ローカリゼーションを変更します。
パスワードプロンプトが表示されたら、現在のパスワードは「ラズベリー」です。デバイスのハッキングを少なくともわずかに困難にするために、より安全なものに変更する必要があります。ちなみに、認証にはパスワードの代わりに証明書を使用する必要がありますが、この記事では説明しません。
次に、次のコマンドを入力して実行できるようにします。
wget http://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.3.0_all.deb
sudo dpkg -ipiaware-repository_3.3.0_all。 deb
sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get install -y piaware fail2ban libio-socket-ssl-perl
sudo piaware- config allow-auto-updates yes
sudo piaware-config allow-manual-updates yes
sudo apt-get install dump1090-fa -y
sudo restart
Rapsberry Piが起動プロセスを完了したら、コンピューターでWebブラウザーを開き、http://raspberrypi.local:8080に移動します(またはraspberrypi.localをデバイスのIPアドレスに置き換えます)。平面が表示され始めてから画面から消えるように、ズームアウトしてから現在地にズームインします。
飛行機の数を増やすには、Pi、SDR、およびアンテナシステムを屋外に持ち出します。 1090 MHzのバンドパスフィルターとより優れたアンテナを追加することで、さらなる改善が見られます。
Pのスクリーンショット iAware 2017年3月14日(円周率の日!)にカリフォルニア州ロサンゼルスの東の地域を示す受信機。上部の線路は、LAXに着陸する準備ができている飛行機を示しています。政府の飛行機が円を描いて飛んでいるのも見えます。
最後に、FlightAware.comアカウントを作成し、受信者をFlightAware.comアカウントに関連付けます。
ADS-B、PiAware、およびdump1090
航空機に取り付けられたトランスポンダを使用すると、4桁の8進数識別子(Mode-A AKA "Squawk")識別子と高度(Mode-C)、24ビットの一意のICAO番号(Mode-S)、および24ビットをブロードキャストできます。追加情報を含むICAO番号(モードS拡張スキッター)。最後のモードはADS-Bとも呼ばれます。
自動従属監視ブロードキャスト(ADS-B)は、航空機の位置(GPS、GLONASSなどによって決定される)を取得し、それを識別情報と組み合わせて、1090MHzでブロードキャストします。レーダー信号による問い合わせへの応答としてのみ送信される他のトランスポンダコードとは異なり、ADS-Bは1秒間に約2回送信されます。
PiAwareとdump1090は、1090 MHzに調整されたソフトウェア無線(SDR)を使用して、近くにあるすべての航空機のブロードキャストを受信およびデコードし、FlightAwareのサーバーに送信します。この情報は、ポート8080のRaspberryPiでホストされているWebページに表示されます。
John Macneilによるイラスト、www.aopa.org。
2020年1月1日までに、すべての航空機にADS-B Outトランスポンダーを装備する必要があります。ただし、それまでは、FlightAwareはマルチラテレーションを使用して、緯度と経度をブロードキャストしない飛行機の位置を特定します。マルチラテレーションは、少なくとも3つの受信機の既知の位置とメッセージの受信時間を使用して、平面の位置を計算します。
プロジェクト2:Pi ZeroWirelessを使用してFlightAware.comから平面データを収集する
FlightAware.comには、データのマイニングと利用を可能にする2つのアプリケーションプログラムインターフェイス(API)があります。FlightXMLとFirehoseです。必要な情報の種類と毎月必要なクエリの数に基づいて、2つから選択してください。このプロジェクトでは、All AboutCircuitsに1か月間の無料アクセスが許可されました。フォローするには、APIキーについてFlightAware.comに連絡する必要があります。
リソース:
- Flight AwareFirehoseのドキュメント
ステップ1:接続をテストする
SSH経由でPiZeroに接続し、FirehoseAPIへの接続をテストします。
openssl s_client -host firehose.flightaware.com -port 1501 -tls1
認定の詳細が1〜2ページ表示されれば、すべてが正しく機能しました。
ステップ2:サンプルファイルとデータを取得する
FlightAwareはGitHubでサンプルファイルをホストします。まず、ユーザー名とAPIキーを使用してサンプルファイルをダウンロードして編集します。
git clone http://github.com/flightaware/firehose_examples.git
cd firehose_examples / perl / example1
sudo nano example1.pl
ユーザー名を変更します および apikey 情報に一致するフィールドを選択し、終了([Ctrl] + [x])して保存します。
perl example1.pl
JavaScript Object Notation(JSON)形式のデータが表示されます:
$ VAR1 ={
'aircrafttype' => 'B738'、
'heading' => '105'、
'pitr' => '1490038420'、
'gs' => '334'、
'clock' => '1490038413'、
....
'hexid' => 'A44591'、
'ident' => ' DAL751 '
' alt '=>' 25100 '、
' lon '=>' -117.38051 '、
' lat '=> '33 .53288'
};
ステップ3:データを収集するようにPiを構成する
Firehoseは、非常に短い時間(〜1 GB /日)で圧倒的な量のデータを生成できるという点で適切な名前が付けられています。つまり、ディスクがいっぱいになり、アカウントの料金が高くなります。したがって、情報を収集するためのスクリプトを作成するときは、ディスクをすぐにいっぱいにして経費勘定を空にすることができるため、定期的にチェックする必要があります。
MicroSDカードのサイズと収集したいものによっては、ストレージを追加するか、raspi-configに戻ってファイルシステムを拡張する必要があります(オプション7、オプションA1)。
私の例では、LGB、LAX、ONT、SNAなどを含む2°×2°の地理的領域(34°N±1°、118°W±1°)のデータを収集します。この地域を選んだのは、私の受信エリアに近いからです。
対象領域は、北緯33度から北緯35度、西経117度から西経119度の範囲です。
次のコードはexample1.plで、18行目と45行目に変更が加えられています。すべての行を以下に示します。これにより、読者はファイルをダウンロードしなくてもフォローできます。 example1.pl のコピーを作成します position.pl と呼ばれます nano を使用します position.pl。を編集するには
cp example1.pl position.pl
sudo nano position.pl
必要な編集を行い、[Ctrl] + [x]で終了します。
1#!/ usr / local / bin / perl 2 3厳密に使用します。 4 IO ::Socket ::SSLを使用します。 5 JSON ::PPを使用します。 6 IO ::Uncompress ::Inflate qw($ InflateError);を使用します。 7 Data ::Dumperを使用します。 8 9 my $ username ='allaboutcircuits'; 10 my $ apikey ='allaboutcircuitsreallylongapikey'; 11私の$ compression =0; 12 13#FlightAwareへのTLSソケット接続を開きます。 14 my $ sock =IO ::Socket ::SSL-> new( 'firehose.flightaware.com:1501')またはdie $!; 15#print "Connected!\ n"; 16 17#開始コマンドを非圧縮ソケットに送信します。 18 my $ initcmd ="ライブバージョン8.0ユーザー$ usernameパスワード$ apikeyイベント\" position \ "latlong \" 33 -117 35 -119 \ ""; 19 if($ Compression){ 20 $ initcmd。="compression compress"; 21} 22 binmode $ sock; 23 print $ sock "$ initcmd \ n"; 24 25#要求された場合、圧縮をアクティブにします。 26私の$ zsock; 27 if($ Compression){ 28 $ zsock =new IO ::Uncompress ::Inflate $ sock 29または死ぬ "IO ::Uncompress ::Inflate failed:$ InflateError \ n"; 30} else { 31 $ zsock =$ sock; 32} 33 34#メインループ、サーバーからJSONの行を読み取ります。 35 my $ i =1; 36 while(my $ line =$ zsock-> getline()){ 37 #print "LINE $ i \ n"; 38 #print "LINE $ i:"、$ line、 "\ n"; 39 40 my $ data =eval {decode_json $ line}; 41 die "Failed to decode JSON:$ line" if!defined($ data)|| $ @; 42 43 print $ data-> {ident}。 "\ t"。$ data-> {lat}。 "\ t"。 $ data-> {lon}。 "\ t"。 $ data-> {alt}。 "\ n"; 44 45最後の場合($ i ++> =10); 46} 47 $ sockを閉じます。 48 49#print "Alldone。\ n";
18行目では、リクエストを117°W〜119°W(-117〜-119で示される)の地理的領域の飛行機に制限しています。 43行目は、対象のフィールドのみをターゲットにする方法を示すように変更されています。この場合、飛行機の便名、緯度、経度、および高度をターゲットにします。 45行目はサーバーに10機の飛行機を要求しています(この行は最終的なスクリプトでコメントアウトできます)。
次の2つのコマンドはプログラムを実行し、プログラムの進行状況を監視できるようにします。
sudo perl position.pl>> position.txt&
tail -f position.txt
最初の行では、スーパーユーザーにプログラム perl を使用させています。 プログラムを実行するには position.pl そして、出力をファイル position.txt に追加(>>)します。 &記号を使用すると、プログラムがバックグラウンドで実行されます。
2行目は、プログラム tail を使用しています ファイル position.txt への変更をフォローする(-f) 、コマンドの完了を監視できます。完了したら、[Ctrl] + [c]を使用して tail を終了します 。データの収集に関心がなくなった場合は、 fg を使用してください プログラムを position.pl に移動します フォアグラウンドに移動して停止するか、[Ctrl] + [c]で解除します。
以下の.zipファイルには、変更されたプログラムと出力が含まれています。これは、構文のわずかな変更によって、プログラムからのサンプル出力とともに、さまざまな情報に焦点を当てることができることを示しています。
- arrivals.plは、着陸したばかりの飛行機(LAXに到着または出発)のJSON出力を提供します
- test_landing.plは、読み取り可能な出力を提供します(たとえば、AAL1155は2017年3月21日22:00:01に着陸しました)
- position.plは、地理的な長方形(34°N±1°、118°W±1°)内のすべての平面のJSON出力を提供します
- test_overhead.plは、フライトID、緯度、経度、および高度を提供します(N721PP 34.36011 -118.37837 18100)
これらのファイルは、FlightAwareによって提供されるexample1.plに小さな変更を加えて作成されました。関心のあるデータのみをキャプチャする独自のデータを作成するには、FlightAware Firehose APIドキュメントを使用してJSON形式で適切な情報をリクエストし、ファイル内の正しい構文を使用して必要な情報のみを出力します。
プロジェクト3:Pi ZeroWirelessを使用して64×64RGBマトリックスを制御する
パート | コスト | メモ |
---|---|---|
(2)2×32×32RGBディスプレイマトリックス+電源 | $ 75($ 150) | 64×64ピクセルのディスプレイを作成するには、合計4つの32×32RGBマトリックスが必要です |
AdafruitRGBマトリックスHAT + RTCクロック | $ 25 | データシート |
20ピンIDCケーブル(Hub75) | $ 7- $ 13 | 必要な長さは、パネルの構成とPiまでの距離によって異なります |
0.1 "オスヘッダー(40ピン、2×20) | $ 1 | 2.54 mm |
ステップ1:Adafruit MatrixHATの準備
Adafruit.comの指示に従って、AdafruitHATのオスとメスのヘッダーをはんだ付けします。次に、ワイヤをはんだ付けするか、ピン4と18の間にジャンパーを取り付けます。このプロジェクトでは、DCバレルジャックまたはネジ留め式端子コネクタを取り付ける必要はありません。
ステップ2:ラズベリーパイの準備
2×20のオスヘッダーを所定の位置にはんだ付けします。
ステップ3:RGBマトリックスの準備
下の行の矢印が下を向き、上の行の矢印が上を向くようにRGBマトリックスを配置します(ここの画像を参照)。 2×10IDCケーブルを使用して、AdafruitHATの出力を最初のボードの入力に接続します。次に、最初のボードの出力を2番目のボードの入力に接続し、2番目のボードの出力を3番目のボードの入力に接続します。
RGBマトリックスパネルの裏側。信号はボードからボードへ「C」字型に伝わります。
幸運にもレーザーカッターまたはCNCマシンを自由に使用できる場合は、使用されている4つのRGBマトリックスプレートすべてを保持できるバックプレートの図面を含めました。取り付け穴はスロットに置き換えられ、共通の中心点からの位置合わせが可能になります。
4つの32×32パネルを取り付けて大きな64×64パネルを作成するためのテンプレート。さまざまなパネル配置が可能です。
Hughes_4x4RGBMatrix.zip
HennenZellerによる完全なドキュメントとソースコード。
すべての電気接続が完了したら、RaspberryPiの電源を入れます。約1分後、PuttyまたはSSHを使用してPiにログオンしてみます。
入力したら、次のように入力してPiのサウンドを無効にします(ドキュメントには、ハードウェアサブシステムがサウンドおよびRGBマトリックスハードウェアと競合していることが示されています)。
cat <
EOF
sudo update-initramfs -u
次に、apt-getを使用してPythonとイメージングファイルをインストールします。
sudo apt-get install -y build-essential libconfig ++-dev python-dev python-imaging libgraphicsmagick ++-dev libio-socket-ssl-perl
RGBマトリックスを実行し、それらをコンパイルするために必要なファイルを取得します。
git clone https://github.com/hzeller/rpi-rgb-led-matrix
cd rpi-rgb-led-matrix
HARDWARE_DESC =adafruit-hat-pwm make -C examples-api-use
sudo examples-api-use / demo -L -D0
cd utils /
HARDWARE_DESC =adafruit-hat-pwm make
オプションで、Piにカメラも接続している場合は、64×64ピクセルの画像をキャプチャしてディスプレイにフィードできます。
raspistill -w 64 -h 64 -o myimg.png
sudo ./led-image-viewer -L -f myimg.png
前の2行は、64×64の画像をディスプレイにキャプチャし、プログラムled-image-viewer(前のセクションでコンパイル)を使用して、それを大型ディスプレイ(-L)に永久に表示します(-f)。
次は?
これで、周囲の航空機を(アンテナとSDR受信機またはAPI呼び出しのいずれかで)追跡し、64ピクセル×64ピクセルのディスプレイまたはRaspberryに必要な情報を表示できる10ドルのコンピューターができました。 Pi ZeroWのHDMI出力。
あなたがそれで何をするかはあなたの想像力によってのみ制限されます。
この記事ではツールのみを紹介しているので、私がお勧めする最初のステップは、ディスプレイとFlightAwareのドキュメントを読んでから、両方のサンプルプログラムを開いて、それらの機能をよりよく理解することです。
また、Raspberry Pi Zeroは、 Cron などの頻繁に使用されるコマンドを備えた機能するLinuxインストールであることを忘れないでください。 、 Grep 、および Awk 。 Piにまだインストールされていないものは、 apt-get install の短いものです。 離れて。
以下のビデオをチェックして、これらのプロジェクトの集大成をご覧ください!
このプロジェクトを試してみてください。 BOMを取得します。
産業機器
- Pixus:堅牢なソフトウェア無線ソリューション
- 1線式DS18B20センサーとRaspberryPiを使用して温度を測定します
- RaspberryPiとNagiosを使用して室温を監視する
- MoteinoとRaspberryPiを使用して室温を監視する
- SensorflareとRaspberryPiを備えた433MHzスマートホームコントローラー
- RaspberryPiとZabbixスーパーバイザーで読み取るアナログセンサー
- Raspberry Pi、DHT11センサー、Thingspeakを使用して最初のIOTを構築します。
- ラズベリーパイと湿度センサーを備えたエアロポニックス
- RAK831LoRaゲートウェイとRPi3の使用を開始する
- RaspberryPiとPythonを使用したロボットの構築
- ArduinoとRaspberryPiを使用してインターネット制御のビデオストリーミングロボットを構築する