本文主要是介绍基于python的cat1模块的AT指令串口通信解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用cat1模块做产品的过程中,遇到了不少问题。其中很重要的一个就是怎么测试单个模块的好坏。这里笔者专门写了一个工具,来测试cat1模块的是否好用,这里做一个分享吧。
这个是一个完全可以工作的程序,只需要改成你的模块的即可;
# -*- coding: utf-8 -*-
import time
import hashlib
import threading
from serial import Serial
import serial.tools.list_ports
import time
#查找端口函数
def findPort():
ports = serial.tools.list_ports.comports()
for each in ports:
if 'Android' in each:
com_android = each.split(' - ')[0]
return com_android
#发送AT指令函数
def at_send_cimi(serial):
try:
at_bsn = 'AT+CIMI' # 具体命令就不给出了。
serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口发送指令必须二进制格式;末尾添加\r\n表示发送。
print('AT+CIMI SEND SUCCESS!')
except Exception as e:
print(e)
def at_send_cmiot(serial):
try:
#at_bsn = 'AT+QICSGP=1,1,"CTNET","","",1' # 具体命令就不给出了。
#中国移动
at_bsn = 'AT+QICSGP=1,1,"CMIOT","","",1' # 具体命令就不给出了。
serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口发送指令必须二进制格式;末尾添加\r\n表示发送。
print('AT+QICSGP SEND SUCCESS!')
except Exception as e:
print(e)
def at_send_qiact(serial):
try:
at_bsn = 'AT+QIACT=1' # 具体命令就不给出了。
serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口发送指令必须二进制格式;末尾添加\r\n表示发送。
print('AT+QIACT SEND SUCCESS!')
except Exception as e:
print(e)
def at_send_tcprequest(serial):
try:
at_bsn = 'AT+QIOPEN=1,0,"TCP","47.103.67.239",8080,0,2' # 具体命令就不给出了。
serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口发送指令必须二进制格式;末尾添加\r\n表示发送。
print('AT+tcp request SEND SUCCESS!')
except Exception as e:
print(e)
def socket_send_data(serial):
try:
at_bsn = 'hello world test success' # 具体命令就不给出了。
serial.write(at_bsn.encode('utf-8') + b'\r') # 向端口发送指令必须二进制格式;末尾添加\r\n表示发送。
print('socket SEND data SUCCESS!')
except Exception as e:
print(e)
def recv_msg(serial): # 接收消息(任务线程)
global g_tcp_state
while True:
data = serial.read(128)
if len(data) > 6:
print("data2:",data[2])
if data[2] == 0x52 and data[3] == 0x44:
print("ready cmd in")
at_send_cimi(serial)
time.sleep(0.1)
#at_send_cmiot(serial)
#osdelay(1000)
#time.sleep(0.1)
#at_send_qiact(serial)
if len(data) > 30:
if data[29] == 0x4f and data[30] == 0x4b:
print("recv sim card success and send cmiot register")
at_send_cmiot(serial)
#at_send_qiact(serial)
#time.sleep(0.1)
#at_send_tcprequest(serial)
if len(data) > 35:
if data[32] == 0x4f and data[33] == 0x4b:
print("recv cmiot register success and send qiat cmd")
at_send_qiact(serial)
if len(data) == 17:
print("data13:",data[13])
if data[13] == 0x4f and data[14] == 0x4b:
print("recv qiact ack success and send tcp connect")
at_send_tcprequest(serial)
if len(data) == 66:
print("data61:",data[61])
print("data62:",data[62])
if data[61] == 0x73 and data[62] == 0x73:
g_tcp_state = True
print("tcp socket connected success")
if g_tcp_state == True:
socket_send_data(serial)
time.sleep(0.1)
#主程序
if __name__ == '__main__':
g_tcp_state = False
serial = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.5) #/dev/ttyUSB0
if serial.isOpen() :
print("open success")
else :
print("open failed")
threading.Thread(target=recv_msg, args=(serial,)).start()
at指令在c代码中和python中是不同的,c代码中要针对逗号要添加隔离符,python中是不需要的。
还要就是回撤和换行,每个产品都不同,这个添加的时候要具体情况具体分析了。
这篇关于基于python的cat1模块的AT指令串口通信解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!