Отслеживать накладные полеты с помощью малины pi zero wireless, программного обеспечения, определенного радио, и летающих

Отслеживать накладные полеты с помощью малины pi zero wireless, программного обеспечения, определенного радио, и летающих
Отслеживать накладные полеты с помощью малины pi zero wireless, программного обеспечения, определенного радио, и летающих
Anonim

Отслеживайте накладные рейсы с помощью 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 МГц и лучшую антенну.

Image
Image
Снимок экрана ресивера 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.

Image
Image
Иллюстрация Джона Макнейла, 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 °). Я выбрал этот регион, потому что он приближается к моей области приема.

Image
Image
Область интереса колеблется от 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 к входу первой платы. Затем подключите выход первой платы к входу второй, выход второй к входу третьей и т. Д.

Image
Image
Задняя панель матрицы RGB. Сигнал перемещается с борта на борт в форме «С»

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

Image
Image
Шаблон для установки четырех панелей 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.

Посмотрите видео ниже, чтобы увидеть кульминацию этих проектов!

Попробуйте этот проект сами! Получить спецификацию.