Raspberry Pi Zero Wireless, 소프트웨어 정의 라디오 및 FlightAware로 항공 비행 추적
이 기사에서는 Raspberry Pi Zero Wireless를 사용하여 해당 지역의 항공편을 추적하는 두 가지 방법을 보여줍니다. 또한 64×64 RGB 매트릭스를 제어하는 방법도 보여줍니다.
Raspberry Pi Zero Wireless는 많은 것을 할 수 있는 10달러짜리 마이크로컴퓨터입니다. 이 기사에서는 이 Pi를 사용하여 해당 지역의 항공편을 추적하는 두 가지 방법을 보여줍니다. 또한 64×64 RGB 매트릭스를 제어하여 항공편 번호를 표시하는 방법도 보여줍니다!
이 기사에서는 Raspberry Pi Zero Wireless를 사용하여 세 가지 개별 프로젝트를 수행합니다. 프로젝트 1에서는 PiAware를 사용하여 비행기 추적 장치를 만들 것입니다. 프로젝트 2에서는 해당 비행기에서 데이터를 수집합니다. 프로젝트 3에서는 RPi Zero W를 사용하여 64×64 RGB 매트릭스를 제어하는 방법을 보여드리겠습니다.
프로젝트 1:Raspberry Pi Zero 무선 비행기 추적기
부분 | 비용 | 참고 |
라즈베리 파이 제로 무선 | $10 | |
SDR 수신기 | $21 | 다른 많은 USB SDR 수신기가 작동할 것입니다. |
4GB microSD 카드 | $6 | 더 큰 카드도 사용 가능 |
USB-MicroUSB 어댑터 | $5 | |
MicroUSB 허브(옵션) | $8 | Pi Zero에는 microUSB 포트만 있습니다. 액세서리를 부착하려면 허브/컨버터가 필요합니다. |
광대역 안테나(옵션) | $50 | 안테나는 1090MHz를 커버해야 함 |
1090MHz 대역 통과 필터(선택 사항) | $20 | |
자료
<울>
Raspbian Jessie(설치 가이드)
PiAware 설치
이 실험은 Raspberry Pi Zero Wireless를 사용하여 수행되었습니다. 그러나 다음 코드는 모든 Raspberry Pi 버전 2 이상에서 작동해야 합니다. 무선 없이 Pi Zero를 구매하면 무선 USB 네트워크 동글과 함께 추가할 수 있습니다.
1단계:SD 카드 준비
최신 Raspbian Jessie를 컴퓨터에 다운로드하십시오.
이미지를 SD 카드에 씁니다(여기에 Linux, Mac OS 및 Windows용 가이드가 있습니다).
2단계:SD 카드 수정
SD 카드의 루트 디렉터리에 "ssh"라는 파일을 만듭니다. 파일 확장자 없음, 파일 내용 없음. 이 파일은 SSH를 활성화하여 Pi에 원격으로 액세스할 수 있도록 합니다.
다음 내용으로 "wpa_supplicant.conf"라는 파일을 만듭니다. YourWifiName 및 YourWifiPassword 값을 Wi-Fi 네트워크에 연결하는 데 사용하는 이름과 암호로 변경합니다.
네트워크={
ssid="YourWifiName"
psk="YourWifiPassword"
key_mgmt=WPA-PSK
}
3단계:설치 및 부팅
컴퓨터에서 SD 카드를 꺼내 Raspberry Pi Zero Wireless에 설치합니다. 보드 끝에 가장 가까운 MicroUSB 포트를 사용하여 Raspberry Pi를 전원에 연결합니다. Raspberry Pi가 부팅되고 Wi-Fi에 연결될 때까지 약 1분 정도 기다립니다. 이러한 구성 파일을 사용하면 장치에서 키보드, 마우스 또는 디스플레이를 사용할 필요가 없습니다.
4단계:Pi 찾기
Pi의 IP 주소를 식별합니다. 라우터에 로그인하고 연결된 장치를 확인하거나 Look@Lan(Windows) 또는 nmap(Linux 및 Mac)과 같은 IP 스캐너를 통해 확인할 수 있습니다. 2~3분 이내에 기기가 나타나지 않으면 전원을 차단하고 Pi에서 SD 카드를 제거했다가 컴퓨터에 다시 삽입하고 ssh 및 wpa_supplicant.conf 파일.
5단계:Pi에 연결
Windows:Putty와 같은 도구를 사용하여 Pi에 연결합니다. 프로그램을 다운로드하여 실행하고 Pi의 IP 주소를 입력하고 "연결"을 클릭합니다. 보안 인증서에 대해 묻는 창이 나타납니다. "예"를 클릭하십시오.
Linux 및 Mac:터미널을 열고 "ssh [email protected]" 또는 "ssh pi@ipaddress"(예:"ssh [email protected]")를 입력합니다.
프롬프트에서 기본 사용자 이름은 "pi"이고 기본 암호는 "raspberry"입니다.
6단계:Pi 구성
"sudo raspi-config"를 입력하고 Enter 키를 누릅니다.
비밀번호, 시간대 및 현지화를 변경하십시오.
암호 프롬프트가 나타나면 현재 암호는 "raspberry"입니다. 장치를 해킹하기가 최소한 조금이라도 어렵게 하려면 더 안전한 것으로 변경해야 합니다. 참고로 암호 대신 인증서를 사용하여 인증해야 하지만 이 문서에서는 이에 대해 설명하지 않습니다.
그런 다음 다음 명령을 입력하고 실행을 허용합니다.
wget http://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.3.0_all.deb
sudo dpkg -i piaware-repository_3.3.0_all. deb
sudo apt-get 업데이트
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 재부팅
Rapsberry Pi가 부팅 프로세스를 완료한 후 컴퓨터에서 웹 브라우저를 열고 http://raspberrypi.local:8080으로 이동합니다(또는 raspberrypi.local을 장치의 IP 주소로 교체). 비행기가 나타나기 시작하고 화면에서 사라지기 시작하면 축소했다가 확대하십시오.
비행기의 수를 늘리려면 Pi, SDR 및 안테나 시스템을 외부로 가져가십시오. 1090MHz 대역 통과 필터와 더 나은 안테나를 추가하면 더 많은 개선이 이루어집니다.
P 스크린샷 아이어웨어 수신기는 3/14/17(Pi Day!)에 캘리포니아 로스앤젤레스 동쪽 지역을 보여줍니다. 상단의 선형 트랙은 LAX에 착륙할 준비가 된 비행기를 보여줍니다. 원을 그리며 비행하는 정부 항공기도 보입니다.
마지막으로 FlightAware.com 계정을 만든 다음 수신기를 FlightAware.com 계정과 연결하십시오.
ADS-B, PiAware 및 dump1090
항공기에 부착된 트랜스폰더를 통해 4자리 8진수 식별자(Mode-A AKA "Squawk") 식별자와 고도(Mode-C), 24비트 고유 ICAO 번호(Mode-S) 및 24비트 추가 정보가 있는 ICAO 번호(Mode S Extended Squitter). 마지막 모드는 ADS-B라고도 합니다.
ADS-B(Automatic Dependent Surveillance-Broadcast)는 항공기의 위치(GPS, GLONASS 등에 의해 결정됨)를 파악하고 식별 정보와 결합하여 1090MHz로 방송합니다. 레이더 신호에 의한 질문에 대한 응답으로만 전송되는 다른 응답기 코드와 달리 ADS-B는 초당 약 두 번 전송됩니다.
PiAware 및 dump1090은 1090MHz로 조정된 소프트웨어 정의 라디오(SDR)를 사용하여 주변에 있는 모든 항공기의 방송을 수신 및 디코딩하고 이를 FlightAware의 서버로 보냅니다. 정보는 포트 8080의 Raspberry Pi에서 호스팅되는 웹 페이지에 표시됩니다.
John Macneil의 그림, www.aopa.org.
모든 항공기는 2020년 1월 1일까지 ADS-B Out 트랜스폰더를 장착해야 합니다. 그러나 그때까지 FlightAware는 다중 측량을 사용하여 위도와 경도를 방송하지 않는 항공기의 위치를 결정합니다. Multilateration은 최소 3명의 수신기의 알려진 위치와 메시지 수신 시간을 사용하여 평면의 위치를 계산합니다.
프로젝트 2:Pi Zero Wireless를 사용하여 FlightAware.com에서 비행기 데이터 수집
FlightAware.com에는 데이터를 마이닝하고 활용할 수 있는 두 가지 API(응용 프로그램 인터페이스)인 FlightXML과 Firehose가 있습니다. 필요한 정보 유형과 매월 필요한 쿼리 수에 따라 둘 중에서 선택하십시오. 이 프로젝트에서 All About Circuits는 한 달 동안 무료로 액세스할 수 있었습니다. 따라 하려면 FlightAware.com에 API 키를 문의해야 합니다.
자료:
<울>
비행 인식 Firehose 문서
1단계:연결 테스트
SSH를 통해 Pi Zero에 연결하고 Firehose API에 대한 연결을 테스트합니다.
openssl s_client -호스트 firehose.flightaware.com -포트 1501 -tls1
인증 세부 정보 페이지 또는 두 페이지가 표시되면 모든 것이 올바르게 작동한 것입니다.
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])하고 저장하십시오.
펄 예제1.pl
JSON(JavaScript Object Notation) 형식의 데이터가 표시되어야 합니다.
$VAR1 ={
'항공기 유형' => 'B738',
'제목' => '105',
'pitr' => '1490038420',
'gs' => '334',
'시계' => '1490038413',
....
'hexid' => 'A44591',
'ident' => ' DAL751'
'alt' => '25100',
'lon' => '-117.38051',
'lat' => '33.53288'
};
3단계:데이터를 수집하도록 Pi 구성
Firehose는 디스크를 채우고 계정에 부과되는 요금을 증가시켜 매우 짧은 시간(~1GB/일)에 압도적인 양의 데이터를 생성할 수 있다는 점에서 적절하게 명명되었습니다. 따라서 정보를 수집하는 스크립트를 만들 때 디스크를 매우 빠르게 채우고 비용 계정을 비울 수 있으므로 정기적으로 확인해야 합니다.
MicroSD 카드의 크기와 수집하려는 항목에 따라 추가 스토리지를 추가하거나 raspi-config로 돌아가서 파일 시스템을 확장해야 할 수 있습니다(옵션 7, 옵션 A1).
예를 들어 LGB, LAX, ONT, SNA 등을 포함하는 2° × 2° 지리적 영역(34° N ± 1°, 118° W ± 1°)에 대한 데이터를 수집하려고 합니다. 나는 이 지역이 내 수신 지역과 비슷하기 때문에 선택했습니다.
관심 영역은 북위 33° ~ 북위 35° 및 폭 117° ~ 119°입니다.
다음 코드는 18행과 45행이 변경된 example1.pl입니다. 독자가 파일을 다운로드하지 않고도 따라할 수 있도록 모든 행이 아래에 표시됩니다. example1.pl 사본 만들기 position.pl이라고 함 나노 사용 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 사용 데이터 ::덤퍼; 8 9 내 $username ='allaboutcircuits'; 10 내 $apikey ='allaboutcircuitsreallylongapikey'; 11 내 $압축 =0; 12 13 # FlightAware에 대한 TLS 소켓 연결을 엽니다. 14 my $sock =IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!; 15 # print "연결되었습니다!\n"; 16 17 # 압축되지 않은 소켓에 시작 명령을 보냅니다. 18 my $initcmd ="라이브 버전 8.0 사용자 $username 암호 $apikey 이벤트 \"위치\" latlong \"33 -117 35 -119\""; 19 if ($압축) { 20 $initcmd .="압축 압축"; 21 } 22 빈모드 $sock; 23 print $sock "$initcmd\n"; 24 25 # 요청하면 압축을 활성화합니다. 26 내 $zsock; 27 if ($압축) { 28 $zsock =새로운 IO::압축해제::$sock 팽창 29 또는 die "IO::Uncompress::Inflate 실패:$InflateError\n"; 30 } 기타 { 31 $zsock =$sock; 32 } 33 34 # 메인 루프, 서버에서 JSON 라인 읽기. 35 내 $i =1; 36 while (내 $line =$zsock->getline()) { 37 #print "라인 $i\n"; 38 #print "LINE $i:", $line, "\n"; 39 40 내 $data =평가 {decode_json $line}; 41 die "JSON 디코딩 실패:$line" if !defined($data) || $@; 42 43 인쇄 $data->{ident}." \t".$data->{lat}." \t " . $data->{lon} . "\t". $data->{alt}." \n"; 44 45 마지막 if ($i++>=10); 46 } 47 닫기 $sock; 48 49 # print "모두 완료되었습니다.\n";
18행은 117° W와 119° W(-117 및 -119로 표시) 사이의 지리적 영역에 있는 비행기로 요청을 제한합니다. 43행은 관심 분야만 대상으로 하는 방법을 보여주기 위해 수정되었습니다. 이 경우 비행기의 편명, 위도, 경도 및 고도를 타겟팅합니다. 45행은 서버에서 10개의 평면을 요청합니다(이 행은 최종 스크립트에서 주석 처리될 수 있음).
다음 두 명령은 프로그램을 실행하고 프로그램 진행 상황을 모니터링할 수 있도록 합니다.
sudo 펄 position.pl>> position.txt &
꼬리 -f position.txt
첫 번째 줄은 수퍼유저가 perl 프로그램을 사용하도록 합니다. position.pl 프로그램 실행 출력을 position.txt 파일에 추가(>>) &기호는 프로그램이 백그라운드에서 실행되도록 합니다.
두 번째 줄은 tail 프로그램을 사용합니다. position.txt 파일에 대한 변경 사항을 따르기(-f) , 완료를 위해 명령을 모니터링할 수 있습니다. 완료되면 [Ctrl]+[c]를 사용하여 꼬리를 종료합니다. . 더 이상 데이터 수집에 관심이 없으면 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은 항공편 식별, 위도, 경도 및 고도를 제공합니다(N721PP 34.36011 -118.37837 18100)
이 파일은 FlightAware에서 제공하는 example1.pl을 약간 수정하여 만들어졌습니다. 관심 있는 데이터만 캡처하는 고유한 데이터를 만들려면 FlightAware Firehose API 설명서를 사용하여 JSON 형식의 적절한 정보를 요청한 다음 파일 내부의 올바른 구문을 사용하여 필요한 정보만 출력하십시오.
프로젝트 3:Pi Zero Wireless를 사용하여 64×64 RGB 매트릭스 제어
부분 | 비용 | 참고 |
(2) 2× 32×32 RGB 디스플레이 매트릭스 + 전원 공급 장치 | $75($150) | 64×64 픽셀 디스플레이를 생성하려면 총 4개의 32×32 RGB 매트릭스가 필요합니다. |
Adafruit RGB 매트릭스 HAT + RTC 시계 | $25 | 데이터시트 |
20핀 IDC 케이블(Hub75) | $7-$13 | 필요한 길이는 패널의 구성과 Pi까지의 거리에 따라 다릅니다. |
0.1" 수 헤더(40핀, 2×20) | $1 | 2.54mm |
1단계:Adafruit Matrix HAT 준비
Adafruit.com의 지침에 따라 Adafruit HAT의 암수 헤더를 납땜합니다. 그런 다음 와이어를 납땜하거나 핀 4와 18 사이에 점퍼를 연결합니다. 이 프로젝트의 경우 DC 배럴 잭이나 나사 터미널 커넥터를 연결할 필요가 없습니다.
2단계:라즈베리 파이 준비
2×20 수 헤더를 제자리에 납땜합니다.
3단계:RGB 매트릭스 준비
아래쪽 행의 화살표가 아래를 가리키고 위쪽 행의 화살표가 위쪽을 가리키도록 RGB 행렬의 방향을 지정합니다(여기 이미지 참조). 2×10 IDC 케이블을 사용하여 Adafruit HAT의 출력을 첫 번째 보드의 입력에 연결합니다. 그런 다음 첫 번째 보드의 출력을 두 번째 보드의 입력에 연결하고 두 번째 보드의 출력을 세 번째 보드의 입력에 연결합니다.
RGB 매트릭스 패널의 뒷면. 신호는 "C"자 모양으로 보드에서 보드로 이동합니다.
레이저 커터나 CNC 기계를 마음대로 사용할 수 있을 만큼 운이 좋다면 사용된 RGB 매트릭스 플레이트 4개를 모두 고정할 수 있는 백 플레이트에 대한 도면을 포함시켰습니다. 장착 구멍은 공통 중심점에서 정렬할 수 있도록 슬롯으로 교체됩니다.
대형 64×64 패널을 만들기 위해 4개의 32×32 패널을 장착하기 위한 템플릿. 다양한 패널 배치가 가능합니다.
Hughes_4x4RGBMatrix.zip
Hennen Zeller의 전체 문서 및 소스 코드.
모든 전기 연결이 완료되면 Raspberry Pi의 전원을 켭니다. 약 1분 후에 Putty 또는 SSH를 사용하여 Pi에 로그온을 시도합니다.
들어가면 다음을 입력하여 Pi에서 사운드를 비활성화합니다(문서는 하드웨어 하위 시스템이 사운드 및 RGB 매트릭스 하드웨어와 충돌함을 나타냄).
고양이 <
블랙리스트 snd_bcm2835
EOF
sudo 업데이트-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
앞의 두 줄은 64×64 이미지를 디스플레이에 캡처하고 led-image-viewer(이전 섹션에서 컴파일됨) 프로그램을 사용하여 대형 디스플레이(-L)에 영원히 표시합니다(-f).
다음은 무엇입니까?
이제 주변의 항공기를 추적할 수 있고(안테나 및 SDR 수신기 또는 API 호출로) 64픽셀 x 64픽셀 디스플레이 또는 Raspberry에 원하는 정보를 표시할 수 있는 10달러 컴퓨터가 있습니다. Pi Zero W의 HDMI 출력입니다.
당신이 그것으로 하는 일은 당신의 상상에 의해서만 제한됩니다.
이 문서에서는 도구만 소개하므로 내가 권장하는 첫 번째 단계는 디스플레이 및 FlightAware에 대한 설명서를 읽은 다음 두 가지의 예제 프로그램을 열어 기능을 더 잘 이해하는 것입니다.
또한 Raspberry Pi Zero는 Cron과 같이 자주 사용되는 명령으로 완성된 작동하는 Linux 설치임을 잊지 마십시오. , 그렙 , 그리고 어이쿠 . Pi에 아직 없는 것은 모두 짧은 apt-get install 일 뿐입니다. 멀리.
이 프로젝트의 정점을 보려면 아래 비디오를 확인하십시오!
이 프로젝트를 직접 시도해 보십시오! BOM을 받으세요.