本文我们来学习Python软件包pyserial的使用,硬件采用wemos D1开发板,直接烧录串口章节代码即可,本文主要编写PC端Python脚本,完成脚本和外接串口设备通讯的功能。
一、基础知识
1.pyserial简介:

pyserial模块是python和串口设备通讯的package,串口是计算机上比较通用的通讯协议,串口设备通过USB插入电脑,python通过pyserial模块就可以完成和串口设备的通讯,其主要函数说明如下:
2 安装pyserial
pip3 install pyserial
二、示例
1.程序
# encoding=utf-8import serialimport threadingimport datetimeimport queuefrom time import sleepclass Uart(object): def __init__(self, port): self.err = 0 self.run_status = 0 try: self.uart = serial.Serial(port, 9600) self.run_status = 1 print("start uart success") except: print("start uart error") self.err = -1 def uart_recv_thread(self): print("start uart_recv_thread") while True: try: data = self.uart.readline() data = "[uart==>pc] " + data.decode() print(data) sleep(0.05) except Exception as e: print("Error") print(e) def run(self): threading.Thread(target=self.uart_recv_thread, daemon=True).start() def close(self): print("close uart") self.uart.close() def uart_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("Please input:\r\n") if ("quit" == input_data): uart.close() break else: uart.uart_send_data(input_data) sleep(0.1) print("exit uart")
程序中定义了一个Uart类,构造函数中实现打开串口设备功能,如果打开失败,Uart.err = -1,初始化对象后,调用Uart.run()即可开启接收线程,注意创建线程函数中daemon=True,表示设置接收线程为守护线程,当主线程退出后,该守护线程也退出,否则将成为僵尸线程一直存在。主线程中处理逻辑比较简单,当用户输入数据不是“quit”时候,直接发送给串口设备,否则关闭串口,退出主线程。
三、运行
1. 硬件连接
注意wemos D1中需要编译烧录“wemos D1 arduino物联网开发板应用笔记2-串口通信”章节中代码,其实先功能是当串口收到数据后,原路返回。
2. 运行python脚本
进入run.py根目录,终端(本文用VS Code下终端,也可在CMD命令窗口执行)输入python3 run.py即可运行程序,界面如下:
手动输入hello world,wemos收到数据后会立刻返回。
手动输入“quit”,退出主线程,此时守护线程也会退出。
四、结语
本节完,实际操作过程中需要注意的地方有如下几点:
(1) python相关
本文使用到了python线程、对象等内容,如果没有接触过这方面的朋友,最好看下网上相关教程,实际项目开发过程中不仅要使用串口接收线程,也要及时有效的对数据进行处理,本文是直接打印接收数据,比较好的方式是串口接收线程接收到数据后放置接收队列中,然后再做其他处理,感兴趣的朋友可自行尝试。
作者:小驿
寄语:事在人为,不去做你怎么知道行还是不行。