开源一款串口调试助手 | 实现MQTT/TCP/UDP一键生成指令等功能

IoT 3年前 (2021) admin
1,205 0 0

开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能点蓝色字关注我,不定时干货推送。


开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能



点开听听,

巷口灯光忽明忽暗,

手中甜咖啡已冷却。开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能



效果图:
开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能
这是基于PyQt5打造的一款跨平台的安信可模组电脑串口调试助手 (支持windows、MacOS和Linux),由半颗心脏一人的DIY作品,兼容市面上的乐鑫芯片系列的模组的AT指令常见的网络通讯协议,包括 MQTTTCPUDP以及阿里云物联网平台连接小工具等,全面开源奉献物联网。


集成了市面上大多串口工具的功能,特性包括:


  •  自定义波特率

  •  集成阿里云三元组一键生成MQTT鉴权参数

  •  集成安信可的ESP系列模组 AT指令的 MQTT、TCP、UDP快捷面板

  •  支持记录上次用户参数,包括用户全部自定义内容

  •  RTS 控 DTR 控

  •  Hex 发送和接收


貌似很久没更新博客了,又感觉自己在浑水摸鱼? 不可能的,除了带团队做项目,业务时间,我已经成功入坑了PyQT5上位机开发了,所以这几个月会陆陆续续更新一些好玩的上位机代码出来,这也是适合我们平时做量产工具所需要的。


在选择上位机开发时候,我们都会在想,QT/PyQt5或C#哪个开发方式会适合商业用途? 个人觉得,在物联网领域,我们所要实现的功能并不多,用PyQt5编程就够了,当然了,如果你精通C#是最好的了,因为它是微软公司开发的语言,并且针对windows平台。


我一向贯彻 “哪种方式开发最快使产品落地” 的开发方式为基准去要求自己,方式很多种,合适自己的才是最好的。平时不断地积累技术上的可量产的方案,并在简简单单的Demo中不断沉淀并思考如何成为一个好产品。


1

设计规范


前面提到,学习就是一个探索到归纳并输出的过程,所以,当我学这个串口模块代码功能使用已经熟悉的地步时机,我会二次封装成为自己的代码习惯风格,下次沿用起来,可以得心应手地去适配到自己现有的项目。


用户只需设计一个回调函数即可收到串口发来的数据,自行解析 Hex 格式还是字符串形式。


用户无需关心内部实现细节,采用接口形式设计串口。

设计原理

开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能



2

API接口


设置回调函数:setCallBack(funtion)

获取可用的端口号集合:get_all_port()

尝试关闭串口:try_off_port(port)

尝试打开串口:try_port_open(port)

设置校验位:set_default_parity(8)

设置停止位:set_default_stopbits(8)

设置数据位:set_default_bytesize(8)

设置默认打开端口:set_default_port(port)

设置默认打开波特率:set_default_baudrate(baud)


3

代码示范


import sys
from PyQt5 import QtWidgets
from xUart.UartSerial import *
from PyQt5.QtWidgets import QApplication, QMainWindow
from datetime import datetime

def uart_callback_handler(obj):
    if obj['code'] == 1:
        print('串口异常断开')
    else:
        buff = (obj['data'])
        now_time = datetime.now()  # 获取当前时间
        new_time = now_time.strftime('[%H:%M:%S]')  # 打印需要的信息,依次是年月日,时分秒,注意字母大小写
        if False:
            out_s = ''
            for i in range(0, len(buff)):
                out_s = out_s + '{:02X}'.format(buff[i]) + ' '
            print(new_time, '收到数据:', out_s)
        else:
            try:
                buff = buff.decode('utf-8''ignore')
                print(new_time, '收到数据:', buff)
            except:
                # 乱码显示
                pass

def OnClickSend():
    buff = "Hell World"
    mXUart.send_data(buff.encode('utf-8'))
    print("发送成功!!!")


if __name__ == '__main__':
    app = QApplication(sys.argv)

    MainWindow = QMainWindow()
    bt_send = QtWidgets.QPushButton(MainWindow)
    bt_send.setText("点击发送")
    bt_send.clicked.connect(OnClickSend)
    MainWindow.show()

    #  初始化mXUart
    mXUart = UartSerial()
    # 设置串口数据回调函数
    mXUart.setCallBack(uart_callback_handler)

    # 获取电脑可用的串口
    all_ports = mXUart.get_all_port()
    print("获取电脑可用的串口:", all_ports)

    # 设置通信串口
    get_port_array_str = []
    for item in all_ports:
        get_port_array_str.append(item)

    if len(get_port_array_str) == 0:
        print("获取电脑没有可用的串口!!!")
    else:
        # 设置通信串口,入参必须是字符串,比如 COM11
        baud = 115200
        port = get_port_array_str[0]
        str = '打开串口'

        # 设置打开串口参数
        mXUart.set_default_parity( 'N'# PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE = 'N', 'E', 'O', 'M', 'S'
        mXUart.set_default_stopbits(1)  # STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO = (1, 1.5, 2)
        mXUart.set_default_bytesize(8)  # FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8)
        mXUart.set_default_port(port)
        mXUart.set_default_baudrate(baud)

        if str == '关闭串口':
            if mXUart.try_off_port(port, baud):
                print("关闭串口成功!!!")
            else:
                print('错误信息''串口被占用或已拔开,无法打开')
        if str == '打开串口':
            if mXUart.try_port_open(port, baud):
                print("打开串口成功:", port)
            else:
                print('错误信息''串口被占用或已拔开,无法打开')

    sys.exit(app.exec_())



4

日志打印


获取电脑可用的串口: ['COM3''COM1''COM13']

打开串口成功:COM3

[22:43:52] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

[22:43:53] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

[22:43:55] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

[22:43:56] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

[22:43:58] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

[22:43:59] 收到数据:AT+CWJAP="ai-iot","xuhongyss123456"

Process finished with exit code 0
关注本微信公众号发送 210612 获取串口调试助手源码吧~


开源一款串口调试助手 |  实现MQTT/TCP/UDP一键生成指令等功能

原文始发于微信公众号(徐宏blog):开源一款串口调试助手 | 实现MQTT/TCP/UDP一键生成指令等功能

版权声明:admin 发表于 2021年6月13日 上午1:00。
转载请注明:开源一款串口调试助手 | 实现MQTT/TCP/UDP一键生成指令等功能 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...