0%

Raspberry Pi独立配置ADS-B dump1090模块

先来看一段相关Github仓库README.md文档给出的简介:Dump 1090 is a Mode S decoder specifically designed for RTLSDR devices. The main features are: Robust decoding of weak messages, with mode1090 many users observed improved range compared to other popular decoders. Network support: TCP30003 stream (MSG5...), Raw packets, HTTP. Embedded HTTP server that displays the currently detected aircrafts on Google Map...

简介

使用Raspberry Pi接收ADS-B信号离不开dump1090模块,执行以下脚本即可,当然也可自己输入指令分步执行。

1
2
3
wget http://www.satsignal.eu/raspberry-pi/build-1090.sh
chmod +x build-1090.sh
./build-1090.sh

搭建步骤

build-1090.sh内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
sudo printf 'blacklist dvb_usb_rtl28xxu\nblacklist rtl2832\nblacklist rtl2830' > /etc/modprobe.d/nortl.conf
sudo apt-get install git-core
sudo apt-get install git
sudo apt-get install cmake
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install build-essential
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
cd ~
sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/
git clone git://github.com/MalcolmRobb/dump1090.git
cd dump1090
make
sudo reboot

执行完后重启RPi,之后ssh登录,先用lsusb看看能不能发现rtl-sdr,然后执行如下命令:

1
rtl_test -t

如果出现下述错误:

1
2
3
4
5
6
7
8
Found 1 device(s):
0: Generic RTL2832U
Using device 0: Generic RTL2832U
Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.
usb_claim_interface error -6
Failed to open rtlsdr device #0.

是由于新版Raspbian内核已经集成了rtl-sdr的驱动,但是这个驱动不是我们需要的,所以要把这个驱动放入黑名单,重新安装osmocom的rtl-sdr驱动。

在/etc/modprobe.d目录建立nortl.conf文件。

1
sudo nano nortl.conf

粘贴以下内容:

1
2
3
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

reboot之后生效。

执行指令下面的命令,可以在终端看dump1090的输出。

1
./dump1090 --interactive

执行如下指令,能在本地的IP 8080端口看到dump1090的输出了(会调用Google Map API)。

1
./dump1090 --interactive --net

开机自启

开机自动启动:

1
sudo nano /etc/init.d/dump1090.sh

粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/bash
### BEGIN INIT INFO
#
# Provides: dump1090
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: dump1090 initscript

#
### END INIT INFO
## Fill in name of program here.
PROG="dump1090"
PROG_PATH="/home/pi/dump1090"
PROG_ARGS="--interactive --net --no-fix --net-ro-size 500 --net-ro-rate 5"
PIDFILE="/var/run/dump1090.pid"

start() {
if [ -e $PIDFILE ]; then
## Program is running, exit with error.
echo "Error! $PROG is currently running!" 1>&2
exit 1
else
## Change from /dev/null to something like /var/log/$PROG if you want to save output.
cd $PROG_PATH
./$PROG $PROG_ARGS 2>&1 >/dev/null &
echo "$PROG started"
touch $PIDFILE
fi
}

stop() {
if [ -e $PIDFILE ]; then
## Program is running, so stop it
echo "$PROG is running"
killall $PROG
rm -f $PIDFILE
echo "$PROG stopped"
else
## Program is not running, exit with error.
echo "Error! $PROG not started!" 1>&2
exit 1
fi
}

## Check to see if we are running as root first.
## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

case "$1" in
start)
start
exit 0
;;
stop)
stop
exit 0
;;
reload|restart|force-reload)
stop
start
exit 0
;;
**)
echo "Usage: $0 {start|stop|reload}" 1>&2
exit 1
;;
esac
exit 0

然后执行

1
2
sudo chmod +x /etc/init.d/dump1090.sh
sudo update-rc.d dump1090.sh defaults

reboot之后生效。

如果想停止服务,执行:

1
sudo /etc/init.d/dump1090.sh stop

删除开机启动服务:

1
sudo update-rc.d -f dump1090.sh remove

鸣谢:@MalcolmRobb @bh3nvn

  • 本文作者: 夜阑听烟雨
  • 本文链接: https://blog.kixcs.com/archives/dd76/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!