使用 Raspberry Pi 零无线、软件定义无线电和 FlightAware 跟踪高空飞行
本文向您展示了使用 Raspberry Pi Zero Wireless 跟踪您所在地区的航班的两种方法。它还演示了如何控制 64×64 RGB 矩阵。
Raspberry Pi Zero Wireless 是一款价值 10 美元的微型计算机,能够处理很多事情。本文向您展示了使用此 Pi 跟踪您所在地区的航班的两种方法。它还演示了如何控制64×64 RGB矩阵来显示航班号!
在本文中,我将使用 Raspberry Pi Zero Wireless 执行三个独立的项目。在项目 1 中,我将使用 PiAware 创建一个平面跟踪设备。在项目 2 中,我将从上述飞机上收集数据。在 Project 3 中,我将向您展示如何使用 RPi Zero W 来控制 64×64 RGB 矩阵。
项目 1:Raspberry Pi 零无线平面跟踪器
Part | 成本 | 注意事项 |
---|---|---|
Raspberry Pi 零无线 | $10 | |
SDR 接收方 | $21 | 许多其他 USB SDR 接收器可能会工作 |
4GB microSD 卡 | $6 | 更大的卡片可以使用 |
USB 转 MicroUSB 适配器 | $5 | |
MicroUSB 集线器(可选) | $8 | Pi Zero 只有 microUSB 端口;要连接配件,您需要一个集线器/转换器 |
宽带天线(可选) | $50 | 天线必须覆盖 1090 MHz |
1090 MHz 带通滤波器(可选) | $20 |
资源
- Raspbian Jessie(安装指南)
- PiAware 安装
该实验是使用 Raspberry Pi Zero Wireless 完成的。但是,以下代码应该适用于任何 Raspberry Pi 版本 2 或更高版本。如果您购买了没有无线网络的 Pi Zero,您可以添加一个无线 USB 网络加密狗。
第一步:准备SD卡
将最新的 Raspbian Jessie 下载到您的计算机。
将映像写入您的 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 Zero Wireless 中。使用最靠近电路板末端的 MicroUSB 端口将 Raspberry Pi 连接到电源。等待大约一分钟,让 Raspberry Pi 启动并连接到 Wi-Fi。使用这些配置文件,您的设备无需使用键盘、鼠标或显示器。
第 4 步:找到你的树莓派
识别你的树莓派的 IP 地址——这可以通过登录你的路由器并查看连接的设备来完成,或者通过 IP 扫描仪,如 Look@Lan (Windows) 或 nmap(Linux 和 Mac)。如果您的设备在两三分钟内没有出现,请断开电源,从 Pi 中取出 SD 卡,然后将其重新插入计算机并仔细检查 ssh 和 wpa_supplicant.conf 文件。
第 5 步:连接到你的树莓派
Windows:使用 Putty 等工具连接到您的 Pi。下载并运行程序,输入你的树莓派的 IP 地址,然后点击“连接”。将出现一个窗口,询问您有关安全证书的信息 - 单击“是”。
Linux 和 Mac:打开终端并输入“ssh [email protected]”或“ssh pi@ipaddress”(例如,“ssh [email protected]”)。
在提示符下,默认用户名是“pi”,默认密码是“raspberry”。
第 6 步:配置你的树莓派
输入“sudo raspi-config”并回车。
更改您的密码、时区和本地化。
出现密码提示时,当前密码为“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 update
sudo apt-get dist-upgrade -y
sudo apt-get install -y piaware fail2ban libio-socket-ssl-perl
sudo piaware-配置允许自动更新是
sudo piaware-config 允许手动更新是
sudo apt-get install dump1090-fa -y
sudo reboot
在 Rapsberry Pi 完成启动过程后,在您的计算机上打开网络浏览器并导航到 http://raspberrypi.local:8080(或将 raspberrypi.local 替换为您设备的 IP 地址)。当飞机开始出现然后从屏幕上消失时,缩小然后放大您的位置。
要增加飞机的数量,请将您的 Pi、SDR 和天线系统带到外面。通过添加 1090 MHz 带通滤波器和更好的天线,发现了进一步的改进。
P 截图 iAware 接收器显示 17 年 3 月 14 日(圆周率日!)加利福尼亚州洛杉矶以东的区域。顶部的线性轨道显示飞机准备在 LAX 降落。还可以看到一架政府飞机在盘旋。
最后,创建一个 FlightAware.com 帐户,然后将您的接收器与您的 FlightAware.com 帐户相关联。
ADS-B、PiAware 和 dump1090
贴在飞机上的转发器允许它们广播四位八进制标识符(模式-A 又名“Squawk”)标识符加高度(模式-C)、24 位唯一的国际民航组织编号(模式-S)和 24 位带有附加信息的 ICAO 编号(S 模式扩展 Squitter)。最后一种模式也称为 ADS-B。
自动相关监视广播 (ADS-B) 获取飞机的位置(由 GPS、GLONASS 等确定),将其与识别信息相结合,并以 1090 MHz 的频率进行广播。与仅作为对雷达信号询问的答复传输的其他应答器代码不同,ADS-B 大约每秒传输两次。
PiAware 和 dump1090 使用调谐到 1090 MHz 的软件定义无线电 (SDR) 来接收和解码附近所有飞机的广播,并将它们发送到 FlightAware 的服务器。该信息显示在托管在 Raspberry Pi 8080 端口的网页上。
John Macneil 的插图,www.aopa.org。
到 2020 年 1 月 1 日,所有飞机都必须配备 ADS-B Out 转发器。但是,在此之前,FlightAware 使用多点定位来确定不广播其纬度和经度的飞机的位置。多边定位使用至少三个接收器的已知位置和接收消息的次数来计算飞机的位置。
项目 2:使用 Pi Zero Wireless 从 FlightAware.com 收集飞机数据
FlightAware.com 有两个允许挖掘和利用数据的应用程序接口 (API):FlightXML 和 Firehose。根据您需要的信息类型以及您每月需要多少查询,在两者之间进行选择。对于这个项目,All About Circuits 获得了一个月的免费访问权。要继续,您需要联系 FlightAware.com 以获取 API 密钥。
资源:
- Flight Aware Firehose 文档
第 1 步:测试连接
通过 SSH 连接到您的 Pi Zero 并测试与 Firehose API 的连接。
openssl s_client -host firehose.flightaware.com -port 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]) 并保存。
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)。
对于我的示例,我将收集 2° × 2° 地理区域的数据,其中包括 LGB、LAX、ONT、SNA 等(34° N ± 1°、118° W ± 1°)。我选择这个地区是因为它接近我的接待区域。
感兴趣的区域范围从 33° N 到 35° N 和 117° W 到 119° W。
以下代码是 example1.pl,对第 18 行和第 45 行进行了更改。下面显示了所有行,以便读者无需下载文件即可继续阅读。创建 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 使用 Data::Dumper; 8 9 我的 $username ='allaboutcircuits'; 10 my $apikey ='allaboutcircuitsreallylongapikey'; 11 我的 $compression =0; 12 13 # 打开与 FlightAware 的 TLS 套接字连接。 14 my $sock =IO::Socket::SSL->new('firehose.flightaware.com:1501') 否则死 $!; 15 # 打印“已连接!\n”; 16 17 # 向未压缩的socket发送启动命令。 18 my $initcmd ="live version 8.0 user $username password $apikey events \"position\" latlong \"33 -117 35 -119\""; 19 如果($压缩){ 20 $initcmd .="压缩压缩"; 21 } 22 binmode $sock; 23 打印 $sock "$initcmd\n"; 24 25 # 如果需要,激活压缩。 26 我的 $zsock; 27 如果($压缩){ 28 $zsock =新的 IO::Uncompress::Inflate $sock 29 or die "IO::Uncompress::Inflate failed:$InflateError\n"; 30 } 其他 { 31 $zsock =$sock; 32 } 33 34 # 主循环,从服务器读取 JSON 行。 35 我的 $i =1; 36 while (my $line =$zsock->getline()) { 37 #print "行 $i\n"; 38 #print "LINE $i:", $line, "\n"; 39 40 我的 $data =eval { decode_json $line }; 41 die“无法解码 JSON:$line”如果 !defined($data) || $@; 42 43 打印 $data->{ident}." \t".$data->{lat}." \t " 。 $data->{lon} 。 “\t”。 $data->{alt}." \n"; 44 45 最后如果 ($i++>=10); 46 } 47 关闭 $sock; 48 49 # 打印“全部完成。\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 &符号使程序在后台运行。
第二行使用程序tail 跟踪 (-f) 对文件 position.txt 的更改 ,它允许您监视命令的完成情况。完成后,使用 [Ctrl]+[c] 退出 tail .如果您不再对收集数据感兴趣,请使用 fg 带上程序 position.pl 到前景并停止或使用 [Ctrl]+[c] 中断它。
下面的 .zip 文件包含修改后的程序和输出,希望能展示语法的微小变化如何使不同的信息成为焦点,以及程序的示例输出。
- arrivals.pl 为刚刚着陆(到达或离开洛杉矶国际机场)的飞机提供 JSON 输出
- test_landing.pl 提供可读的输出(例如,AAL1155 于 03/21/2017 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 矩阵
Part | 成本 | 注意事项 |
---|---|---|
(2) 2×32×32 RGB显示矩阵+电源 | 75 美元(150 美元) | 需要四个总共 32×32 RGB 矩阵来创建 64×64 像素显示 |
Adafruit RGB 矩阵 HAT + RTC 时钟 | $25 | 数据表 |
20 针 IDC 电缆 (Hub75) | $7-$13 | 所需的长度取决于面板的配置和到 Pi 的距离 |
0.1" 公接头(40 针,2×20) | $1 | 2.54 毫米 |
步骤 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 矩阵板的背板图纸。安装孔被槽代替,以允许从公共中心点对齐。
用于安装四个 32×32 面板以制作大型 64×64 面板的模板;各种面板布置是可能的。
Hughes_4x4RGBMatrix.zip
Hennen Zeller 的完整文档和源代码。
完成所有电气连接后,打开 Raspberry Pi 的电源。大约一分钟后,尝试使用 Putty 或 SSH 登录 Pi。
进入后,键入以下内容以禁用 Pi 上的声音(文档表明硬件子系统与声音和 RGB 矩阵硬件冲突)。
猫 <
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
前两行将一个 64×64 的图像捕获到显示器上,并使用程序 led-image-viewer(在上一节中编译)将其显示在大显示器(-L)上(-f)。
下一步是什么?
您现在拥有一台 10 美元的计算机,可以跟踪(通过天线和 SDR 接收器或通过 API 调用)您周围的飞机,并在 64 像素乘 64 像素显示器或 Raspberry 上显示您想要的飞机的任何信息Pi Zero W的HDMI输出。
你用它做什么只受你的想象力的限制。
由于本文只介绍工具,所以我推荐的第一步是阅读显示和FlightAware的文档,然后打开两者的示例程序以更好地了解它们的功能。
并且不要忘记,您的 Raspberry Pi Zero 是一个运行正常的 Linux 安装,带有诸如 Cron 之类的常用命令 , Grep , 和 awk .任何尚未在您的 Pi 上的东西都只是一个简短的 apt-get install
查看下面的视频,了解这些项目的高潮!
亲自尝试一下这个项目!获取 BOM。
工业设备
- Pixus:坚固耐用的软件定义无线电解决方案
- 使用 1 线 DS18B20 传感器和 Raspberry Pi 测量温度
- 使用 Raspberry Pi 和 Nagios 监测室温
- 使用 Moteino 和 Raspberry Pi 监测室温
- 带有 Sensorflare 和 RaspberryPi 的 433MHz 智能家居控制器
- 使用 Raspberry Pi 和 Zabbix Supervisor 读取模拟传感器
- 使用 Raspberry Pi、DHT11 传感器和 Thingspeak 构建您的第一个物联网。
- 带有 Raspberry Pi 和湿度传感器的 Aeroponics
- RAK831 LoRa 网关和 RPi3 入门
- 使用 Raspberry Pi 和 Python 构建机器人
- 使用 Arduino 和 Raspberry Pi 构建您的 Internet 控制的视频流机器人
- 使用维护软件降低维护成本和增加收入的 8 种方法