Отслеживайте накладные рейсы с помощью Raspberry Pi Zero Wireless, программного обеспечения с установленным радио и FlightAware
Raspberry Pi Zero Wireless - это микрокомпьютер стоимостью 10 долларов, способный на многое. Эта статья показывает вам два способа использования этого Pi для отслеживания полетов в вашем районе. Он также демонстрирует, как он может управлять матрицей 64 × 64 RGB для отображения номеров рейсов!
В этой статье я сделаю три отдельных проекта, используя Raspberry Pi Zero Wireless. В Project 1 я создам устройство слежения за плоскостями, использующее PiAware. В проекте 2 я собираю данные с указанных самолетов. В Project 3 я покажу вам, как использовать RPi Zero W для управления матрицей 64 × 64 RGB.
Проект 1: беспроволочный сканер малины Pi Zero
Часть | Стоимость | Заметки |
---|---|---|
Raspberry Pi Zero Wireless | $ 10 | |
Приемник SDR | $ 21 | Многие другие USB SDR-приемники, скорее всего, будут работать |
Карточка microSD 4GB | $ 6 | Большие карты будут работать |
Адаптер USB-to-MicroUSB | $ 5 | |
MicroUSB Hub (дополнительно) | $ 8 | Pi Zero имеет только порты microUSB; для крепления аксессуаров вам нужен концентратор / конвертер |
Широкополосная антенна (дополнительно) | $ 50 | Антенна должна охватывать 1090 МГц |
1090 МГц полосовой фильтр (опционально) | $ 20 |
Ресурсы
- Raspbian Jessie (Руководство по установке)
- Установка PiAware
Этот эксперимент был выполнен с использованием Raspberry Pi Zero Wireless. Однако следующий код должен работать на любой версии малины Pi версии 2 или новее. Если вы покупаете Pi Zero без беспроводной связи, вы можете добавить его с помощью беспроводного сетевого ключа USB.
Шаг 1: Подготовьте SD-карту
Загрузите последнюю версию Raspbian Jessie на свой компьютер.
Напишите изображение на SD-карту (здесь приведены руководства для Linux, Mac OS и Windows).
Шаг 2: Измените SD-карту
Создайте файл с именем «ssh» в корневом каталоге SD-карты. Нет расширения файла, нет содержимого файла. Этот файл включает SSH, который позволит вам удаленно получить доступ к Pi.
Создайте файл с именем «wpa_supplicant.conf» со следующим содержимым. Измените значения для YourWifiName и YourWifiPassword на имя и пароль, которые вы используете для подключения к сети Wi-Fi.
Сеть = {
= SSID "YourWifiName"
PSK = "YourWifiPassword"
key_mgmt = WPA-PSK
}
Шаг 3. Установка и загрузка
Извлеките SD-карту с компьютера и установите ее в Raspberry Pi Zero Wireless. Подключите малину Pi к источнику питания, используя порт MicroUSB, расположенный ближе всего к концу платы. Подождите примерно одну минуту для загрузки малины Pi и подключитесь к Wi-Fi. С этими конфигурационными файлами нет необходимости использовать клавиатуру, мышь или дисплей с вашим устройством.
Шаг 4: Найдите свой Pi
Определите IP-адрес вашего Pi - это может быть достигнуто путем входа в ваш маршрутизатор и просмотра подключенных устройств или с помощью IP-сканера, такого как (Windows) или nmap (Linux и Mac). Если ваше устройство не появляется в течение двух или трех минут, отключите питание, извлеките SD-карту из Pi и снова вставьте его на свой компьютер и дважды проверьте файлы ssh и wpa_supplicant.conf.
Шаг 5: Подключитесь к своему Pi
Windows: используйте такой инструмент, как Putty, чтобы подключиться к вашему Pi. Загрузите и запустите программу, введите IP-адрес своего Pi и нажмите «connect». Появится окно с запросом о сертификате безопасности - нажмите «Да».
Linux и Mac: откройте терминал и введите «ssh» или «ssh» (например, «ssh»).
В командной строке имя пользователя по умолчанию - «pi», а пароль по умолчанию - «малина».
Шаг 6: Настройте свой Pi
Введите «sudo raspi-config» и нажмите enter.
Измените свой пароль, часовой пояс и локализацию.
Когда появится запрос пароля, текущий пароль будет «малиновым»; вы должны изменить его на что-то более безопасное, чтобы сделать его по крайней мере трудно трудно взломать ваше устройство. На стороне примечания, вместо паролей, вы должны использовать сертификаты для аутентификации, но это не будет обсуждаться в этой статье.
Затем введите следующие команды и позвольте им выполнить:
wget //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 завершит процесс загрузки, откройте веб-браузер на вашем компьютере и перейдите к //raspberrypi.local:8080 (или замените raspberrypi.local на IP-адрес вашего устройства). Уменьшите масштаб, а затем увеличьте масштаб до вашего местоположения, когда начнут появляться самолеты, а затем исчезнет с экрана.
Чтобы увеличить количество самолетов, возьмите систему Pi, SDR и антенну снаружи. Дальнейшие улучшения можно найти, добавив полосовой фильтр 1090 МГц и лучшую антенну.

Снимок экрана ресивера P iAware, который показывает область к востоку от Лос-Анджелеса, штат Калифорния, на 3/14/17 (Pi Day!). Линейные трассы на вершине показывают самолеты, готовые приземляться в LAX. Также видно, что правительственный самолет летает по кругу
Наконец, создайте учетную запись FlightAware.com, а затем свяжите получателя с учетной записью FlightAware.com.
ADS-B, PiAware и дамп1090
Транспондеры, прикрепленные к самолетам, позволяют им транслировать четырехзначный восьмизначный идентификатор («АСКА« Сквока »), а также высоту (режим-С), 24-битный уникальный номер ИКАО (режим-S) и 24-разрядный Номер ИКАО с дополнительной информацией (расширенный сквиттер режима S). Последний режим также известен как ADS-B.
Автоматическое зависимое наблюдение-вещание (ADS-B) занимает позицию воздушного судна (как определено GPS, ГЛОНАСС и т. Д.), Объединяет его с идентифицирующей информацией и транслирует его на частоте 1090 МГц. В отличие от других кодов транспондеров, которые передаются только в качестве ответа на запрос радиолокационным сигналом, ADS-B передается приблизительно два раза в секунду.
PiAware и dump1090 используют радиоустройство с программным обеспечением (SDR), настроенное на 1090 МГц, для приема и декодирования трансляций всех воздушных судов в окрестностях и отправки их на серверы FlightAware. Информация отображается на веб-странице, размещенной на малине Pi на порту 8080.

Иллюстрация Джона Макнейла, www.aopa.org
Все летательные аппараты должны быть оснащены транспондерами ADS-B Out до 1 января 2020 года. Но до этого FlightAware использует мультилатерацию для определения местоположения самолетов, которые не передают свою широту и долготу. Мультилатерация использует известную позицию по меньшей мере трех приемников и время приема сообщения для вычисления положения плоскости.
Проект 2: Использование беспроводной сети Pi Zero для сбора данных самолета от FlightAware.com
FlightAware.com имеет два интерфейса прикладных программ (API), которые позволяют добывать и использовать данные: FlightXML и Firehose. Выбирайте между ними в зависимости от типа необходимой вам информации и количества запросов, которые вам нужны каждый месяц. Для этого проекта All About Circuits был предоставлен бесплатный доступ в течение одного месяца. Чтобы следовать дальше, вам нужно связаться с FlightAware.com для ключа API.
Ресурсы:
Документация Flight Aware Firehose
Шаг 1: тестовое подключение
Подключайтесь к своему Pi Zero по SSH и проверяйте подключение к API Firehose.
openssl s_client -host firehose.flightaware.com -port 1501 -tls1
Если вы видите страницу или две детали сертификации, все работает правильно.
Шаг 2: Получить образцы файлов и данных
FlightAware размещает образцы файлов в GitHub. Начните с загрузки и редактирования образцов файлов с вашим именем пользователя и ключом API.
git clone //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 ГБ / день) - заполнение вашего диска и увеличение расходов на вашу учетную запись. Поэтому, когда вы создаете скрипт для сбора информации, вы должны проверять его через регулярные промежутки времени, так как вы можете быстро заполнить свой диск и опорочить свой счет.
В зависимости от размера вашей карты MicroSD и того, что вы надеетесь собрать, вам может потребоваться добавить дополнительное хранилище или вернуться к raspi-config и расширить вашу файловую систему (вариант 7, вариант A1).
Например, я собираюсь собирать данные для географической области 2 ° x 2 °, которая включает LGB, LAX, ONT, SNA и т. Д. (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 use strict; 4 use IO::Socket::SSL; 5 use JSON::PP; 6 use IO::Uncompress::Inflate qw($InflateError); 7 use Data::Dumper; 8 9 my $username = 'allaboutcircuits'; 10 my $apikey = 'allaboutcircuitsreallylongapikey'; 11 my $compression = 0; 12 13 # Open the TLS socket connection to FlightAware. 14 my $sock = IO::Socket::SSL->new('firehose.flightaware.com:1501') or die $!; 15 # print "Connected!\n"; 16 17 # Send the initiation command to the uncompressed socket. 18 my $initcmd = "live version 8.0 user $username password $apikey events \"position\" latlong \"33 -117 35 -119\""; 19 if ($compression) { 20 $initcmd.= " compression compress"; 21 } 22 binmode $sock; 23 print $sock "$initcmd\n"; 24 25 # Activate compression, if requested. 26 my $zsock; 27 if ($compression) { 28 $zsock = new IO::Uncompress::Inflate $sock 29 or die "IO::Uncompress::Inflate failed: $InflateError\n"; 30 } else { 31 $zsock = $sock; 32 } 33 34 # Main loop, reading lines of JSON from the server. 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 last if ($i+ >= 10); 46 } 47 close $sock; 48 49 # print "All done.\n";
Строка 18 ограничивает запрос плоскостям в географическом регионе между 117 ° W и 119 ° W (обозначается -117 и -119). Строка 43 изменена, чтобы продемонстрировать метод, предназначенный только для интересующих областей. В этом случае мы будем указывать номер рейса самолета, широту, долготу и высоту. Строка 45 запрашивает 10 самолетов с сервера (эта строка может быть прокомментирована в конечном скрипте).
Следующие две команды выполняют программу и позволяют отслеживать ход выполнения программы:
sudo perl position.pl >> position.txt &
tail -f position.txt
В первой строке суперпользователь использует программу perl для запуска программы position.pl и добавляет (>>) вывод в файл position.txt, а символ & заставляет программу работать в фоновом режиме.
Вторая строка использует хвост программы для отслеживания (-f) изменений в файле position.txt, который позволяет вам отслеживать выполнение команды. По завершении используйте (Ctrl) + (c) для выхода из хвоста. Если вы больше не заинтересованы в сборе данных, используйте fg, чтобы вывести программу position.pl на передний план и остановить ее или сломать ее (Ctrl) + (c).
Ниже.zip-файл содержит измененные программы и выходные данные, которые, мы надеемся, продемонстрируют, как небольшие изменения в синтаксисе могут привести к различной информации в фокусе, а также выборочный вывод из программ.
- arrivals.pl дает выход JSON для самолетов, которые только что коснулись (либо прибывающих, либо вылетающих LAX)
- test_landing.pl дает читаемый результат (например, AAL1155 приземлился на 21.03.2012 22:00:01)
- position.pl дает выход JSON для всех плоскостей в географическом прямоугольнике (34 ° N ± 1 °, 118 ° W ± 1 °)
- test_overhead.pl дает идентификацию полета, широту, долготу и высоту (N721PP 34.36011 -118.37837 18100)
Эти файлы были сделаны с небольшими изменениями в example1.pl, предоставленные FlightAware. Чтобы сделать свой собственный, который захватывает только данные, которые вас интересуют, используйте документацию API FlightAware Firehose для запроса соответствующей информации в формате JSON, а затем используйте правильный синтаксис внутри файла, чтобы выводить только необходимую информацию.
Пример программы и JSON OutputLanding & Overhead
Проект 3: Использование Pi Zero Wireless для управления матрицей 64 × 64 RGB
Часть | Стоимость | Заметки |
---|---|---|
(2) 2 × 32 × 32 RGB дисплейная матрица + блок питания | $ 75 ($ 150) | Требуется четыре общей матрицы 32 × 32 RGB для создания 64 × 64-пиксельного дисплея |
Adabruit RGB-матрица HAT + часы RTC | $ 25 | Листки |
20-контактный кабель IDC (Hub75) | $ 7- $ 13 | Требуемая длина зависит от конфигурации панелей и расстояния до Pi |
0, 1 "штыри (40-контактный, 2 × 20) | $ 1 | 2, 54 мм |
Шаг 1: Подготовка матрицы Adafruit Matrix
Припаяйте гнезда для мужчин и женщин к Adafruit HAT в соответствии с инструкциями на Adafruit.com. Затем припаяйте провод или прикрепите перемычку между выводами 4 и 18. Для этого проекта вам не нужно прикреплять ни штырь постоянного тока, ни винтовые клеммы.
Шаг 2: Подготовка малины Pi
Припаяйте гнезда 2 × 20 на место.
Шаг 3: Подготовка матрицы матрицы RGB
Ориентируйте RGB-матрицы, чтобы стрелки в нижнем ряду были направлены вниз, а стрелки в верхнем ряду были направлены вверх (см. Изображение здесь). Используйте 2 × 10 IDC кабель для подключения выхода Adafruit HAT к входу первой платы. Затем подключите выход первой платы к входу второй, выход второй к входу третьей и т. Д.

Задняя панель матрицы RGB. Сигнал перемещается с борта на борт в форме «С»
Если вам посчастливилось иметь лазерный резак или машину с ЧПУ, я включил чертежи для задней пластины, которые могут содержать все четыре пластины матрицы RGB. Монтажные отверстия заменяются слотами, чтобы обеспечить выравнивание от общей центральной точки.

Шаблон для установки четырех панелей 32 × 32 для создания большой панели 64 × 64; Возможны различные варианты панелей
64 × 64 матрицы
Полная документация и исходный код Хеннен Целлер.
Как только все электрические соединения были сделаны, включите Малиновую Пи. Примерно через минуту попытайтесь войти в Pi с Putty или SSH.
Входите, введите следующее, чтобы отключить звук на Pi (документация указывает на конфликт аппаратной подсистемы со звуком и аппаратное обеспечение RGB-матрицы).
кот << EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf
черный список snd_bcm2835
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 //github.com/hzeller/rpi-rgb-led-matrix
cd rpi-rgb-led-matrix
HARDWARE_DESC = adafruit-hat-pwm make -C examples-api-use
Примеры sudo-api-use / demo -L -D0
cd utils /
HARDWARE_DESC = adafruit-hat-pwm сделать
При желании, если у вас также есть камера, подключенная к вашему Pi, вы можете захватить изображение размером 64 × 64 пикселя и подать его на дисплей.
raspistill -w 64 -h 64 -o myimg.png
sudo./led-image-viewer -L -f myimg.png
Предыдущие две строки отображают изображение 64 × 64 на дисплей и используют программу-просмотрщик изображений (скомпилированный в предыдущем разделе) для отображения на большом дисплее (-L) навсегда (-f).
Что дальше?
Теперь у вас есть компьютер стоимостью 10 долларов США, который может отслеживать (с антенной и SDR-приемником или с помощью вызова API) вокруг вас и отображать любую информацию о тех, которые вы хотите, на 64-пиксельном 64-пиксельном дисплее или на малине Выход HDMI Pi Zero W.
То, что вы делаете с ним, ограничено только вашим воображением.
Поскольку в этой статье представлены только инструменты, первым шагом, который я рекомендую, является чтение документации для дисплея и FlightAware, а затем открытие примеров программ для лучшего понимания их возможностей.
И не забывайте, что ваш Raspberry Pi Zero - это работающая установка Linux, в которой используются часто используемые команды, такие как Cron, Grep и Awk. Все, что еще не на вашем Pi, - это просто короткая apt-get install.
Посмотрите видео ниже, чтобы увидеть кульминацию этих проектов!
Попробуйте этот проект сами! Получить спецификацию.