一切源于网络,一切回归网络,python业余断断续续看了1个多月,在BI4WNN和BD7LSB的样例代码下,抄袭网上其他牛人的代码,结合自己写过的易语言控制软件思路,现在做出来了,树莓基于HAMLIB,电台频率控制还未测试太多,因为自己的USB转232效果不佳,没有继续实验,不过理论可以使用。
树莓控制GS232B的旋转器没有使用HAMLIB提供的rotctld旋转器控制,因为那个会有延迟很厉害的BUG,现在自己简单的写了,最大仰角限制65度,保护旋转器,当然如果控制云台,加入秒时间来控制云台转动多少度理论也可以实现,不过不知道会不会有人用。
树莓在执行这个脚本之前必须:1.安装hamlib 2.安装模块如下,里面很多可能树莓python自带,也可能没用上,但我还是先提醒一下,3自动启动的sh脚本可以借鉴我附件anjian_jiaoben (放到/etc/init.d/)和kaiji.sh, 脚本autowifi.py是防止自动断网的,树莓B会出现这个问题。4.附件所有文件除了anjian_jiaoben都放pi目录下。5.DS3212模块自己琢磨,kaiji.sh会启动.6.关闭树莓自带串口的调试输出,在raspi-config里设置,因为使用的这个串口控制RS232B协议旋转器。
配置文件myapp.conf 中 jingdu=106.7583 weidu=33.1175 gaodu=555 为自己所处位置的经纬度,高度(米)。
电台设置:下行xiaxing=340(电台型号rigctl -l 命令查询得知)xiaxing_b=9600 (波特率)xiaxing_icom=08(icom机器地址必写,其他机器写了也不影响)xiaxing_win_com=com11(win平台下行串口,树莓派下USB0,随便插会试验出,)上行设置含义一样。
import chardet
import socket,serial
import ephem
import os,sys
import threading
import time,calendar
import string
import math
import datetime
from pyorbital
import tlefile
from pyorbital.orbital
import Orbital
import BG4WNN_tle
import sqlite3
import subprocess
import traceback
import codecs
import Queue
import select
import logging
import ConfigParser
脚本的特点:1.野外使用,必须用安卓手机给树莓一个IP地址,否则树莓会不停重启程序,并且会写入2个日志文件,我做了2个日志文件,是出于实验,脚本有错误产生后,自动重新启动脚本,无需担心死机,即便真的死机可以,使用压缩文件reboot.py按键硬件重启树莓派。
2.可以加角度传感器,只要增加简单代码和GPIO LED灯指示,就可以实现卫星角度判断,绑在八木上,校正八木指向用,也可以接入发射电台Key,增加一个GPIO按钮,设置自动呼叫功能,不过代码我还没想好。
3,因为是win ,ubuntu 树莓派三个平台可以用,但ubuntu下需要做简单设置,并安装所需要python模块, WIN7下也可以启动,也必须安装需要python模块,另外得手动修改串口号,默认的是COM11是接收机,COM7.是发射机.
4.脚本使用SQLiteStudio(win7上的电脑软件)修改频率数据库,因为是2种星历对应2种频率数据库,而ao73 dk3wn星历没有,紫丁香1amsat星历没有。amsat对应s.db,dk3wn网站星历对应dk3wn.db ,使用数据库,因为自带的排序查找非常方便,这个频率数据库是提供的每个卫星的频率计算,如果当星历中有新卫星时,可以手动增加它的频率,当星历的卫星名称改变时,也必须修改这个频率数据库,因为排序脚本会使用这个名称.
5.野外使用配合安卓手机,使用压缩文件提供的apk串口调试来下达指令给树莓派,使用前需要把这个手机调试程序的文字编码调到utf8,因为脚本中文输出是utf8.tcp连接1111端口做主控制,UDP连接1333做自动显示状态用(注意UDP的电脑地址,包括手机地址需要提前在myapp.conf修改,因为UDP广播还未学习透彻),如果在电脑上调试,首先进入路由器查看树莓IP地址,比如我的192.168.1.100.进入SSH后,输入:nc 192.168.1.1.100 1111进入TCP连接状态,输入:nc -lu 1333,进入UCP 接收状态显示。
TCP连接后,命令如下:一.切换星历:输入am(amsat星历) 输入dk(dk3wn网站星历)
二.卫星过境排序:输入px(排序)(每次切换星历后必须键入一次px,否则因为切换星历后没有数据,可能会出错) 。
三.显示卫星时间过境顺序,sx(顺序).
四.按照这个过境时间的数字序号,输入1到14等,会切换到该卫星,
五.TCP下输入:hx(回显),自动不停的回显卫星和旋转器状态.
六. 当输入hx后,要停止回显,输入gb就可以(但这个我没弄好,也是不足之处,有时无法关闭)
七 .输入wz(位置):会显示当前旋转器位置.
八.比如输入:sz 103.222 32.1111 555 (设置)sz(空格)经度(空格)维度(空格)高度(米)为改变卫星计算的本地经纬度,不过地点不变的话,建议修改目录下的配置文件。
九.输入help:显示简单的帮助提示。
6。树莓的GPIO接口,18,17 各连接1个LED二极管到地线, 一个是TCP,UDP连接正常,会闪烁显示,一个是卫星计算和旋转器,电台控制的连接正常,会闪烁显示,出现故障时,用于判断故障,实际现在具备故障后自动重启脚本,这个可能有点多余,不过留着好看, GPIO 7 8 25是三个按钮 对地线连接,是扫频和微调发射机用按钮,一个按钮是扫频按下,就可以用接收机滚轮带动发射机扫描线性卫星转发器其他友台CW或者SSB频率,还有二个按钮是当卫星过境时多普变化厉害,导致需要微调发射机上下频率,这样自己的上行会落在自己的下行上。也就是上,下微调发射机频率,这个功能待实验和继续完善。
特别之处是:我的旋转器是朝南安装,俄罗斯和欧洲方向可以自由转,345到360盲区在南,因为南边台少,所以TCP显示旋转器水平位置和卫星水平方向做了180度加减,根据自己旋转器安装,需要稍微注销掉我呼号横线标注的那段,shuipin1=shuipin就可以了。
这个脚本一直全天开着,是不依赖电脑,控制旋转器旋转,按照树莓对卫星排序的第1个过境卫星进行旋转,过境仰角0度或1度很低仰角的卫星也会自动追踪的,在300秒后进行卫星过境排序,当卫星距离自己位置小于10分钟时,不会进行排序,所以间隔5分钟内的卫星可能会漏掉,需要用手机看下,按数字进行选择卫星,还有一个关键处,脚本和数据库要chmod 777权限,否则出现错误,而且如果要增加代码,建议初学者使用pycharm,不然随便增加代码可能引起缩进改变,导致一些莫名其妙的错误。树莓温度监测是60度以上自动关机。
另外树莓也有缺陷是,工作不够稳定,在公地的电台启动时,会发生自动重启,但在控制旋转器时,未见发射机造成死机 .




6.26更新:https://pan.baidu.com/s/1o7Y4XVO
最后,欢迎喜欢折腾的人折腾,交流脚本思路。
DE BG9AGZ 73!
[ 此帖被BG9AGZ在2017-06-26 07:00重新编辑 ]