前言

完全没碰过编程、没装过 Python 的同学,跟着本文一步走,不用提前懂任何 C / 计算机基础,全程实操上手,看完就能写出可运行代码。

第 0 步:先确认你的电脑能跑 Python(Windows)

操作流程

  1. 快捷键 Win + R,输入 cmd 回车,打开命令终端
  2. 在黑框里输入校验命令:
py -3 --version
  • 两种结果处理:
  • ✅ 正常:输出 Python 3.x.x,代表环境就绪,直接下一步
  • ❌ 未安装:浏览器打开 python.org 下载安装包

安装必勾选Add Python to PATH,不勾选会导致终端识别不到 python 命令

第 1 步:搞懂 Python 到底是什么

Python 属于解释型语言,和 C 语言最大区别:不用提前编译,写完代码直接运行。

最简演示示例

  1. 桌面新建文本文档,重命名为 test.py(注意后缀是 .py,不是 .txt
  2. 文件内写入一行代码:
print("hello")
  • cmd 终端切换到文件所在文件夹,执行运行命令:
py -3 test.py
  • 终端直接输出结果:
hello

第 2 步:一张表看懂 Python 和 C 语言六大核心区别

        如果你之前接触过 C 语言,这张表能快速帮你转换思维;零基础同学简单浏览有印象即可,不用死记硬背。

概念 C 语言写法 Python 写法 直观感受
变量 int a = 10;必须提前声明数据类型 a = 10无需声明,直接赋值 Python 代码更懒、更省事
代码块 {} 大括号包裹代码段 4 个空格缩进划分代码块 缩进错一个空格,程序直接报错
数组 int arr[5];创建时固定长度,不能变长 arr = [1,2,3,4,5]随时增删元素,长度自由变化 Python 数据容器更灵活
函数 int f(int x){ return x*2; } def f(x): return x*2 Python 定义函数极简
循环 for(int i=0;i<10;i++) for i in range(10):range(10) 等价数字 0~9 不用手动控制自增,简洁易懂
打印输出 printf("%d\n", a); print(a) 一行搞定打印,不用复杂格式化

第 3 步:你的第一个完整交互式 Python 程序

新建文件 day5.py,复制下方全部代码,包含注释讲解:

# # 号开头是单行注释,程序运行时会自动忽略
# input() 功能:从键盘读取用户输入的文字
name = input("你叫什么名字?")
# print() 功能:把内容打印输出到终端屏幕
print("你好," + name + "!")

运行 & 效果

  • cmd 终端执行:
py -3 day5.py
  • 终端提示输入名字,输入后回车,示例交互:
你叫什么名字?謓泽
你好,謓泽!

第 4 步:用 pip 安装第三方功能库(拓展 Python 能力)

Python 自带基础功能有限,串口、绘图、数学计算、仪器控制都需要第三方库,安装工具 pip 随 Python 自带。

通用安装命令模板

py -3 -m pip install 库名

工程常用库实操安装示例

# 串口通信库,对接单片机、MCU硬件
py -3 -m pip install pyserial

# 仪器控制库,程控电源、示波器、网口仪器
py -3 -m pip install pyvisa

# 绘图可视化库,绘制波形、数据图表
py -3 -m pip install matplotlib

# 数值计算库,矩阵、信号、数学运算
py -3 -m pip install numpy

库使用规则

安装完成后,代码开头用 import 导入库才能调用功能,import 作用等价 C 语言里的 #include

# 示例:导入数值计算库 numpy
import numpy

结尾:入门学习路线小结

  1. 环境校验:py -3 --version 确认 Python 正常
  2. 基础语法:变量、print、input、缩进、循环
  3. 第三方拓展:pip 安装工具库,适配硬件、绘图、算法场景
  4. 实操优先:每段代码复制运行,直观看到输出效果,比死记理论更快上手!

单独章节:pyserial 串口通信(单片机 / 硬件必备)

1. 库安装命令

打开 cmd 终端执行:

py -3 -m pip install pyserial

给 Python 增加串口读写能力,用来 STM32、51、Arduino 等 MCU 单片机、串口模块交互。

2. 完整可运行代码

# 导入串口库,等价C语言 #include 头文件
import serial

# 1. 初始化串口对象
# 参数说明:
# "COM3":设备管理器里你的串口编号,设备不同数字不一样
# 9600:波特率,必须和单片机程序波特率完全一致
# timeout=1:读取超时1秒,无数据就不再阻塞等待
ser = serial.Serial("COM3", 9600, timeout=1)

# 2. 向单片机发送字符串
# 字符串前面加 b 代表转为字节流,串口只认二进制字节
# \r\n 是串口常用换行结束符,匹配单片机串口接收判断
ser.write(b"hello mcu\r\n")

# 3. 读取单片机发回来的一行数据(读到换行就停止)
recv_data = ser.readline()

# 4. 字节转utf-8字符串并打印到终端
print("串口收到:", recv_data.decode("utf-8"))

# 5. 程序结束必须关闭串口,否则下次打开会报错占用
ser.close()

3. 逐行代码详细讲解

  1. import serial 引入串口驱动库,不写这行无法调用串口相关函数,和 C 语言引入头文件逻辑一样。

  2. ser = serial.Serial("COM3", 9600, timeout=1) 创建串口实例 ser,三个核心参数:

  • 串口号:电脑设备管理器 → 端口 (COM 和 LPT) 查看,比如 COM4、COM5
  • 波特率:9600/115200 等,必须和单片机代码配置一模一样,否则乱码
  • timeout:超时时间,单位秒;设为 1 代表 1 秒没读到数据直接返回空,不会卡死程序
  1. ser.write(b"hello mcu\r\n") 串口发送函数:
  • 串口底层只传输字节,普通字符串要加前缀 b 转成字节数据
  • \r\n 回车换行,大部分单片机串口程序以换行作为一帧数据结束标记
  1. recv_data = ser.readline() 按行读取串口数据,只要收到 \n 就停止读取,返回收到的全部字节;超时无数据返回空字节。

  2. recv_data.decode("utf-8") 串口返回的是二进制字节,decode("utf-8") 将字节转换成我们能看懂的中文 / 英文文本。

  3. ser.close() 关闭串口释放资源,忘记关闭会出现「串口被占用,无法打开」报错,每次程序结束都要执行。

4. 常见踩坑解决(硬件新手必看)

  1. 报错 FileNotFoundError: [Errno 2] could not open port COM3 解决:串口号写错,去电脑设备管理器确认真实 COM 编号;检查 USB 转串口驱动是否装好。

  2. 收到全是乱码 解决:Python 代码波特率、单片机波特率不一致;单片机编码不是 UTF-8,可换成 .decode("gbk") 尝试。

  3. 运行一次后再运行报串口占用 解决:代码末尾加 ser.close();关闭其他串口助手、单片机下载软件。

  4. 收不到任何返回数据 解决:硬件 TX/RX 交叉接线(单片机 TX 接 USB 模块 RX,单片机 RX 接 USB 模块 TX);确认单片机收到指令后有返回数据逻辑。

5. 运行演示效果

单片机收到 hello mcu 后回复 I'm MCU,终端输出:

串口收到: I'm MCU

拓展:循环持续接收数据(硬件调试专用 + 逐行注释讲解)

# 导入串口通信库,用于读写硬件串口
import serial
# 导入时间库,用于循环延时,降低CPU占用
import time

# 初始化串口对象:串口号COM3、波特率9600、读取超时0.5秒
ser = serial.Serial("COM3", 9600, timeout=0.5)
print("串口已打开,持续接收数据,按Ctrl+C停止")

# try-except异常捕获:处理用户按下Ctrl+C强制停止程序的场景
try:
    # while True 无限循环,持续监听串口
    while True:
        # readline() 读取串口一行数据,读到换行符\n返回;超时无数据返回空字节
        data = ser.readline()
        # 判断:如果data不为空,代表读到了单片机发送的数据
        if data:
            # decode("utf-8"):二进制字节转可读字符串
            # .strip():自动删掉首尾换行、空格、回车,打印更整洁
            print("收到:", data.decode("utf-8").strip())
        # 延时0.1秒,避免死循环疯狂占用电脑CPU资源
        time.sleep(0.1)

# 捕获 KeyboardInterrupt 异常:用户在终端按下 Ctrl+C 终止程序时触发
except KeyboardInterrupt:
    # 关闭串口,释放硬件资源,防止串口被占用、下次打不开
    ser.close()
    print("串口已关闭,程序退出")

逐行分段详细说明

1. 头文件导入

import serial
import time
  • import serial:串口操作核心库,没有它无法和 USB 转串口、单片机通信
  • import time:提供sleep()延时函数,缓解无限循环对 CPU 的消耗

2. 串口初始化

ser = serial.Serial("COM3", 9600, timeout=0.5)
print("串口已打开,持续接收数据,按Ctrl+C停止")
  • "COM3":你的 USB 串口设备编号,设备管理器里查看,需要按需修改
  • 9600:波特率,必须和单片机代码波特率完全一致,否则乱码
  • timeout=0.5:读取超时 0.5 秒,超过 0.5 秒没收到数据直接返回空,程序不会卡死

3. try 异常保护块

try:
    while True:
  • try:把主循环放进异常捕获区,作用是优雅退出
  • while True:无限循环,实现持续监听串口数据流,不用每次运行一次代码

4. 串口读取 + 打印逻辑

data = ser.readline()
if data:
    print("收到:", data.decode("utf-8").strip())
time.sleep(0.1)
  1. ser.readline()一行读取b串口数据,遇到\n换行符就结束本次读取;0.5 秒没数据返回空字节'b'
  2. if data: 只有真正读到数据时才打印,避免不停输出空行
  3. data.decode("utf-8") 串口底层传输二进制字节,这行把字节转换成中文 / 英文可读文本
  4. .strip() 自动清除字符串前后的\r\n、空格,打印结果干净整洁,不会出现多余空行
  5. time.sleep(0.1) 每次循环停顿 0.1 秒,降低循环频率,防止程序满载占用 CPU

5. except 退出处理(重点!硬件调试必加)

except KeyboardInterrupt:
    ser.close()
    print("串口已关闭,程序退出")
  • KeyboardInterrupt:专属捕获用户按下 Ctrl + C 停止程序的异常
  • ser.close():强制关闭串口释放硬件端口 不写这行的坑:直接关终端终止程序,串口会被系统锁住,下次运行代码会报「串口被占用,无法打开」
  • 最后打印提示文字,告知用户串口正常关闭

使用场景说明

  1. 适合单片机持续上报数据:温湿度、电压、传感器数值实时打印
  2. 替代串口助手,用 Python 做自动化数据采集,后续可以扩展:把数据保存到文件、绘图
  3. 支持随时快捷键退出,不会卡死串口,硬件调试非常稳定

运行效果示例

单片机循环发送 temp:25.5temp:25.6,终端输出:

串口已打开,持续接收数据,按Ctrl+C停止
收到: temp:25.5
收到: temp:25.6
收到: temp:25.4
# 按下 Ctrl+C 后输出
串口已关闭,程序退出

常见修改点

  1. 改串口号:"COM3""COM4"(设备管理器查看)
  2. 改波特率:9600115200(和单片机程序匹配)
  3. 加快响应速度:time.sleep(0.1)time.sleep(0.05)
  4. 中文乱码:decode("utf-8")decode("gbk")
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐