news 2026/1/11 5:29:28

手把手教你完成树莓派串口通信初始设置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你完成树莓派串口通信初始设置

树莓派串口通信实战:从接线到Python收发,一文搞定

你有没有遇到过这种情况——手里的树莓派连上了GPS模块,代码也写好了,可就是收不到数据?或者和Arduino对讲半天,收到的全是乱码?

别急,问题很可能出在串口配置上。

虽然树莓派自带UART硬件,但出厂默认设置却“锁死了”这个接口:系统用它当登录控制台,蓝牙又占了主串口……新手直接操作基本必踩坑。今天我们就来彻底打通这条通信链路,让你的树莓派真正“说上话”。


为什么你的树莓派串口总是不通?

先别急着写代码,咱们得搞清楚一个关键事实:

树莓派上的/dev/ttyAMA0/dev/ttyS0不是同一个东西,性能差得远。

  • /dev/ttyAMA0是 PL011 UART,硬件级、高稳定性,支持高达921600bps以上波特率;
  • /dev/ttyS0是 mini-UART,依赖CPU核心频率,动态调频时容易失步,只适合低速通信;

而在树莓派3B+、4B这类带蓝牙的型号中,默认情况下:
- 蓝牙模块霸占了原本属于用户的PL011 UART(即/dev/ttyAMA0);
- 用户能用的只剩下一个不稳定的mini-UART(变成/dev/ttyS0);

结果就是:你明明接对了线,程序也在跑,但数据要么错乱,要么断断续续。

所以,想实现稳定可靠的树莓派串口通信,第一步不是写代码,而是把被抢走的主串口夺回来


硬件准备:接对这三根线就够了

开始前,请确认你的接线方式正确无误。

以最常见的与Arduino通信为例:

树莓派 GPIO功能Arduino 引脚
Pin 8 (GPIO14 / TXD)发送端(TX)→ 接对方RXRX
Pin 10 (GPIO15 / RXD)接收端(RX)← 接对方TXTX
Pin 6 (GND)共地GND

⚠️ 特别注意:
-交叉连接!树莓派TX → 对方RX,反之亦然;
- 必须共地,否则信号无法参考;
- 树莓派GPIO仅支持3.3V逻辑电平,严禁接入5V设备(如老款Arduino Uno),否则可能烧毁IO口!

若需连接5V系统(比如传统单片机),请务必使用双向电平转换芯片(如TXS0108E或MAX3312)进行隔离保护。


四步解锁高性能串口资源

第一步:关闭串口控制台登录

系统启动时默认通过串口输出shell登录提示,这会占用UART通道。

我们用官方工具一键关闭:

sudo raspi-config

进入菜单路径:

Interface Options → Serial Port
- Would you like a login shell accessible over serial? →No
- Do you want the serial port hardware to be enabled? →Yes

这个操作会自动完成两件事:
1. 从/boot/cmdline.txt中移除console=serial0,115200
2. 在/boot/config.txt中添加enable_uart=1

前者释放了串口控制台,后者确保UART驱动始终启用。


第二步:强制释放主UART给用户使用

打开配置文件:

sudo nano /boot/config.txt

确保包含以下两行:

enable_uart=1 dtoverlay=disable-bt

解释一下这两个参数的作用:

  • enable_uart=1:强制启用UART硬件,防止系统因节能而关闭;
  • dtoverlay=disable-bt:禁用蓝牙服务对PL011 UART的占用,让/dev/ttyAMA0回归用户手中;

📌 小贴士:如果你还想保留蓝牙功能怎么办?
可以考虑使用外部晶振+设备树定制方案(高级玩法),但对于绝大多数串口应用场景来说,直接关掉蓝牙是最简单有效的选择。


第三步:关闭蓝牙相关服务(可选但推荐)

即使禁用了蓝牙overlay,系统仍可能尝试加载蓝牙串口服务。为避免冲突,手动关闭它:

sudo systemctl disable hciuart

然后重启:

sudo reboot

第四步:验证设备节点是否就绪

重启后,检查主串口设备是否存在:

ls /dev/ttyAMA0

如果看到输出/dev/ttyAMA0,说明成功了!

再运行一次:

dmesg | grep tty

你应该能看到类似信息:

[ 0.000000] console [tty1] enabled [ 0.000000] printk: console [tty1] disabled [ 1.234567] dev:f1: ttyAMA0 mapped to IRQ0

这表明PL011 UART已正常加载且未被抢占。


Python串口通信实战:发送与接收全解析

现在硬件通了,轮到软件登场。

我们使用轻量高效的pyserial库来操控串口。

安装依赖

pip install pyserial

编写第一个串口程序

下面这段代码不仅能发数据,还能监听回应,适用于调试任何串口设备(比如Arduino、传感器、PLC等):

import serial import time # 配置参数 SERIAL_PORT = '/dev/ttyAMA0' # 主UART设备 BAUD_RATE = 115200 # 波特率(需与对方一致) TIMEOUT = 1 # 读取超时(秒) try: # 初始化串口 ser = serial.Serial( port=SERIAL_PORT, baudrate=BAUD_RATE, parity=serial.PARITY_NONE, # 无校验位 stopbits=serial.STOPBITS_ONE, # 1个停止位 bytesize=serial.EIGHTBITS, # 数据位长度 timeout=TIMEOUT # 设置read超时 ) print(f"✅ 已连接至 {SERIAL_PORT} @ {BAUD_RATE}bps") while True: # 发送消息 msg_out = "Hello from Pi!\n" ser.write(msg_out.encode('utf-8')) print(f"📤 发送: {msg_out.strip()}") # 检查是否有返回数据 if ser.in_waiting > 0: try: data = ser.readline().decode('utf-8').rstrip() print(f"📥 接收: {data}") except UnicodeDecodeError: print("⚠️ 接收到无效编码数据(可能是波特率不匹配)") time.sleep(1) except PermissionError: print("❌ 权限不足!请将用户加入 dialout 组:sudo usermod -aG dialout $USER") except serial.SerialException as e: print(f"🔧 串口异常:{e}") except KeyboardInterrupt: print("\n👋 用户中断,正在关闭...") finally: if 'ser' in locals() and ser.is_open: ser.close() print("🔌 串口已安全关闭")

🎯 关键点说明:

  • 使用in_waiting判断缓冲区是否有数据,避免阻塞;
  • 加入异常处理,防止因乱码或断开导致程序崩溃;
  • 所有字符串必须.encode()后才能发送;
  • 若提示权限错误,请执行:
    bash sudo usermod -aG dialout $USER
    并重新登录生效。

常见问题避坑指南

现象可能原因解决方法
根本打不开/dev/ttyAMA0没有权限加入dialout用户组
收到一堆乱码波特率不一致双方统一设为115200
只能发不能收TX/RX接反了交叉连接检查线路
数据时有时无使用的是/dev/ttyS0添加dtoverlay=disable-bt
串口频繁断开系统休眠或服务干扰禁用hciuart服务
接5V设备后板子异常电平不匹配必须加电平转换器

💡 进阶建议:
- 对于工业环境,建议增加光耦隔离模块防干扰;
- 多设备通信可选用USB转多串口HUB或SPI扩展芯片;
- 在生产项目中加入CRC校验、重试机制提升鲁棒性;


实际应用场景举例

想象这样一个系统:

[温湿度传感器] ↓ (串口) [Arduino Pro Mini] ↓ (串口) [树莓派] ←→ WiFi → [云平台] ↓ (存储) [本地数据库]

树莓派在这里扮演“智能网关”角色:
- 通过串口定期向MCU请求数据;
- 收集JSON格式的环境信息;
- 存入SQLite做本地缓存;
- 同时上传至阿里云IoT或MQTT服务器;

这种架构广泛应用于:
- 智能农业监控系统
- 工业设备状态采集
- 实验室数据记录仪
- 机器人主控通信中枢

而这一切的基础,正是可靠的树莓派串口通信能力。


写在最后:掌握底层,才能掌控全局

很多人觉得树莓派是个“小电脑”,插上网线就能玩AI、跑网页。但真正让它在嵌入式领域站稳脚跟的,其实是这些看似原始的接口——GPIO、I2C、SPI、UART

尤其是串口,作为最古老也最稳健的通信方式之一,在现代IoT系统中依然不可替代。

当你学会如何干预设备树、管理服务冲突、精准配置硬件资源时,你就不再只是一个“使用者”,而是一名真正的系统开发者。

下次如果你的串口又没反应,别再盲目百度“为什么读不到数据”了。停下来问自己一句:

“我有没有真正拥有/dev/ttyAMA0的控制权?”

答案往往就在其中。


💬互动时间:你在做树莓派串口项目时踩过哪些坑?欢迎在评论区分享你的经验,我们一起排雷!

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 10:31:19

5分钟学会网页数据抓取:easy-scraper快速上手完全指南

5分钟学会网页数据抓取:easy-scraper快速上手完全指南 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 你是否曾经为了从网页中提取几个简单的数据而编写复杂的正则表达式?或者为…

作者头像 李华
网站建设 2025/12/25 11:28:15

Open-AutoGLM本地运行性能优化(内存占用降低70%的3个核心技术)

第一章:开源Open-AutoGLM本地搭建概述开源Open-AutoGLM是一个面向自动化图学习任务的可扩展框架,支持图神经网络的快速构建、训练与部署。其模块化设计允许研究人员和开发者灵活集成自定义组件,适用于节点分类、链接预测和图生成等多种场景。…

作者头像 李华
网站建设 2025/12/26 6:22:07

MHY_Scanner跨平台部署重构:从传统桌面应用到现代化容器化方案

MHY_Scanner跨平台部署重构:从传统桌面应用到现代化容器化方案 【免费下载链接】MHY_Scanner 崩坏3,原神,星穹铁道的Windows平台的扫码和抢码登录器,支持从直播流抢码。 项目地址: https://gitcode.com/gh_mirrors/mh/MHY_Scann…

作者头像 李华
网站建设 2026/1/10 2:47:48

音乐格式转换神器:轻松解锁加密音频文件的终极指南

音乐格式转换神器:轻松解锁加密音频文件的终极指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://…

作者头像 李华
网站建设 2025/12/25 11:28:59

UE4SS完整安装配置指南:从新手到专家的终极教程

UE4SS完整安装配置指南:从新手到专家的终极教程 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS 想…

作者头像 李华
网站建设 2026/1/5 1:32:05

Open-AutoGLM部署避坑指南,99%新手都会犯的3个致命错误

第一章:Open-AutoGLM部署避坑指南概述在实际部署 Open-AutoGLM 过程中,开发者常因环境配置、依赖版本或模型加载方式不当导致服务启动失败或推理性能下降。本章聚焦于常见部署陷阱及其解决方案,帮助用户快速构建稳定高效的运行环境。环境准备…

作者头像 李华