python发串口命令(python3脚本篇1-串口通讯脚本)
python发串口命令(python3脚本篇1-串口通讯脚本)# encoding=utf-8 import serial import threading import datetime import queue from time import sleep class 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
前言
本文我们来学习python软件包pySerial的使用,硬件采用wemos D1开发板,直接烧录串口章节代码即可,本文主要编写PC端Python脚本,完成脚本和外接串口设备通讯的功能。
一、基础知识
1.pyserial简介:
pyserial模块是python和串口设备通讯的package,串口是计算机上比较通用的通讯协议,串口设备通过USB插入电脑,python通过pyserial模块就可以完成和串口设备的通讯,其主要函数说明如下:
2 安装pyserial
pip3 install pyserial
二、示例
1.程序
# encoding=utf-8
import serial
import threading
import datetime
import queue
from time import sleep
class 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线程、对象等内容,如果没有接触过这方面的朋友,最好看下网上相关教程,实际项目开发过程中不仅要使用串口接收线程,也要及时有效的对数据进行处理,本文是直接打印接收数据,比较好的方式是串口接收线程接收到数据后放置接收队列中,然后再做其他处理,感兴趣的朋友可自行尝试。
作者:小驿
寄语:事在人为,不去做你怎么知道行还是不行。