python烧录软件 python烧录单片机程序_str730fz2t6串口烧录软件


前言

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

一、基础知识

1.pyserial简介:

pyserial模块是python和串口设备通讯的package,串口是计算机上比较通用的通讯协议,串口设备通过USB插入电脑,python通过pyserial模块就可以完成和串口设备的通讯,其主要函数说明如下:


python烧录软件 python烧录单片机程序_串口_02


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:rn")
        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. 硬件连接


python烧录软件 python烧录单片机程序_主线程_03


注意wemos D1中需要编译烧录“wemos D1 arduino物联网开发板应用笔记2-串口通信”章节中代码,其实先功能是当串口收到数据后,原路返回。

2. 运行python脚本

进入run.py根目录,终端(本文用VS Code下终端,也可在CMD命令窗口执行)输入python3 run.py即可运行程序,界面如下:


python烧录软件 python烧录单片机程序_主线程_04


手动输入hello world,wemos收到数据后会立刻返回。


python烧录软件 python烧录单片机程序_主线程_05


手动输入“quit”,退出主线程,此时守护线程也会退出。


python烧录软件 python烧录单片机程序_python烧录软件_06


四、结语

本节完,实际操作过程中需要注意的地方有如下几点:

(1) python相关

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

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