前言
本文我们来学习Python软件包pyserial的使用,硬件采用wemosD1开发板,直接烧录串口章节代码即可,本文主要编写PC端Python脚本,完成脚本和外接串口设备通讯的功能。
一、基础知识
1.pyserial简介:
pyserial模块是python和串口设备通讯的package,串口是计算机上比较通用的通讯协议,串口设备通过USB插入电脑,python通过pyserial模块就可以完成和串口设备的通讯,其主要函数说明如下:
2安装pyserial
pip3installpyserial
二、示例
1.程序
#encoding=utf-8
importserial
importthreading
importdatetime
importqueue
fromtimeimportsleep
classUart(object):
def__init__(self,port):
self.err=0
self.run_status=0
try:
self.uart=serial.Serial(port,)
self.run_status=1
print(startuartsuccess)
except:
print(startuarterror)
self.err=-1
defuart_recv_thread(self):
print(startuart_recv_thread)
whileTrue:
try:
data=self.uart.readline()
data=[uart==pc]+data.decode()
print(data)
sleep(0.05)
exceptExceptionase:
print(Error)
print(e)
defrun(self):
threading.Thread(target=self.uart_recv_thread,daemon=True).start()
defclose(self):
print(closeuart)
self.uart.close()
defuart_send_data(self,data):
print(pc==uart:,data)
self.uart.write(data.encode())
if__name__==__main__:
uart=Uart(COM13)
if(-1!=uart.err):
uart.run()
while(True):
input_data=input(Pleaseinput:\r\n)
if(quit==input_data):
uart.close()
break
else:
uart.uart_send_data(input_data)
sleep(0.1)
print(exituart)
程序中定义了一个Uart类,构造函数中实现打开串口设备功能,如果打开失败,Uart.err=-1,初始化对象后,调用Uart.run()即可开启接收线程,注意创建线程函数中daemon=True,表示设置接收线程为守护线程,当主线程退出后,该守护线程也退出,否则将成为僵尸线程一直存在。主线程中处理逻辑比较简单,当用户输入数据不是“quit”时候,直接发送给串口设备,否则关闭串口,退出主线程。
三、运行
1.硬件连接
注意wemosD1中需要编译烧录“wemosD1arduino物联网开发板应用笔记2-串口通信”章节中代码,大家也可自行编写,其实现功能是当串口收到数据后,原路返回。
2.运行python脚本
进入run.py根目录,终端(本文用VSCode下终端,也可在CMD命令窗口执行)输入python3run.py即可运行程序,界面如下:
手动输入helloworld,wemos收到数据后会立刻返回。
手动输入“quit”,退出主线程,此时守护线程也会退出。
四、结语
本节完,实际操作过程中需要注意的地方有如下几点:
(1)python相关
本文使用到了python线程、对象等内容,如果没有接触过这方面的朋友,最好看下网上相关教程,实际项目开发过程中不仅要使用串口接收线程,也要及时有效地对数据进行处理,本文是直接打印接收数据,比较好的方式是串口接收线程接收到数据后放置接收队列中,然后再做其他处理,感兴趣的朋友可自行尝试。
作者:小驿
寄语:事在人为,不去做你怎么知道行还是不行。