一 前记
使用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指令串口通信解析的更多相关文章

  1. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

  2. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  3. 基于Python的多线程模块Threading小结

    步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...

  4. Python的socket模块与交互式指令

    socket简介 在编程的过程中,我们需要使用网络编程,这时我们不得不和网络通信的底层基础打交道了.我们必须让自己传输的数据符合网络通信的基本协议,即TCP/IP协议,但是网络通信协议本身很复杂.我们 ...

  5. 基于python的extract_msg模块提取outlook邮箱保存的msg文件中的附件

    笔者保存了一些outlook邮箱中保存的一些msg格式的邮件文件,现需要将其中的附件提取出来, 当然直接在outlook中就可以另存附件,但outlook默认是不支持批量提取邮件中的附件的 思考过几种 ...

  6. 基于python第三方requests 模块的HTTP请求类

    使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...

  7. 基于Python原生asyncio模块对DNS正向和反向的解析

    一.正向解析:域名解析IP地址 import asyncio import socket domains = [ ('www.baidu.com', 'https'), ('cn.bing.com', ...

  8. 基于python的爬虫项目

    一.项目简介 1.1 项目博客地址 https://www.cnblogs.com/xsfa/p/12083913.html 1.2 项目完成的功能与特色 爬虫和拥有三个可视化数据分析 1.3 项目采 ...

  9. 基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)

    基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 个人技术博客:http://www.cnblogs.com/M ...

  10. psutil一个基于python的跨平台系统信息跟踪模块

    受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...

随机推荐

  1. CentOS 8 无痕升级到 Rocky Linux

    CentOS 8 无痕升级到 Rocky Linux 1.升级当前系统 dnf upgrade -y 2.重启当前系统: reboot 3.下载脚本: CentOS 8 到 Rocky Linux 8 ...

  2. vue2和vue3使用echarts时无数据,怎么显示暂无数据图片或文字

    一开始也经历了用v-if和v-show,v-show的话echarts还会留出暂无数据图片的位置,导致echarts变形,v-if在加载和不加载切换时,dom会获取不到:后来也是在网上找的方法,时间有 ...

  3. 「にちじょう記録」MTIDnWtMOA

    Mistakes That I Don't Want to Make Once Again. // Caution // 差分 / 前缀和后注意询问区间端点有变化-- 不要考虑了右边界就不考虑左边界 ...

  4. 「shoi 2012」随机数

    link. 对于 pass 1, 你把他考虑成 \(\frac{\sum x}{i}\) 的形式, 于是每次操作的贡献就是 \(\frac{2}{i}\), 那么答案就是 \(\sum_{i=2}^n ...

  5. js递归查询之根据id查询当前对象

    需求:递归查询数组中id对应的数据 Json数据格式: 1 let cityArr = [ 2 { 3 id: 1000, 4 name: '四川省', 5 children: [ 6 { 7 id: ...

  6. Hyper-V安装Ubuntu16.04,连接网络的设置

    使用Windows10自带的Hyper-V安装Ubuntu. 进入系统界面后,无法连接网络. 1.首先确定安装虚拟机的网络设置 2.在Wlan属性分享页面中选取对应的网络设置,然后回到属性页面勾选Hy ...

  7. daffodil

    import java.util.ArrayList; public class Daffodil { /** * 打印出100-999之间所有的"水仙花数",所谓"水仙 ...

  8. SOA认知和方法论

    1 前言 1.1 架构分类 在软件设计领域,企业架构通常被划分为如下五种分类: 如何理解架构分类依据及其彼此之间的关系?业务是企业赖以生存之本,因此业务架构是基础.是灵魂,其他一切均是对业务架构的支撑 ...

  9. Codeforces Round 905 Div 1 (CF1887)

    A1. Dances (Easy version) 把 \(a,b\) 序列都从小到大排序,\(a\) 贪心删大的,\(b\) 贪心删小的,二分答案并 \(O(n)\) \(\text{check}\ ...

  10. Springboot+Mybatis+Mybatisplus 框架中增加自定义分页插件和sql 占位符修改插件

    一.Springboot简介 springboot 是当下最流行的web 框架,Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程 ...