首页 > 编程语言 >基于python的cat1模块的AT指令串口通信解析

基于python的cat1模块的AT指令串口通信解析

时间:2023-12-26 12:13:50浏览次数:34  
标签:python send 发送 cat1 bsn 串口 print serial data

一 前记 使用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,send,发送,cat1,bsn,串口,print,serial,data
From: https://www.cnblogs.com/dylancao/p/17927833.html

相关文章

  • 在 Python 中,​​?:​​​ 符号并不是一个有效的运算符。这个符号在其他一些编程语言
    在Python中,?:符号并不是一个有效的运算符。这个符号在其他一些编程语言中,如JavaScript或C,被称为条件(三元)运算符。然而,在Python中,我们使用if-else表达式来达到相同的目的。例如:x=10y=20print("xisgreater")ifx>yelseprint("yisgreater")在上述代码中,如果......
  • python的列表的常用操作
    编号使用方式作用1列表.append(元素)向列表中追加一个元素2列表.extend(容器)将数据容器的内容依次取出,追加到列表尾部3列表.insert(下标,元素)在指定下标处,插入指定的元素4del列表,下标删除列表指定下标元素5列表.pop(下标)删除列表指定下标元素6......
  • python初试五
    Django提供一个管理数据库的app,即django.contrib.admin。这是Django最方便的功能之一。通过该app,我们可以直接经由web页面,来管理我们的数据库。这一工具,主要是为网站管理人员使用。这个app通常已经预装好,你可以在mysite/settings.py中的INSTALLED_APPS看到它。默认界面admin界面......
  • Python算法——树的最大深度和最小深度
    Python中的树的最大深度和最小深度算法详解树的最大深度和最小深度是树结构中的两个关键指标,它们分别表示树的从根节点到最深叶子节点的最大路径长度和最小路径长度。在本文中,我们将深入讨论如何计算树的最大深度和最小深度,并提供Python代码实现。我们将详细说明算法的原理和步骤。......
  • python网站创建015:jQuery的标签操作
    当我们找到标签之后,就要学习jQuery对这个标签都能做哪些操作? 1、样式操作:也就是操作标签的css样式添加样式:addClass删除样式:removeClass判断是否有该样式:hasClass有则移除,无则添加:toggleClass<!DOCTYPEhtml><html><head><title>初识:JavaScript</title><meta......
  • 盘点一个Python自动化办公实战案例(二)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【钟爱一生】问了一个Python自动化办公的问题,一起来看看吧。【温馨提示】遇到表达不清的,能稍微描述下,想要达成的结果吗?在excel上,或者画图也行。最好是把你想要的结果展示在excel中,另外,你展示的这个表格最好做个小的demo......
  • # yyds干货盘点 # 盘点一个Python自动化办公实战案例(二)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【钟爱一生】问了一个Python自动化办公的问题,一起来看看吧。【温馨提示】遇到表达不清的,能稍微描述下,想要达成的结果吗?在excel上,或者画图也行。最好是把你想要的结果展示在excel中,另外,你展示的这个表格最好做个小的demo发上来......
  • Python实战项目:开发学生管理系统(基础版)
    课题:学生信息管理系统知识点:基本的数据类型与结构(int/str/float/bool,list,dist,luple,sel)基本的逻辑控制语句(if/for/while/break/continue)Python实战项目:开发学生管理系统(基础版)目录1.打印学生信息系统页面2.搭建用户操作框架3.创建学生信息4.新建学生信息5.将学生信息保存到......
  • Python中selenium库的用法详解
    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候一、声明浏览器对象注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入fromseleniumimportwebdriver#web......
  • Python+uiautomator2实现手机锁屏解锁功能
    业务需求:需要测试手机滑动解锁失败时事件的次数及等待的时间,本来想利用Python+Appium实现,但是Appium运行时自动给我解锁了....部分解释摘抄自:https://testerhome.com/topics/11357python-uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试python-uiautomator2......