python3脚本篇1串口通讯脚本

前言

本文我们来学习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线程、对象等内容,如果没有接触过这方面的朋友,最好看下网上相关教程,实际项目开发过程中不仅要使用串口接收线程,也要及时有效地对数据进行处理,本文是直接打印接收数据,比较好的方式是串口接收线程接收到数据后放置接收队列中,然后再做其他处理,感兴趣的朋友可自行尝试。

作者:小驿

寄语:事在人为,不去做你怎么知道行还是不行。




转载请注明:http://www.aierlanlan.com/rzfs/3406.html