当前位置: 首页 > news >正文

树莓派串口通信TX/RX引脚连接方法:实战案例解析

树莓派串口通信实战指南:从TX/RX接线到Arduino数据交互

你有没有遇到过这样的情况——树莓派和Arduino明明连好了线,代码也烧上了,可就是收不到数据?或者更糟,一通电树莓派就死机了?

别急,这大概率不是硬件坏了,而是串口接错了

在嵌入式开发中,UART 是最基础、最常用的通信方式之一。而树莓派作为边缘计算的“万金油”,常被用来做数据聚合中心,与各类传感器、控制器通过串口打交道。但很多初学者甚至有经验的开发者,都会在TX 和 RX 到底怎么接这个问题上栽跟头。

今天我们就来彻底讲清楚:树莓派串口通信的核心逻辑、正确连接方法、系统配置要点,以及一个完整的与 Arduino 通信实战案例。让你从此告别“收不到数据”的尴尬。


为什么你的串口总是不通?先搞懂 UART 的本质

我们常说“串口通信”,其实指的是 UART(Universal Asynchronous Receiver/Transmitter),即通用异步收发器。它不需要时钟线,靠双方约定好波特率来同步数据,结构简单、成本低,非常适合点对点通信。

它的核心只有三根线:

  • TX(发送):我把话说出去
  • RX(接收):我听你说什么
  • GND(地线):咱俩得站在同一个“地”上说话,否则电压参考不一样,听到的就是乱码

关键来了:

你的 TX 必须接到对方的 RX,你的 RX 接到对方的 TX —— 要交叉!

这就像两个人打电话:
- A 对着话筒说(TX),B 用听筒听(RX)
- B 回复时,他是说(TX),A 来听(RX)

如果两人的话筒都对着话筒,谁也听不见。

所以记住一句话:
“我说你听,你说我听” —— 发送对接收,接收对发送。


树莓派上的串口长什么样?GPIO14 和 GPIO15 到底是谁?

树莓派的串口信号是通过 GPIO 引脚暴露出来的。以最常见的树莓派 4B为例:

功能GPIO 编号物理引脚
TXD(发送)GPIO14引脚 8
RXD(接收)GPIO15引脚 10
GND(地)-引脚 6 或其他 GND

📌重点提醒
- 树莓派使用的是3.3V TTL 电平
- 很多 Arduino 板(如 UNO)是5V 逻辑电平
- 如果直接把 5V 的 TX 接到树莓派的 RX 上,可能烧毁 GPIO!

🔧 解决方案:
- 使用电平转换模块(如 TXS0108E)
- 或选用原生支持 3.3V 的微控制器(如 ESP32、STM32)
- 或使用 USB-TTL 模块隔离通信


实战第一步:让树莓派的串口真正可用

你以为插上线就能用?错!

从 Raspberry Pi OS Bullseye 开始,默认情况下串口是关闭的,因为它被用于系统调试输出(console)。我们必须手动启用它。

方法一:图形化操作(推荐新手)

运行:

sudo raspi-config

进入菜单路径:

Interface Options → Serial Port

然后选择:
-Would you like a login shell to be accessible over serial?No
-Would you like the serial port hardware to be enabled?Yes

保存退出并重启。

方法二:手动修改配置(适合自动化部署)

编辑启动配置文件:

sudo nano /boot/firmware/cmdline.txt

删除其中类似console=serial0,115200的字段(如果有)。

然后打开设备树配置:

sudo nano /boot/config.txt

确保包含这一行:

enable_uart=1

重启生效:

sudo reboot

验证串口是否就绪

重启后执行:

ls /dev | grep serial

你应该看到:

serial0

这个/dev/serial0是系统自动映射的主串口设备节点,无论底层是 PL011 还是 mini UART,都可以优先使用它进行编程。


写代码之前,先测试物理连接是否正常

别急着写 Python 脚本。先做个简单的测试,确认硬件没问题。

在树莓派终端输入:

cat /dev/serial0

然后让 Arduino 发送一些数据(比如串口打印"Hello")。如果你能看到输出,说明接收通路 OK。

反过来,如果你想测试树莓派能否发送数据给 Arduino,可以用:

echo "Test Message" > /dev/serial0

并在 Arduino 端用Serial.readString()捕获内容。

这种“原始测试法”能快速定位问题是出在硬件连接、电平匹配还是软件逻辑。


完整案例:树莓派读取 Arduino 上传的温湿度数据

我们来做一个典型应用场景:
Arduino 接 DHT11 温湿度传感器,每 2 秒采集一次数据并通过串口发送;
树莓派监听串口,接收并解析数据,后续可用于本地显示或上传云平台。

硬件连接图(再次强调!)

树莓派 Arduino UNO ------------------------------------- GPIO14 (TX) ──┐ ├── 不接! GPIO15 (RX) ←─┼── D0 (RX) ← 错! │ └── D1 (TX) ← 正确! → 正确接法如下: 树莓派 GPIO14 (TX) ──────────────┐ │ 树莓派 GPIO15 (RX) ←─────────────┤ Arduino 数字引脚 1 (TX) │ 树莓派 GND ──────────────┴─ Arduino GND

⚠️ 注意:Arduino UNO 默认 Serial 使用的是D0(RX) 和 D1(TX),所以你要把树莓派的 RX 接到 Arduino 的 D1!

Arduino 端代码(发送端)

#include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // 波特率必须和树莓派一致 dht.begin(); } void loop() { float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); if (isfinite(humidity) && isfinite(temperature)) { Serial.print("TEMP:"); Serial.print(temperature); Serial.print(",HUM:"); Serial.println(humidity); } else { Serial.println("ERROR: Sensor read failed"); } delay(2000); }

这段代码会每隔两秒发送一行格式化的字符串,例如:

TEMP:24.0,HUM:56

树莓派端 Python 脚本(接收端)

我们需要一个稳定的串口监听程序。这里使用pyserial库。

安装依赖:

pip install pyserial

Python 接收脚本:

import serial import time # 初始化串口 ser = serial.Serial( port='/dev/serial0', # 树莓派主串口 baudrate=9600, # 必须与Arduino一致 parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 # 设置读超时,避免阻塞 ) print("等待串口数据...") try: while True: if ser.in_waiting > 0: # 读取一行并解码 line = ser.readline().decode('utf-8').strip() print(f"收到: {line}") # 简单解析 TEMP:xx,HUM:yy if line.startswith("TEMP:"): try: parts = line.replace("TEMP:", "").split(",HUM:") temp = float(parts[0]) humi = float(parts[1]) print(f"✅ 解析成功 -> 温度: {temp}°C, 湿度: {humi}%") except Exception as e: print(f"❌ 解析失败: {e}") time.sleep(0.1) except KeyboardInterrupt: print("\n程序已退出") finally: ser.close()

运行效果示例:

等待串口数据... 收到: TEMP:24.0,HUM:56 ✅ 解析成功 -> 温度: 24.0°C, 湿度: 56% 收到: TEMP:24.2,HUM:57 ✅ 解析成功 -> 温度: 24.2°C, 湿度: 57%

常见坑点与避坑秘籍

❌ 坑1:接反 TX 和 RX

现象:完全收不到数据
原因:两个设备都在“自言自语”
✅ 解法:严格按照“我说你听”原则交叉连接

❌ 坑2:没接 GND

现象:偶尔收到乱码、数据跳变
原因:没有共地,电平参考不一致
✅ 解法:务必连接 GND,最好用短粗导线

❌ 坑3:5V 直连 3.3V

现象:树莓派重启、GPIO 失效甚至永久损坏
原因:GPIO 最高耐压约 4V,5V 输入超出安全范围
✅ 解法:加电平转换芯片或改用 3.3V 系统

❌ 坑4:波特率不一致

现象:收到一堆乱码(如 )
原因:发送和接收速率不同步
✅ 解法:两端统一设置为 9600、115200 等标准值

❌ 坑5:串口未启用

现象:/dev/serial0不存在或无法打开
原因:系统仍占用串口用于控制台
✅ 解法:用raspi-config正确配置,或手动修改配置文件


更进一步:如何提升串口通信的可靠性?

当你从“能通”迈向“稳定通”,就需要考虑更多工程细节。

✅ 添加帧头与校验机制

原始文本传输容易误解析。可以改进协议格式:

$DATA,TEMP=25.0,HUM=60*FF\n

其中$为帧头,*FF为校验和,\n为结束符。

Python 中可通过查找$\n来提取完整帧,再验证校验位,大幅提升鲁棒性。

✅ 使用 FIFO 缓冲区防丢包

高速通信时建议启用更大的缓冲区,或使用带 FIFO 的 USB-TTL 模块(如 FT232RL)。

✅ 多设备通信?试试 Modbus RTU

若需连接多个设备(如多个传感器节点),可采用Modbus RTU 协议,通过地址轮询实现一主多从架构。

✅ 备用方案:USB 转 TTL 模块

当原生串口已被蓝牙或调试占用,可用 CP2102、CH340 等 USB-TTL 模块扩展串口,设备路径通常为/dev/ttyUSB0


总结:四个必须牢记的原则

要让树莓派串口通信稳定可靠,只需坚持以下四条铁律:

  1. 交叉连接:树莓派 TX → 对方 RX,树莓派 RX ← 对方 TX
  2. 共地连接:GND 必须相连,形成共同电位基准
  3. 电平匹配:3.3V vs 5V?一定要加电平转换保护树莓派
  4. 配置正确:启用硬件串口,禁用控制台,使用/dev/serial0

只要这四点都做到位,99% 的串口问题都能迎刃而解。


现在你已经掌握了树莓派串口通信的全链路知识:从物理接线、系统配置、代码实现到排错技巧。无论是接 GPS、指纹模块、LoRa 收发器,还是构建工业网关,这套方法都通用。

下次再有人说“我接了线为啥没反应”,你可以自信地问他一句:
“你是不是把 TX 接到 TX 了?”

欢迎在评论区分享你的串口踩坑经历,我们一起避坑前行。

http://www.jsqmd.com/news/190385/

相关文章:

  • FinBERT实战手册:5大创新应用场景深度解析
  • 5分钟精通WindowResizer:彻底告别窗口尺寸烦恼
  • 避免踩坑!首次运行IndexTTS2自动下载模型注意事项全解析
  • Tsukimi播放器:重新定义你的私人影院体验
  • 如何快速优化网络访问:免费DNS加速工具完整指南
  • Perseus脚本补丁:3步轻松解锁碧蓝航线全皮肤功能
  • SteamHostSync:告别网络卡顿的智能DNS加速神器
  • 魔兽世界API工具完整指南:从宏命令创建到插件开发的终极教程
  • huggingface镜像网站更新日志跟踪:保障模型兼容性
  • ChromeDriver自动化脚本编写:测试IndexTTS2界面稳定性
  • 如何在Arduino IDE中正确设置ESP32 Flash大小:深度剖析
  • 全面讲解Arduino蜂鸣器音乐代码结构组成
  • 树莓派pico驱动OLED显示家居状态操作指南
  • 浏览器视频下载扩展终极方案:离线保存完整指南
  • 树莓派pico启动SRAM配置方法:零基础指南
  • 仿写文章Prompt:Windows离线注册管理神器深度指南
  • 从安装到卸载:Visual C++运行库一站式解决方案完全指南
  • 5个超实用窗口管理技巧:Window Resizer终极指南
  • USB协议D+与D-上拉电阻配置手把手教程
  • 终极方案:macOS完美适配Xbox游戏手柄实战指南
  • Edge浏览器终极优化指南:快速免费打造纯净上网体验
  • Venera漫画阅读器终极指南:打造你的专属二次元收藏库
  • Tsukimi播放器:我的私人影院体验全记录
  • Three.js可视化+IndexTTS2语音输出,打造沉浸式交互应用
  • 终极指南:使用OfflineInsiderEnroll轻松退出Windows预览计划
  • 告别机械音!IndexTTS2通过情感建模实现拟人化发音
  • Typora官网大纲视图:配合IndexTTS2逐段生成语音内容
  • BlenderGIS等高线自动生成:5分钟快速制作专业地形图
  • 3D打印螺纹配置终极指南:告别装配烦恼
  • 国家税务总局中文点选验证码识别