一 前记
使用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. PostgreSQL-分区表介绍

    一.分区简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议当单表大小超过内存就可以考虑表分区了. 表的分区就是将一个逻辑上的大表(主 ...

  2. springboot、jvm调优(设置运行的参数)

    1.工具 jdk自带的工具位置: 找到窗口->应用程序 2.问题和方式 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 2.1 springboot修改配置文件 ...

  3. linux常用命令(六)

    用于查找系统文件的相关命令 grep find locate grep:查找文件中符号条件的字符串(关键词) 命令语法:grep [选项] 查找模式 [文件名] 选项 选项含义 -E 模式是一个可扩展 ...

  4. Jmeter内的参数有文件时,如何传参?

    文件类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 尊重原创,转载请注明出处,谢谢!!

  5. K8s部署轻量级日志收集系统EFK(elasticsear + filebeat + kibana)

    目录 K8s部署EFK(elasticsear + filebeat + kibana)日志收集 一.准备镜像 二.搭建Elasticsearch + kibana 1.在可执行kubectl命令的服 ...

  6. 学习一下Java的ArrayList和contains函数和扩容机制

    起因 在Leetcode上做题写了两种暴力解法,但是执行效率上不太一样. 时间上差很远,内存虽然差不多但是前者击败30%,后者击败94%.这两种解法区别是用一条ArrayList还是两条来存数据,所以 ...

  7. LCT(link cut tree) 详细图解与应用

    樱雪喵用时 3days 做了 ybtoj 的 3 道例题,真是太有效率了!!1 写死自己系列. 为了避免自己没学明白就瞎写东西误人子弟,这篇 Blog 拖到了现在. 图片基本沿用 OIwiki,原文跳 ...

  8. 理解maven命令package、install、deploy的联系与区别(转)

    https://blog.csdn.net/zhaojianting/article/details/80324533 我们在用maven构建java项目时,最常用的打包命令有mvn package. ...

  9. 全网最详细4W字Flink全面解析与实践(下)

    本文已收录至GitHub,推荐阅读 Java随想录 微信公众号:Java随想录 原创不易,注重版权.转载请注明原作者和原文链接 承接上篇未完待续的话题,我们一起继续Flink的深入探讨 Flink S ...

  10. 树莓派4b部署samba服务实现文件共享

    注意 samba 生命力很旺盛,软件是在不断更新的, 网上很多针对 samba 网速优化设置截止当前 实测发现有很多已经过期, 甚至有些设置会适得其反,使传输速度更低. 例如, 全网都在配置的参数,& ...