前几日好好研究了一下APRS,一下子被他的魅力所吸引,但是我在家里或者单位的时候很难通过协会的中继上传我的信息,所以就有了自己架设iGate的想法,查找资料了解到电视棒加树莓派可以实现,正好手里有一个树莓派,网淘一个820T的电视棒,芯片采用小螃蟹瑞昱的RTL2832U,这东西本来是国外的地面数字电视使用,国内也可以收到部分电视信号,不过我是用他不务正业,关于RTL2832U如何被发现这个功能的还有一段演绎的故事,摘抄如下“一天某大牛买了这款电视棒,想在linux下看看动作片,然而官方只有Windows版本的驱动,心急火燎的他便开始着手编写linux下的电视棒驱动,过程中发现这款电视棒允许原始I/O采样的传输,可用于DAB/DAB+/FM解调。于是他拉起裤子,开始了进一步的研究…”
首先你要有一个树莓派,给他安装一个标准的操作系统即可,系统默认关闭root用户,root密码为空,可以通过命令开启,使用过程中大部分通过sudo命令来提升权限,所以没有root也无所谓。
Login: pi #默认用户名
Password: raspberry #默认密码
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rpi-update
sudo reboot
以上命令用于升级树莓派的各种应用,鉴于各位网速的关系,可以先将源修改为国内的,
sudo vi /etc/apt/sources.list
注释掉原来的默认源,插入以下源
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi
deb http://mirrors.neusoft.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi
由于数据量不小,如果您的下载网速在1MB那么全部更新完应该可以在一个小时内。
sudo apt-get remove –purge pulseaudio
sudo apt-get autoremove
rm -rf /home/pi/.asoundrc /home/pi/.pulse
sudo reboot
移除音频相关的,这一步我没有搞懂是做什么,第一次部署的时候,并没有做这一步,造成设备无法接收到手台发射的信标,但是可以用于SDR,可以收听fm和U/V段。
sudo vi /etc/modprobe.d/raspi-blacklist.conf
在文件中加入如下内容,此文件为黑名单文件,不让系统自动加载电视棒驱动
blacklist dvb_usb_rtl28xxu
blacklist rtl_2832
blacklist rtl_2830
修改完毕后,reboot重启
sudo apt-get install git build-essential cmake libtool libusb-1.0-0-dev autoconf automake libfftw3-dev qt4-qmake libpulse-dev libx11-dev python-pkg-resources sox
一口气将后续需要的所有软件安装上,由于软件都不大,所以这个过程还是比较快的。
cd ~/
sudo mkdir rtl
cd rtl
回到家目录,并新建一个目录rtl,实际上这个目录的位置应该在/home/pi/下,
sudo git clone git://git.osmocom.org/rtl-sdr.git
驱动程序
sudo git clone https://github.com/asdil12/kalibrate-rtl.git
校准程序
sudo git clone https://github.com/EliasOenal/multimonNG.git
用于解码收到的aprs信号(我推断,并不确定)
sudo git clone https://github.com/asdil12/pymultimonaprs.git
aprs代理程序
以上四个包是今天的全部大菜。
继续我们的操作,第一步安装编译驱动,一说编译我也头疼,还好这次都很顺利。
cd rtl-sdr
sudo mkdir build
cd build
cmake .. -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
编译安装了驱动并更新了连接库。
好了执行命令,验证一下。
rtl_test
rtl_fm -M wbfm -f 90.0M | play -r 32k -t raw -e s -b 16 -c 1 -V1 –
rtl_fm -M fm -f 144.390M | play -r 24k -t raw -e s -b 16 -c 1 -V1 –
好了,到这一步大家就知道硬件已经正常驱动起来了,我们开始校准电视棒,据说由于大批量生产,和做工的不严谨,所以频率并不是十分精准,需要进行校正,在学习校正的过程中我竟然发现,这小小的电视棒还能收集手机的数据,不过据说是加密的哈,请大家不要胡乱抓包了,这也不是本文需要讨论的范围。
cd ~/rtl/kalibrate-rtl
git checkout arm_memory
./bootstrap
./configure
make
sudo make install
kal -s GSM900
以手机的900M频段为基准,搜索手机基站信号,我这里用树莓派死活搜不到,只能用Windows系统搜了搜,没想到竟然成功了,所以截图以win版代替,效果是一样的。
kal -c 16 -v
选择一个信号最强的频道,然后与这个频道进行校准,-c后面就是频道号。
经过反复测试发现,在树莓派下指定35,同样可以扫描到基站信号了。
大家可以多试几次,我是尝试了四次,四次的结果都不一样,最后选择了一组速度最快的作为基准。这个过程较慢,请耐心等待,可能会持续1到五分钟。
cd ~/rtl/multimonNG
sudo mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install
安装解码软件
rtl_fm -f 144.390M -s 22050 – | multimon-ng -a AFSK1200 -A -t raw –
执行效果
cd ~/rtl/pymultimonaprs
sudo python setup.py build
sudo python setup.py install
安装aprs代理软件
./keygen.py BH1EWI
计算你的密码,请使用你的呼号,并且不要添加任何SSID,计算出来的密码留在一边待用。
cp pymultimonaprs.json /etc/pymultimonaprs.json
将启动模板文件拷贝到etc目录下,
vi /etc/pymultimonaprs.json
“callsign”: “BH1EWI-10”, //请修改成您自己的呼号,并添加SSID
“passcode”: “998998”, //刚才计算出来的密码放在这里
“gateway”: [“euro.aprs2.net:14580″,”asia.aprs2.net:14580”], //默认的aprs服务器地址及端口,我将默认配置文件中的一个修改为亚洲地区了
“append_callsign”: true,
“source”: “rtl”,
“rtl”: {
“freq”: 144.640, //接收信标的频点
“ppm”: -17.376, //刚才校正电视棒得到的差值数据
“gain”: 0,
“offset_tuning”: false,
“device_index”: 0
},
“alsa”: {
“device”: “default”
},
“beacon”: {
“lat”: 39.89850, //纬度坐标
“lng”: 116.32120, //经度坐标
“table”: “/”,
“symbol”: “&”, //应该是默认图标代码,但是我没有找到对应的关系图,就用了默认的
“comment”: “RTL-SDR-APRS iGate”, //设备显示信息,这个大家根据实际情况填写。
“status”: {
“text”: “Running on Raspberry Pi with RTL dongle”, //显示的文本信息,主要是显示运行于什么设备,设备天线情况等。
“file”: false
},
“weather”: false,
“send_every”: 300,
“ambiguity”: 0
}
}
执行pymultimonaprs
cp pymultimonaprs.init /etc/init.d/pymultimonaprs
sudo chmod +x /etc/init.d/pymultimonaprs
sudo update-rc.d pymultimonaprs defaults
拷贝启动脚本到启动目录
给启动脚本增加可执行权限
将程序设置为开机自启动,
sudo /etc/init.d/pymultimonaprs start
手动开启应用,同理可以使用如下命令关闭程序
sudo /etc/init.d/pymultimonaprs stop
至此,整个部署过程进行完毕,大家可以享受自己的iGate了。