Linux AT指令的实验以及Python通过串口获取GPS信息


前言:写这篇博客是对AT指令相关命令的一个记录,因为实习要写python测GPS和移动网络的模块,以及python-periphery包
先通过AT指令可以获取移动网络的信号强度,以及GPS信息,以便先判断模块是不是装好了。

前言:

  1. 本来以为Python是有直接读取GPS和移动网络的包,就像蓝牙包pybluez,wifi包pywifi一样,但是好像没有
  2. 这里使用的是python-periphery库来操作串口,(MIT写的python库),用的是EC20(Quectel) (EC20 包含4G及GPS模块)
  3. 为什么想到用串口来读取GPS信息? 因为发现模块插上板子后通过ls /dev/tty* 命令 设备树上多了几个设备,再联想到串口也是直接传设备名字符串进去来打开串口,于是就尝试把GPS的串口传进periphery库提供的Serial接口,就能得到GPS数据了

python-periphery的官方文档可以好好参考,不仅有Serial,还有GPIO,LED,I2C等,python-periphery官方文档

一、 AT指令

AT指令是用来检测4G模块和GPS模块信息的,其中GPS模块是没有强度大小之分的,故无法使用AT+CSQ来获取信号强度,对于ec20:
有一些有用的AT指令:
各种模块AT指令不一样,需要参考模块的文档:
应该先用cat指令监听串口:
4G模块默认挂载至ttyUSB*

cat /dev/ttyUSB1

另起一个shell

echo -e "AT+QGPS=1\r\n" > /dev/ttyUSB1 # 不同模块 命令不同
# 如果是4G ,可以看信号强度:
echo -e "AT+CSQ\r\n" > /dev/ttyUSB3 
# 注意对应串口号必须要去看产品文档,不同模块的串口对应的设备名不一定是一样的

echo语句一定要加\r\n 不然cat指令可能没有输出,这是个坑!!

顺便记录一些踩过的坑:

# 注意:ec20模块和L610模块,ec200N模块所使用的设备 即/dev/ttyUSB*可能不一样
# address表示设备名地址
# 对于ec20模块 不要使用ttyUSB2,可能会导致未知错误,
# 使用ttyUSB3进行AT指令和cat指令可以获取信息,AT指令应当参考AT 命令手册(QUECTEL)(LTE Standard(A))系列
# 踩过的坑:
# 0. ec20 ec200 L610 控制他们的GPS和移动网络设备名是不一样的 比如ec20 GPS是 /dev/ttyUSB1  L610是/dev/ttyUSB2?
# 1. 一定要拿有GPS的模块来测,不然可能会懵掉
# 2. GPS是没有信号强度返回值的,只有移动网络有+CSQ:31,99这种返回值  2~31代表信号强度,越大越好,参照AT命令手册
# 3. subprocess.Popen函数不会阻塞,但是调用wait函数会遇到阻塞问题,不调用又暂停不了
# 4. os.Popen函数是默认阻塞的,也不能使用
# 5. 目前采用python-periphery库 调用串口来获取GPS和移动网络的数据,

二、Python使用串口获取数据

就直接参考python-periphery 官方文档给出的例程就好,设备名就是GPS或移动网络对应的串口号。
这里给出一个例程:

from periphery import Serial

def test_gps(self,address):
        # todo 关于通信模块的问题,可能 echo 命令多了会使模块不稳定,会使得串口读不了数据,即buf读到的字节数为0
    try:
        # 需要先对 对应的串口发送AT指令
        os.system("echo -e \"AT+QGPSLOC=?\r\n\" > /dev/ttyUSB1")
        # 对于ec20的gps模块 应发送 echo -e "AT+QGPSLOC=?\r" > /dev/ttyUSB1:
        serial = Serial(address,9600)
    except:
        self.log.info("test_gps 串口初始化失败,可能设备名不正确或模块未挂载...")
    buf = serial.read(128,1)
	buf = buf.decode("gbk")
	print(buf)

这里用了decode函数,因为serial.read返回的是bytes类型,用了decode转换为str可以方便print调试。

read函数有两个参数:
第一个参数128 表示读了128个字节就自动结束
第二个参数1表示函数持续时间为1秒,超过1秒自动结束
address: 即设备名: /dev/ttyUSB* (你的模块上对应的GPS或4G模块设备名)

后面会补充一些测试图片,待续

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值