跟踪覆盖率的航班,用覆盆子pi Zero无线,一个软件定义的无线电,以及Flightaware
2017年4月3日,经过马克休斯本文显示了两种方法,可以使用Raspberry PI Zero无线进行追踪您所在地区的航班。它还展示了它如何控制64×64 RGB矩阵。
覆盆子PI Zero Wireless是10美元的微型计算机,其有很多东西。本文显示了两种方法可以使用此PI跟踪您所在地区的航班。它还展示了它如何控制64×64 RGB矩阵以显示飞行号码!
在本文中,我将使用Raspberry Pi Zero Wireless进行三个独立的项目。在项目1中,我将使用PiAware创建一个平面跟踪设备。在项目2中,我将从上述飞机上收集数据。在项目3中,我将向你展示如何使用RPi零W来控制64×64 RGB矩阵。
项目1:覆盆子PI零无线平面跟踪器
部分 | 成本 | 笔记 |
---|---|---|
覆盆子PI ZERO无线 | 10美元 | |
SDR接收器 | 21美元 | 许多其他USB SDR接收器可能会有效 |
4 gb microSD卡 | 6美元 | 较大的牌将工作 |
USB-to-Microusb适配器 | 5美元 | |
MicroUSB中心(可选) | 8美元 | PI零只有MicrousB端口;要附加配件,您需要一个集线器/转换器 |
宽带天线(可选) | 50美元 | 天线必须覆盖1090 MHz |
1090 MHz带通滤波器(可选) | 20美元 |
资源
本实验是使用树莓派零无线进行的。然而,下面的代码应该适用于任何Raspberry Pi版本2或更高版本。如果你购买了一台没有无线功能的Pi Zero,你可以用一个无线USB网络适配器来添加它。
步骤1:准备SD卡
下载最新的raspbian jessie到你的电脑。
将图像写入您的SD卡(这里是指导员Linux.那Mac OS, 和视窗)。
第2步:修改SD卡
在SD卡的根目录下创建一个名为ssh的文件。没有文件扩展名,没有文件内容。该文件启用SSH,这将允许您远程访问Pi。
使用以下内容创建名为“wpa_supplicant.conf”的文件。将yourwiname和yourwipassword的值更改为要连接到Wi-Fi网络的名称和密码。
SSID =“yourwifiname”
psk =“yourwifipassword”
key_mgmt = wpa-psk
}
第3步:安装和启动
从你的电脑中取出SD卡并安装到Raspberry Pi Zero Wireless中。将树莓派连接到电源使用的MicroUSB端口最接近板的结束。等待大约一分钟,树莓派启动并连接Wi-Fi。有了这些配置文件,就不需要使用键盘、鼠标或设备显示。
第4步:找到你的pi
识别你的pi的IP地址——这可以通过登录到你的路由器并查看附加设备来完成,或者通过IP扫描仪,例如Look@Lan(Windows)或nmap.(Linux和Mac)。如果您的设备未在两到三分钟内出现,请断开电源,请从PI中删除SD卡,然后将其重新插入计算机中并仔细检查s和wpa_supplicant.conf.文件。
第5步:连接到您的PI
Windows:使用诸如油灰连接到Pi。下载并运行程序,输入Pi的IP地址,点击“连接”。将出现一个询问安全证书的窗口-单击“是”。
Linux和Mac:打开终端并键入“ssh pi@raspberypi.local”或“ssh pi @ ipaddress”(例如,“ssh pi@192.168.0.52”)。
在提示符下,默认用户名为“PI”,默认密码为“raspberry”。
第6步:配置您的PI
键入“sudo raspi-config”并按Enter键。
修改密码、时区和本地化。
出现密码提示时,当前密码是“raspberry”;您应该将其更改为更安全的内容,以使其至少略微难以破解您的设备。在侧面笔记,而不是密码,你应该使用证书进行身份验证,但这在本文中不会讨论。
然后输入以下命令并允许它们运行:
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允许 - 自动更新是
sudo piaware-config allow-manual-更新是
sudo apt-get安装dump1090-fa -y
sudo重新启动
RAPSBerry PI已完成启动过程后,在计算机上打开Web浏览器并导航到http://raspberrypi.local:8080(或用设备的IP地址替换RASPBeryPI.local)。随着飞行开始显示,然后从屏幕上消失,缩小并放大到您的位置。
为了增加飞机的数量,请携带PI,SDR和天线系统。通过添加1090MHz带通滤波器和更好的天线来发现进一步的改进。
P.的屏幕截图iaware.展示洛杉矶以东的地区,加利福尼亚州(Pi Day!)展示了洛杉矶以东的区域。顶部的线性轨道在顶部显示飞机准备降落在leax。也可见是一架政府飞机在圈子中飞行。
最后,创建flightaware.com.帐户然后将您的接收者联系起来用你的FlightAware.com账户。
ADS-B, PiAware和dump1090
安装在飞机上的应答器允许飞机广播四位八位标识符(模式- a又名“Squawk”)加上高度(模式- c)、24位唯一的ICAO号码(模式-S)和24位附加信息的ICAO号码(模式-S扩展Squitter)。最后一种模式也被称为ADS-B。
自动依赖监视广播(ADS-B)获取飞机的位置(由GPS、GLONASS等确定),将其与识别信息结合,并以1090mhz的频率广播。与其他应答器代码不同的是,ADS-B代码仅作为对雷达信号询问的回应而发送,它大约每秒发送两次。
PiAware和dump1090使用调到1090mhz的软件定义无线电(SDR)来接收和解码附近所有飞机的广播,并将它们发送到FlightAware的服务器。该信息显示在树莓派8080端口的web页面上。
John Macneil,www.aopa.org.。
所有飞机必须在2020年1月1日之前配备ADS-B Out Transponders。但是,直到那时,Flightaware使用多重来确定不广播其纬度和经度的飞机的位置。多边使用至少三个接收器的已知位置和消息的接收时间来计算平面的位置。
项目2:使用PI Zero无线从Flightaware.com收集平面数据
flightaware.com有两个应用程序接口(API),允许开采和使用数据:flightxml和firehose。根据您需要的信息类型以及您每个月需要多少查询。对于这个项目,所有关于电路都被授予免费访问一个月。要跟随,你需要联系FlightAware.com用于API密钥。
资源:
第1步:测试连接
通过SSH连接到PI Zero,并测试连接到Firehose API。
如果您看到一到两页的认证详细信息,那么一切都正常工作。
步骤2:获取示例文件和数据
FlightAware在GitHub上保存了示例文件。首先使用您的用户名和API密钥下载并编辑示例文件。
CD firehose_examples / perl / examply1
sudo nano example1.pl.
改变用户名和apikey.符合您信息的字段,然后退出([Ctrl] + [x])并保存。
你应该看到数据JavaScript对象表示法(JSON)格式:
$ var1 = {
'飞行物'=>'b738',
'标题'=>'105',
'pitr'=>'1490038420',
'gs'=>'334',
'时钟'=>'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。
sudo nano positial.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个平面(此行可以在最终脚本中注释出来)。
接下来的两个命令执行程序,并允许您监视程序的进度:
tail -f position.txt.txt.txt.txt.txt.
第一行具有超级用户使用该程序perl运行该计划position.pl并将输出追加到文件中(>>)position.txt.&符号导致程序在后台运行。
第二行使用该程序尾巴遵循(-f)对文件的更改position.txt.,它允许您监视完成命令。完成后,使用[Ctrl] + [C]退出尾巴。如果您不再有兴趣收集数据,请使用FG.带来计划position.pl点击[Ctrl]+[c]停止或破坏它。
下面的.zip文件包含了解的程序和输出,希望展示语法中的略微变化可以将不同的信息带入焦点,以及程序的示例输出。
- pl给出了刚刚降落的飞机(到达或离开洛杉矶)的JSON输出
- test_landing.pl给出可读输出(例如,AAL1155降落在03/21/2017 22:00:01)
- Position.pl为地理矩形中的所有平面提供JSON输出(34°N±1°,118°W±1°)
- pl给出飞行识别、纬度、经度和高度(N721PP 34.36011 -118.37837 18100)
这些文件只是对FlightAware提供的example1.pl做了一些小小的修改。如果你想自己制作只捕捉你感兴趣的数据,请使用Flightaware Firehose API文档要以JSON格式申请适当的信息,然后在文件中使用正确的语法仅输出所需的信息。
项目3:使用无线Pi Zero来控制64×64 RGB矩阵
部分 | 成本 | 笔记 |
---|---|---|
(2) 2× 32×32 RGB显示矩阵+电源 | $ 75(150美元) | 总共需要四个32×32 RGB矩阵来创建64×64像素显示 |
Adafruit RGB Matrix帽+ RTC时钟 | 25美元 | beplay无法取钱 |
20针IDC电缆(HUB75) | $ 7- 13美元 | 所需的长度取决于面板的配置和与pi的距离 |
0.1英寸公头(40针,2×20) | 1美元 | 2.54毫米 |
第1步:Adafruit矩阵帽制剂
根据指示焊接在Adafruit帽子上的男性和女性标题adafruit.com.。然后焊接导线或连接插脚4和18之间的跳线。对于这个项目,你不需要附加任何直流桶插座或螺丝端子连接器。
第2步:覆盆子PI准备
焊接2×20男头到位。
步骤3:RGB矩阵准备
定向RGB矩阵,以便指向底行上的箭头,并指向顶行上的箭头(在这里看到图像)。将Adafruit HAT的输出连接到第一块单板的输入端,需要使用2×10 IDC线缆。然后连接第一块板的输出到第二块板的输入,第二块板的输出到第三块板的输入,以此类推。
RGB矩阵面板的背面。信号以“C”形从一个板传到另一个板。
如果您的幸运能够进行激光切割机或CNC机器,我已经包括一个背板的图纸,可以容纳使用所有四个RGB矩阵板。安装孔被槽替换,以允许与公共中心点对齐。
模板用于安装四个32×32面板,制作一个较大的64×64面板;各种小组安排是可能的。
完整的文档和源代码由Hennen Beller。
一旦制造了所有电气连接,就能对覆盆子PI进行电。大约一分钟后,尝试用腻子或ssh登录pi。
一旦进入,输入以下命令来禁用Pi上的声音(文档表明硬件子系统与声音和RGB矩阵硬件冲突)。
黑名单snd_bcm2835
EOF.
sudo update-initramfs -u
然后使用apt-get安装Python和图像文件。
获取必要的文件以运行RGB矩阵并编译它们。
CD RPI-RGB-LED矩阵
硬件_desc = adafruit-hat-pwm make -c example-api使用
sudo示例-api-use / demo -l -d0
cd跑龙套/
硬件_desc = adafruit-hat-pwm制作
(可选)如果您还有连接到PI的相机,则可以捕获64×64像素图像并将其送到显示器。
sudo ./led-image-viewer -l -f myimg.png
前两行将64×64图像捕获到显示器上,并使用程序led-image-viewer(在前一节中编译)将其永久显示在大显示器(-L) (-f)上。
下一个什么?
您现在拥有10美元的计算机,可以在您身边跟踪(使用天线和SDR接收器或API呼叫)飞机,并在64像素显示器上或在覆盆子上显示有关您想要的任何信息。PI Zero W的HDMI输出。
你对它的用途仅限于您的想象力。
由于本文仅介绍了这些工具,我建议的第一步是读取显示和Fliewaware的文档,然后打开两个以更好地了解其功能的示例程序。
并不要忘记您的Raspberry Pi零是功能恒定的Linux安装,其具有通常使用的命令,例如Cron那Grep, 和Awk。任何尚未在您的pi上的东西都是短暂的apt-get安装走了。
看看下面的视频,看看这些项目的高潮!
为自己提供这个项目!BOM。
读者 - 我被Plightaware.com的警察通知,今天出现了PI零无线支持,这使得建立一个更容易的接收器。看https://discussions.flightaware.com/post196589.html更多细节。
如果您(如我)是新的,请愿意缺少50%的文章,您点击价格以获取作者正在使用的组件的更多信息。