ADS-B:从入门到实现

重要事情说三遍!!!

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

原文地址:https://ibcl.us/ADSB_Decode_20200118/

FlightAware网页看“飞机”,https://a.ibcl.us/

目录

设备

方案

开搞

准备环境

编译安装

配置调整

启动


听惯了中短波广播,甚至已经能准确说出当前的某个频率对应哪个电台在播音… 是的,博主终于对传统广播有了倦意,也正因如此,最后博主决定拿出闲置的 RTL-SDR,玩玩 ADS-B 接收。

在这篇文章中,博主将介绍如何用 RTL-SDR 接收 1090MHz,由航班下发的 ADS-B 信号,并将实时航班情况展示在地图上,公开至外网,给喜欢的她装个逼,然后坐等被喝茶(

现在,博主的 ADS-B 监测站点已经上线,欢迎来踩~https://a.ibcl.us/

博主的SDR服务器

设备

  • RTL-SDR 及其附赠天线
  • 装了 Linux 的主机(Linux 大法好

需要注意的是,RTL-SDR 有着不同的芯片方案,即 RTL2832U+ [ xx 芯片 ]。不同的芯片方案,覆盖的频率范围和灵敏度也不同,这是尤其要注意的。

再把之前在《Re:从零开始的 RTL-SDR 折腾记》一文中的那份表格贴上来…

芯片方案 频率范围 情况
RTL2832U+E4000 54-2200 MHz 已停产
RTL2832U+R820T 24-1766 MHz 最容易取得
RTL2832U+R820T2 24-1766 MHz 接收能力最强
RTL2832U+FC0013 22-1100 MHz 灵敏度最差
RTL2832U+FC0012 22-948 MHz 未知

博主所购买的还是 CNY 42(不含运费)的那一款 SDR,其芯片方案是 RTL2832U+R820T2。如果有特别需求,可以购买 CNY 120 左右的,带温度补偿晶振(TXCO)的那款 RTL-SDR,其芯片方案同样是 RTL2832U+R820T2。

RTL2832U+R820T2

此外,本文的 Linux 发行版选用 Debian Stretch。

方案

软件选用由 FlightAware 所维护的 dump1090,安装在博主的斐讯 N1 上,好在 N1 有两个 USB 口,CPU 也比较强劲,同时拖两个 SDR 完全够了。

这里,用于本站 WebSDR 页面的 RTL-SDR 编号为 0,用于 ADS-B 接收的 RTL-SDR 编号为 1。关于如何获取 RTL-SDR 设备编号的问题,这里给出一个比较简单的方法。

  1. 首先保证先前的 RTL-SDR 正在被使用;
  2. 插入新的 RTL-SDR;
  3. 在终端上执行命令 rtl_test,不出意外,得到以下回显,能够看到,rtl_test 探测到了两个 RTL-SDR,并提示因 0 号设备被占用而无法打开。现在可以得出 1 号设备即是新插入的 RTL-SDR;

    1
    2
    3
    4
    5
    6
    7
    8
    
    root@BelovedZY:~# rtl_test
    Found 2 device(s):
      0:  Realtek, RTL2838UHIDIR, SN: 00000001
      1:  Realtek, RTL2838UHIDIR, SN: 00000001
    
    Using device 0: Generic RTL2832U OEM
    usb_claim_interface error -6
    Failed to open rtlsdr device #0.
    
  4. 记下 1 这个数字为新插入的 RTL-SDR。

至于 ADS-B 使用的天线,由于条件所限,只能放在窗边(虽然博主知道这样很敷衍了啦

最后,dump1090 的页面使用 Frp 内网穿透到博主服务器上的 8082 端口,然后通过 Nginx 反向代理到服务器的 80 端口,接上 CloudFlare,供人访问。

开搞

以下的过程,均是在 root 用户下的操作,如果是子用户,博主建议先用 sudo -i 命令进入 root 模式后再进行下面的操作。

准备环境

dump1090 依赖于 RTL-SDR 的驱动和支持库工作,同时 RTL-SDR 通过 USB 与主机连接,所以要安装 rtl-sdr、librtlsdr-dev、libusb-1.0-0-dev 三个依赖项。

由于需要从 GitHub 拉取 dump1090 的源码编译并打包为 deb 文件,所以还需要安装 git、build-essential、pkg-config、debhelper、dh-systemd、libncurses5-dev、libbladerf-dev。

此外,由 FlightAware 所维护的 dump1090 是作为 Lighttpd 的一个模块而存在的,所以也必须安装 lighttpd 这个软件。

综合一下,在终端下执行如下命令,将上述软件一并安装。

root@BelovedZY:~# apt update
root@BelovedZY:~# apt install build-essential debhelper rtl-sdr libusb-1.0-0-dev librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev git lighttpd -y

编译安装

拉取 dump1090 的源码到本地,然后进入源码目录,编译打包。

root@BelovedZY:~# cd /home
root@BelovedZY:/home# git clone https://github.com/flightaware/dump1090
root@BelovedZY:/home# cd dump1090
root@BelovedZY:/home/dump1090# dpkg-buildpackage -b

稍等片刻,即可在上一层目录找到打包好的 deb 文件。

root@BelovedZY:/home/dump1090# cd ../
root@BelovedZY:/home# ls
dump1090                  dump1090-fa_3.8.0_arm64.buildinfo  
dump1090_3.8.0_all.deb    dump1090-fa_3.8.0_arm64.changes
dump1090-fa-dbgsym_3.8.0_arm64.deb    dump1090-fa_3.8.0_arm64.deb

文件名可能会因 CPU 架构而有所不同,但都大同小异,记下文件名,分别将其安装。

root@BelovedZY:/home# dpkg --install dump1090_3.8.0_all.deb
root@BelovedZY:/home# dpkg --install dump1090-fa_3.8.0_arm64.deb
root@BelovedZY:/home# dpkg --install dump1090-fa-dbgsym_3.8.0_arm64.deb

配置调整

修改 /etc/default/dump1090-fa,这是 dump1090 的配置文件。

root@BelovedZY:/home# vi /etc/default/dump1090-fa

首先配置 dump1090 开机启动,直接将配置文件中 ENABLED 字段赋值为 yes 即可。

由于要指定 dump1090 使用 1 号 RTL-SDR,所以需要修改 RECEIVER_OPTIONS 字段,加入 --device-index 1 --gain 50,告诉 dump1090 打开 1 号 SDR,增益为 50dB。增益根据实际情况而定,正负值均可。

最后是告诉 dump1090 博主所处的经纬度,考虑到安全,可以填一个大致的位置。博主所处纬度 31.170280,经度 108.404610,所以在 DECODER_OPTIONS 字段加入 --lat 31.170280 --lon 108.404610 这样一句话。

综合上述要求,这里给出一个配置文件示范。

# dump1090-fa configuration
# This is sourced by /usr/share/dump1090-fa/start-dump1090-fa as a
# shellscript fragment.

# If you are using a PiAware sdcard image, this config file is regenerated
# on boot based on the contents of piaware-config.txt; any changes made to this
# file will be lost.

# dump1090-fa won't automatically start unless ENABLED=yes
ENABLED=yes

RECEIVER_OPTIONS="--device-index 1 --gain 50 --ppm 0"
DECODER_OPTIONS="--lat 31.170280 --lon 108.404610 --max-range 360 --fix"
NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1300 --net-ro-interval 0.2 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005"
JSON_OPTIONS="--json-location-accuracy 1"

修改完后,保存并退出。

启动

前面已经提到,由 FlightAware 所维护的 dump1090 是作为 Lighttpd 的一个模块而存在的,所以启动的方式是使用 lighty-enable-mod 加载这个模块。

root@BelovedZY:/home# lighty-enable-mod dump1090-fa
root@BelovedZY:/home# service lighttpd force-reload

加载这个模块后,重启使其生效。

root@BelovedZY:/home# reboot

发布了28 篇原创文章 · 获赞 34 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/OpenSourceSDR/article/details/104771593