雷竞技注册
项目

用树莓派零无线,软件定义无线电和FlightAware跟踪头顶飞行

2017年4月03日通过马克·休斯

本文向您展示了两种使用树莓派零无线跟踪您所在地区的航班的方法。它还演示了如何控制64×64 RGB矩阵。

树莓派零无线是一款售价10美元的微型电脑,能做很多事情。本文向您展示了两种使用这个Pi来跟踪您所在地区的航班的方法。它还演示了如何控制64×64 RGB矩阵来显示航班号码!

在本文中,我将使用树莓派零无线做三个独立的项目。在项目1中,我将使用PiAware创建一个平面跟踪设备。在项目2中,我会从这些飞机上收集数据。在项目3中,我将向您展示如何使用RPi零W来控制64×64 RGB矩阵。

项目一:树莓派零无线飞机跟踪器

部分 成本 笔记
树莓派零无线 10美元
特别提款权接收机 21美元 许多其他USB特别提款权接收器可能会工作
4 gb microSD卡 6美元 更大的卡片也可以
USB-to-MicroUSB适配器 5美元
MicroUSB中心(可选) 8美元 Pi 0只有microUSB端口;要附加附件,您需要一个集线器/转换器
宽带天线(可选) 50美元 天线必须覆盖1090mhz
1090mhz带通滤波器(可选) 20美元

资源

该实验是使用覆盆子PI Zero无线完成的。但是,以下代码应在任何覆盆子PI版本2或更高版本上工作。如果您在没有无线的情况下购买PI Zero,则可以使用无线USB网络加密狗添加它。

步骤1:准备SD卡

下载最新的树莓杰西到你的电脑。

将图像写入您的SD卡(这里是指南Linux,苹果系统,窗户)。

步骤2:修改SD卡

在SD卡根目录下创建一个名为“ssh”的文件。没有文件扩展名,没有文件内容。这个文件启用SSH,这将允许您远程访问Pi。

创建一个名为“wpa_supplicant.conf”的文件,包含以下内容。将YourWifiName和YourWifiPassword的值更改为连接Wi-Fi网络时使用的名称和密码。

网络= {
名称= " YourWifiName "
相移键控= " YourWifiPassword "
key_mgmt = WPA-PSK
}

步骤3:安装和引导

从你的电脑取出SD卡,并将其安装在树莓派零无线。将树莓派连接到电源使用最接近板末端的MicroUSB端口。等待大约一分钟,让树莓派启动并连接到Wi-Fi。有了这些配置文件,就不需要在您的设备上使用键盘、鼠标或显示器。

第四步:找到圆周率

识别pi的IP地址——这可以通过登录到路由器并查看附加的设备来完成,或者通过IP扫描仪看@ Lan.(Windows)或nmap(Linux和Mac)。如果您的设备在两到三分钟内没有出现,请断开电源,从Pi上取下SD卡,并将其重新插入计算机,并仔细检查sshwpa_supplicant.conf文件。

步骤5:连接到圆周率

Windows:使用工具,例如腻子连接到你的pi。下载并运行程序,键入PI的IP地址,然后单击“连接”。将出现一个窗口,询问您关于安全证书 - 单击“是”。

Linux和Mac:打开终端,输入“ssh pi@raspberrypi.local”或“ssh pi@ipaddress”(例如“ssh pi@192.168.0.52”)。

在提示符中,默认用户名为“pi”,默认密码为“raspberry”。

步骤6:配置您的Pi

输入“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更新
Sudo apt-get dist-upgrade -y
安装piaware fail2ban libio-socket-ssl
Sudo piaware-config allow-auto-updates yes
Sudo piaware-config允许手动更新是的
安装dump1090-fa -y
sudo重启

当树莓派完成启动过程后,在你的电脑上打开一个浏览器并导航到http://raspberrypi.local:8080(或取代raspberrypi。本地与您的设备的IP地址)。当飞机开始出现,然后从屏幕上消失时,缩小,然后放大你的位置。

为了增加飞机的数量,把你的Pi, SDR和天线系统放在外面。通过增加1090mhz带通滤波器和更好的天线,进一步的改进被发现。

P的截图iAware17年3月14日(圆周率日!),加利福尼亚洛杉矶东部的一个接收器。顶部的直线轨迹显示飞机准备在洛杉矶国际机场降落。同样可见的还有一架盘旋的政府飞机。

最后,创建一个FlightAware.com账户,然后把你的接收机使用flightaware.com帐户。

ADS-B, PiAware和dump1090

附加在飞机上的应答器允许它们广播一个四位数的八进制标识符(模式a又名“Squawk”)标识符加上高度(模式c),一个24位的ICAO唯一编号(模式S),以及24位的ICAO编号和附加信息(模式S扩展squawitter)。最后一种模式也称为ADS-B。

自动依赖监视广播(ADS-B)占用飞机的位置(由GPS,Glonass等确定),将其与识别信息相结合,并在1090 MHz上广播它。与仅作为雷达信号询问的回复发送的另外的应答器代码不同,ADS-B每秒大约两次发送。

PIAWare和Dump1090使用调整到1090 MHz的软件定义的无线电(SDR)接收和解码附近所有飞机的广播,并将其发送到Flightaware的服务器。信息显示在端口8080上托管在Raspberry PI上的网页上。

插图:约翰·麦克尼尔www.aopa.org

所有飞机必须在2020年1月1日之前配备ADS-B Out应答器。但是,在此之前,FlightAware使用多重化来确定不广播纬度和经度的飞机的位置。多重化使用至少三个接收器的已知位置和接收消息的次数来计算一个平面的位置。

项目二:利用Pi 0无线从FlightAware.com收集飞机数据

FlightAware.com有两个应用程序接口(API),允许挖掘和利用数据:FlightXML和Firehose。根据您需要的信息类型和每个月需要的查询数量,在这两者之间进行选择。对于这个项目,All About C雷竞技注册ircuits被允许免费访问一个月。要跟随,你需要联系flightaware.com.获取API键。

资源:

步骤1:测试连接性

通过SSH连接到您的Pi Zero,并测试到Firehose API的连接。

Openssl s_client -host firehose.flightaware.com -port 1501 -tls1

如果您看到页面或两项认证详细信息,一切都正常工作。

步骤2:获取样本文件和数据

flightaware在github中托管示例文件。首先使用您的用户名和API键下载和编辑示例文件。

git克隆http://github.com/flightaware/firehose_examples.git
cd firehose_examples / perl /例二
sudo nano example1.pl

改变用户名apikey,然后退出([Ctrl]+[x])并保存。

perl example1.pl

您应该看到数据JavaScript对象表示法(JSON)格式:

$ VAR1 = {
“aircrafttype”= >“B738’,
'标题' = > ' 105 ',
' pitr ' = > ' 1490038420 ',
“gs”= >“334”,
“时钟”= >“1490038413”,

'exid'=>'a44591',
“识别”= >“DAL751”
“alt”= >“25100”,
“朗”= >“-117.38051”,
“纬度”= >“33.53288”
};

步骤3:配置您的Pi收集数据

Firehose的名字很贴切,因为它可以在很短的时间内(~1 GB/天)产生大量的数据——填满您的磁盘,并增加您的帐户费用。因此,当您创建一个脚本来收集信息时,您应该定期检查它,因为您可以非常迅速地填满磁盘并清空您的费用帐户。

根据MicroSD卡的大小和您希望收集的内容,您可能需要添加额外的存储空间,或者回到rasi -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 ::套接字:: SSL;5使用JSON :: PP;6使用IO :: Unclext ::膨胀qw($ formateerror);7使用Data :: Dumper;8 9我的$ username ='AllaBoutcircuits';10我的$ apikey ='Allaboutcircuitsreallylongapikey';11我的$压缩= 0;12 13#打开TLS插座连接以FLIGHTAWARE。14我的$ sock = io :: socket :: ssl-> new('firehose.flightaware.com:1501')或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]退出尾巴。如果您不再对收集数据感兴趣,就使用它成品把节目带来position.pl到前景并停止它或用[Ctrl] + [C]打破它。

下面的.zip文件包含经过修改的程序和输出,它们有望演示语法上的细微变化如何带来不同的信息,以及程序的示例输出。

  • arrive .pl给出了刚刚着陆的飞机的JSON输出(到达或离开LAX)
  • test_landing.pl给出了可读的输出(例如,AAL1155 landing at 03/21/2017 22:00:01)
  • position.pl给出了地理矩形中所有平面的JSON输出(34°N±1°,118°W±1°)
  • test_overhead.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矩阵HAT + RTC时钟 25美元 raybet开户
20脚IDC电缆(Hub75) 7 - 13美元 所需的长度取决于面板的配置和到圆周率的距离
0.1"公头(40针,2×20) 1美元 2.54毫米

步骤1:Adafruit基质HAT制备

焊接的男性和女性头部上的Adafruit HAT根据指示在Adafruit.com。然后焊接电线或在销4和18之间附加跳线。对于该项目,您无需连接DC桶形插孔或螺钉端子连接器。

步骤2:树莓派准备

将2×20外螺纹接头焊接到位。

第3步:RGB矩阵准备

调整RGB矩阵的方向,使底部一行的箭头指向下,而顶部一行的箭头指向上(看到图片)。使用2×10 IDC电缆将AdaFruit帽的输出连接到第一板的输入。然后将第一板的输出连接到第二个输入,第二个输出到第三等的输入。

RGB矩阵面板的背面。信号以“C”形从一块板子传到另一块板子。

如果你足够幸运有一个激光切割机或数控机器在您的处置,我已经包括了一个背板的图纸,可以容纳所有四个RGB矩阵板使用。将安装孔替换为插槽,以便从一个共同中心点对准。

模板为安装四个32×32面板,制作一个较大的64×64面板;可以安排不同的面板。

Hughes_4x4RGBMatrix.zip

完整的文档和源代码泽勒Hennen。

一旦所有的电路连接都完成,接通树莓派电源。大约一分钟后,尝试使用Putty或SSH登录到Pi。

一旦进入,键入以下内容以禁用PI上的声音(文档指示硬件子系统与声音和RGB矩阵硬件冲突)。

/etc/modprobe.d/blacklist-rgb-matrix.conf .conf .conf .conf .conf .conf .conf
黑名单snd_bcm2835
EOF
sudo update-initramfs - u

然后使用apt-get安装Python和映像文件。

libgraphicsmagick++-dev libgraphicsmagick++-dev libbio -socket-ssl-perl

获取运行RGB矩阵所需的文件并编译它们。

git克隆https://github.com/hzeller/rpi-rgb-led-matrix
cd rpi-rgb-led-matrix
HARDWARE_DESC=adafruit-hat-pwm
sudo examples-api-use/demo -L
cd跑龙套/
HARDWARE_DESC = adafruit-hat-pwm使

另外,如果你也有一个连接到Pi的摄像头,你可以捕获一个64×64像素图像并将其发送到显示器上。

raspstill -w 64 -h 64 -o myimg.png
sudo ./led-image-viewer -L -f

前面两行将64×64图像捕获到显示器上,并使用程序led-image-viewer(在前一节中编译)将其永久显示在Large显示器(-L)上(-f)。

下一个什么?

现在你有了一台10美元的电脑,它可以跟踪你周围的飞机(通过天线和特别提款权接收器或API呼叫),并在你的64像素× 64像素显示屏上或树莓派零W的HDMI输出上显示你想要的飞机的任何信息。

你用它做什么只受你的想象力的限制。

因为本文只介绍了这些工具,所以我建议的第一步是阅读有关display和FlightAware的文档,然后打开这两个工具的示例程序,以便更好地理解它们的功能。

不要忘记,您的Raspberry Pi Zero是一个功能正常的Linux安装,包含了一些常用的命令,例如cr,Grep.,哎呀。Pi上没有的东西都是短的apt-get安装离开。

查看下面的视频以查看这些项目的高潮!

自己试试这个项目吧!得到bom。

4评论
  • 马克·休斯 2017年4月03日

    读者们,FlightAware.com的官员告诉我,flightaware3.5今天出来了,它有Pi Zero无线支持,这使得设置接收器更容易。看到https://discussions.flightaware.com/post196589.html.为更多的细节。

    喜欢的。 回复
  • 布莱恩威尔逊 2017年4月16日

    如果您(像我一样)是这里的新手,并且认为本文缺少了50%的内容,那么您可以单击price以获得关于作者正在使用的组件的更多信息。

    喜欢的。 回复
    • 布莱恩威尔逊 2017年4月16日
      当我查看特别提款权,我看到一个清单从FlightAware有内置的带通滤波器。为了更灵活,我想使用单独的组件,但如果你的唯一应用程序是侦听应答器,那么它将为你节省20美元。或者你可以选择买两个特别提款权…
      喜欢的。 回复