1、项目全景与硬件基础:自动化测试系统架构、树莓派/香橙派GPIO引脚图、UART串口通信原理、电平转换逻辑

各位同学,欢迎来到《Python GPIO与UART串口硬件自动化控制项目实战》的第一章。

做硬件自动化测试,说白了就是让机器替人干活。你想想看,一个产品要测几百个上下电循环、几千条串口指令,靠人工按按钮、看日志,不现实。我早年在一个消费电子厂做过产线测试,那时候还是工人拿示波器点焊盘,一天下来眼睛都花了。后来我们用树莓派搭了一套自动化脚本,把测试时间从半小时压缩到三分钟——嗯,这就是咱们这门课要干的事。

1.1 自动化测试系统架构概览

一个典型的硬件自动化测试系统,通常包含三层结构。我习惯把它画成下面这张图,方便理解。

自动化测试系统三层架构 自动化测试系统三层架构 控制层 上位机(PC / 工控机) 执行层 树莓派 / 香橙派(GPIO + UART) 被测层 待测设备(DUT:传感器、模块、整机) 说明:控制层下发指令 → 执行层解析并驱动GPIO/UART → 被测层响应并回传结果 Python脚本运行在执行层,实现自动化闭环

这张图里,执行层是咱们的核心战场。树莓派或香橙派跑着Python脚本,通过GPIO控制电源通断、通过UART收发数据。我个人的习惯是,把执行层和被测层之间的连接做成可插拔的端子排,方便换测不同产品。

关键点:自动化测试不是让代码跑起来就行,而是要稳定、可重复。我曾经见过一个项目,GPIO没加电平转换直接怼到3.3V的MCU上,烧了三块板子才找到原因。所以,硬件基础必须扎实。

1.2 树莓派与香橙派GPIO引脚图

做GPIO控制,第一件事就是看引脚图。树莓派和香橙派的引脚定义不完全一样,但核心逻辑相通。我整理了一个对比表,方便你快速对照。

功能 树莓派 4B (BCM编号) 香橙派 Zero 2 (WiringOP编号) 备注
物理引脚 3 GPIO 2 (SDA) GPIO 12 I2C数据线
物理引脚 5 GPIO 3 (SCL) GPIO 11 I2C时钟线
物理引脚 8 GPIO 14 (TXD) GPIO 6 UART发送
物理引脚 10 GPIO 15 (RXD) GPIO 7 UART接收
物理引脚 11 GPIO 17 GPIO 1 通用IO
物理引脚 12 GPIO 18 GPIO 2 PWM可用
物理引脚 13 GPIO 27 GPIO 3 通用IO
物理引脚 16 GPIO 23 GPIO 4 通用IO

你可能会问,为什么同一个物理引脚,不同板子的编号不一样?说白了,这是芯片厂商的GPIO控制器设计不同。树莓派用BCM(Broadcom)编号,香橙派用WiringOP编号。我建议你写代码时统一用物理引脚号,这样换板子时改动最小。

个人经验:拿到新板子,第一件事不是写代码,而是用万用表量一下引脚电压。我曾经遇到过一块香橙派的GPIO输出高电平只有2.8V,差点以为是坏了,后来发现是板子供电不足。先测硬件,再调软件,能省一半的调试时间。

1.3 UART串口通信原理

UART,全称是Universal Asynchronous Receiver/Transmitter。说白了,就是一根线发、一根线收,不需要时钟线,靠约定好的波特率来同步。

它的工作流程其实很简单:

  1. 空闲状态:TX线保持高电平。
  2. 起始位:TX线拉低一个位时间,告诉对方“我要开始发了”。
  3. 数据位:通常5到8位,低位在前。比如发0x55(二进制01010101),线路上就是10101010(注意顺序)。
  4. 校验位(可选):奇校验或偶校验,用来检错。
  5. 停止位:TX线拉高1位或2位,表示这一帧结束。

我刚开始做串口调试时,总搞不清为什么发0x55收到的是0xAA。后来才意识到,UART是低位先发,示波器上看到的波形顺序和字节顺序是反的。嗯,这个坑我踩过,你们记住就行。

注意事项:UART通信双方必须设置相同的波特率、数据位、停止位和校验方式。哪怕波特率只差1%,长时间通信也会丢数据。我建议用115200或9600,这两个最常用,也最稳定。

1.4 电平转换逻辑

这是硬件自动化里最容易出问题的地方。树莓派和香橙派的GPIO/UART都是3.3V逻辑电平,但很多被测设备是5V的,比如老款的Arduino、某些工业传感器。直接连接,轻则通信异常,重则烧毁引脚。

电平转换的常见方案,我列了个表:

方案 原理 适用场景 成本
电阻分压 用两个电阻(如1kΩ+2kΩ)将5V分压到3.3V 单向信号,低速(<100kHz) 极低
MOSFET双向电平转换 用N沟道MOSFET(如BSS138)实现双向转换 双向信号,I2C/UART通用 低
专用电平转换芯片 如TXS0108E、PCA9306 多通道、高速、高可靠性 中等
光耦隔离 用光耦(如6N137)实现电气隔离 强干扰环境、需要隔离的场景 较高

我个人最常用的是MOSFET方案,一个BSS138加两个10kΩ上拉电阻,就能搞定一路双向电平转换。电路简单,成本不到五毛钱,而且支持到几MHz的速率,UART完全够用。

避坑指南:我曾经在一个项目中,用电阻分压给UART做电平转换。结果波特率一上115200,数据就开始乱码。后来换成MOSFET方案,问题立刻解决。为什么?电阻分压的驱动能力弱,高速时波形畸变严重。所以,UART通信我建议至少用MOSFET方案,别省那几毛钱。