【PyQT5学习之旅第1篇 】 如何自定义控件,入门做一个上位电脑串口调试软件,全部开源。(附带源码)!
【PyQT5学习之旅 第2篇 】封装一个PyQT5 串口模块,使用起来得心应手,我也开始造简单的轮子了。
貌似很久没更新博客了,又感觉自己在浑水摸鱼? 不可能的,我已经成功入坑了 PyQT5 上位机了,所以这几个月会陆陆续续更新一些好玩的上位机代码出来,这也是适合我们平时做量产工具所需要的。
在选择上位机开发时候,我们都会在想,QT
、PyQt5
或 C#
哪个开发方式会适合商业用途? 个人觉得,在物联网领域,我们所做的功能并不多,用 PyQt5
就够了,当然了,如果你精通 C#
是最好的了,因为它是微软开发的语言,并且针对windows
平台。
我一向贯彻 “哪种方式开发最快使产品落地” 的开发方式为基准去要求自己,方式很多种,合适自己的才是最好的。平时不断地积累技术上的可量产的方案,并在简简单单的Demo中不断思考如何成为一个好产品。
务实做好、学好每个技术点,自己撑起一把伞保护自己。
前面提到,学习就是一个探索到归纳并输出的过程,所以,当我学这个串口模块代码功能使用已经熟悉的地步时机,我会二次封装成为自己的代码习惯风格,下次沿用起来,非常得心应手去适配到自己现有的项目。
设计规范:
设计原理:
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
以及阿里云物联网平台连接小工具等,全面开源奉献物联网。
集成了市面上大多串口工具的功能,特性包括:
下载免安装版:https://github.com/xuhongv/PyQT5-Serial/releases
源码下载:https://github.com/xuhongv/PyQT5-Serial
esp8266
带你飞、加群QQ
群,不喜的朋友勿喷勿加:434878850