【PyQT5学习之旅第1篇 】 如何自定义控件,入门做一个上位电脑串口调试软件,全部开源。(附带源码)!
【PyQT5学习之旅 第2篇 】封装一个PyQT5 串口模块,使用起来得心应手,我也开始造简单的轮子了。
前言
貌似很久没更新博客了,又感觉自己在浑水摸鱼? 不可能的,我已经成功入坑了 PyQT5 上位机了,所以这几个月会陆陆续续更新一些好玩的上位机代码出来,这也是适合我们平时做量产工具所需要的。
在选择上位机开发时候,我们都会在想,QT
、PyQt5
或 C#
哪个开发方式会适合商业用途? 个人觉得,在物联网领域,我们所做的功能并不多,用 PyQt5
就够了,当然了,如果你精通 C#
是最好的了,因为它是微软开发的语言,并且针对windows
平台。
我一向贯彻 “哪种方式开发最快使产品落地” 的开发方式为基准去要求自己,方式很多种,合适自己的才是最好的。平时不断地积累技术上的可量产的方案,并在简简单单的Demo中不断思考如何成为一个好产品。
务实做好、学好每个技术点,自己撑起一把伞保护自己。
一、如何封装一个串口模块
前面提到,学习就是一个探索到归纳并输出的过程,所以,当我学这个串口模块代码功能使用已经熟悉的地步时机,我会二次封装成为自己的代码习惯风格,下次沿用起来,非常得心应手去适配到自己现有的项目。
设计规范:
- 用户只需设计一个回调函数即可收到串口发来的数据,自行解析 Hex 格式还是字符串形式。
- 用户无需关心内部实现细节,采用接口形式设计串口。
设计原理:
二、重要的几个方法
- 设置回调函数:
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)
三、使用示范
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_())
日志打印:
获取电脑可用的串口: ['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
四、开源一款串口调试助手:
这是基于PyQt5打造的一款跨平台的安信可模组电脑串口调试助手 (支持windows
、MacOS
和Linux
),由 半颗心脏 一人的作品,兼容市面上的乐鑫芯片系列的模组的AT指令常见的网络通讯协议,包括 MQTT\TCP\UDP
以及阿里云物联网平台连接小工具等,全面开源奉献物联网。
集成了市面上大多串口工具的功能,特性包括:
- 自定义波特率
- 集成阿里云三元组一键生成MQTT鉴权参数
- 集成乐鑫系列模组 AT指令的 MQTT、TCP、UDP快捷面板
- 支持记录上次用户参数,包括用户全部自定义内容
- RTS 控 DTR 控
- Hex 发送和接收
- 保存接收
下载免安装版:https://github.com/xuhongv/PyQT5-Serial/releases
源码下载:https://github.com/xuhongv/PyQT5-Serial
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- 玩转
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850 - 个人邮箱:xuhongv@yeah.net 24小时在线,有发必回复!
- esp8266源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
- esp32源代码学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
- 关注下面微信公众号二维码,干货多多,第一时间推送!
转载:https://blog.csdn.net/xh870189248/article/details/117217384