news 2026/7/4 16:30:56

树莓派串口通信配置全流程:适合小白的图文指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派串口通信配置全流程:适合小白的图文指南

让树莓派“开口说话”:手把手带你搞定串口通信

你有没有试过让树莓派和Arduino“对话”,结果却像鸡同鸭讲?
数据收不到、乱码频出、设备打不开……明明接线没错,怎么就是不通?

别急。这几乎是每个嵌入式新手都会踩的坑——串口被系统占着不放

今天,我就用最直白的方式,带你从零开始,一步步打通树莓派的“任督二脉”,让它真正能发能收、稳定通信。全程图文结合,小白也能照着做成功。


为什么你的树莓派“哑巴了”?

先说个真相:出厂的树莓派,默认是“禁音”的

它那两个关键引脚 GPIO14(TX)、GPIO15(RX)——本该用来对外通信的“嘴巴”和“耳朵”,其实早就被系统拿去当“控制台终端”用了。也就是说,Linux 启动时会通过这个串口输出日志,甚至允许你登录 shell。

这就意味着:
👉 你想用它跟传感器通信?不行!已经被占了。
👉 直接写 Python 脚本打开/dev/ttyAMA0?大概率失败或乱码。

所以第一步不是写代码,而是——把串口“抢回来”


第一步:释放串口控制权(关键!)

使用raspi-config安全配置

这是最推荐、最稳妥的方法,适合所有官方 Raspberry Pi OS 系统。

打开终端,输入:

sudo raspi-config

进入菜单后,选择:

Interface OptionsSerial Port

这时你会看到两个问题:

  1. Would you like a login shell to be accessible over serial?
    → 选No
    (禁止通过串口登录,释放控制台占用)

  2. Would you like the serial port hardware to be enabled?
    → 选Yes
    (启用硬件串口功能)

保存退出,系统提示重启。一定要重启!

✅ 这一步做完,你就已经解决了 80% 的串口通信问题。


第二步:确认你用的是“真·硬件串口”

树莓派有两个 UART:

类型名称特点
主UARTPL011 / uart0性能强、波特率稳,对应/dev/ttyAMA0
小UARTMini UART易受 CPU 频率影响,常用于蓝牙

但在某些型号(比如 Pi 3B+、Pi 4、Pi Zero W)中,蓝牙模块会抢占主 UART,导致系统自动把 mini UART 分配给 GPIO14/15,变成/dev/ttyS0—— 这可不是我们想要的!

如何判断当前用的是哪个?

重启后运行:

ls /dev/tty*

看看有没有/dev/ttyAMA0。如果没有,只有/dev/ttyS0,说明你正在用那个不靠谱的小串口。

再看内核日志:

dmesg | grep uart

输出类似这样:

[ 0.000000] Serial: AMBA PL011/mini-uart-bluetooth at fe201000 (irq = 27)

如果看到mini-uartbluetooth关键词,基本可以确定主串口被蓝牙霸占了。


强制启用主 UART:修改 config.txt

为了让 GPIO14/15 始终使用高性能的主 UART,我们需要手动干预启动配置。

编辑文件:

sudo nano /boot/config.txt

在文件末尾加上这一行:

dtoverlay=uart0

保存并重启。

💡 解释一下:uart0是设备树别名,指向 PL011 主串口。这句命令强制将主 UART 映射到 GPIO14(TX) 和 GPIO15(RX),不管蓝牙怎么折腾。

重启后再查:

ls /dev/ttyAMA0

如果显示“存在”,恭喜你,现在握有的是真正的“硬核通道”。


第三步:别忘了加权限,否则还得 sudo

即使设备节点出来了,普通用户默认没有访问权限。每次跑 Python 脚本都要sudo?太麻烦!

执行一句:

sudo usermod -aG dialout $USER

然后注销重新登录(或者重启),你的账号就加入了dialout用户组,从此可以自由操作串口设备。


第四步:动手写第一段通信代码(Python 实现)

Python +pyserial是验证串口通信最快的方式。

安装依赖库

sudo apt update sudo apt install python3-pip pip3 install pyserial

编写测试脚本

创建一个文件serial_test.py

import serial import time # 核心参数 PORT = '/dev/ttyAMA0' # 必须是 ttyAMA0 BAUDRATE = 115200 # 双方必须一致 TIMEOUT = 1 # 设置读取超时 try: ser = serial.Serial(PORT, BAUDRATE, timeout=TIMEOUT) print(f"✅ 成功连接 {PORT},波特率 {BAUDRATE}") while True: # 发送问候 msg = "Hello Arduino!\n" ser.write(msg.encode()) print("发送:", msg.strip()) # 检查是否有返回数据 if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print("收到:", data) time.sleep(2) except serial.SerialException as e: print("❌ 串口错误:", e) except KeyboardInterrupt: print("\n⏹️ 用户中断") finally: if 'ser' in locals() and ser.is_open: ser.close()

保存后运行:

python3 serial_test.py

如果你对面接的是 Arduino,并且也烧录了回传程序,你应该能看到来回对话的日志。

🔍 提示:第一次建议先做“自发自收”测试——把 TX 和 RX 用杜邦线短接,发送的数据应该能自己读回来。这是排查物理层问题的好方法。


实际怎么连硬件?一图胜千言

树莓派 Arduino ┌─────────────┐ ┌─────────────┐ │ │ │ │ GPIO14 TX ├───────┬─────┤ ├─────┬───────┤ RX D0 │ │ │ │ │ │ GPIO15 RX ├───────┘ │ ├─────┘ │ TX D1 │ │ │ │ GND ├─────────────┼───────────────┼─────────────┤ GND └─────────────┘ └─────────────┘

⚠️ 关键要点:
-交叉连接:树莓派 TX → 对方 RX;树莓派 RX ← 对方 TX
-共地:GND 必须连在一起,否则信号无参考电平
-电压安全:树莓派是 3.3V 逻辑,不能直接接 5V 设备!若需连接老款 Arduino Uno,请加电平转换模块(如 TXB0108 或 MAX3232)


常见翻车现场 & 应对秘籍

问题表现原因解决方案
找不到/dev/ttyAMA0报错“No such file”串口未启用或映射错误检查raspi-config并添加dtoverlay=uart0
收到一堆乱码数据像“񗽡”波特率不匹配双方统一设为 115200 或 9600
发得出去收不回来单向通接线反了 or RX 没接好用万用表测通断,确保 TX→RX 正确交叉
程序卡住不动read()不返回没设超时 or 缓冲区空务必设置timeout=参数
通信一阵后断掉断续工作电源不足 or 地线松动换稳压电源,检查 GND 是否牢固

进阶技巧:如何调试?这些工具很实用

1. 用minicom当串口助手

安装:

sudo apt install minicom

启动监听:

minicom -D /dev/ttyAMA0 -b 115200

你可以用它来手动发送指令、查看对方设备的原始输出,特别适合调试传感器或模块。

2. 查看串口状态

想知道串口是否正常加载?

stty -F /dev/ttyAMA0

会打印当前波特率、数据位等设置,帮你快速定位配置偏差。


实战案例:做个智能小温室监控器

想象这样一个场景:

🌱 温室里有温湿度传感器、土壤探头、CO₂检测仪,全都连在 Arduino 上。
🧠 树莓派作为“大脑”,每隔几秒问一句:“现在啥情况?”
🤖 Arduino 回复一组 JSON 数据,例如:{"temp":25,"humid":60,"soil":450}
📊 树莓派存进数据库,还能生成网页图表供你远程查看。

这就是典型的“MCU 负责采集 + SBC 负责处理”的黄金组合。

而这一切的起点,就是你现在学会的串口通信。


最后几句掏心窝的话

很多人觉得串口“简单”,但真动手时总出问题。其实根本原因不在技术多难,而在细节太多:

  • 系统占用了不知道
  • 权限没加
  • 接线反了
  • 波特率不对
  • 没共地

每一个都足以让你折腾半天。

所以我建议你按这个顺序一步步来:

  1. raspi-config关闭 shell,开启硬件
  2. 修改config.txt锁定主串口
  3. dialout组免 sudo
  4. 用环测验证通路
  5. 再联调外部设备

只要走稳这五步,就没有通不了的串口。


现在,插上你的杜邦线,打开终端,运行那行python3 serial_test.py
听到了吗?那是树莓派第一次清晰地说出:“Hello World”。

而这,只是你通往物联网世界的第一声回响。

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

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

终极AMD Ryzen性能调优:SMUDebugTool完全实战手册

终极AMD Ryzen性能调优:SMUDebugTool完全实战手册 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/7/1 18:33:33

小红书直播监控革命:一次配置永久录制

还在为频繁更新的直播间链接而烦恼?每天手动检查主播是否开播,却总是错过精彩内容?今天,我将为你介绍一套彻底解决这些痛点的智能方案,实现真正的"一次配置,永久录制"。 【免费下载链接】DouyinL…

作者头像 李华
网站建设 2026/7/1 8:23:31

抖音直播录制神器:DouyinLiveRecorder全方位实战攻略

抖音直播录制神器:DouyinLiveRecorder全方位实战攻略 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 还在为错过心仪主播的精彩直播而懊恼吗?DouyinLiveRecorder这款开源工具能帮你轻松搞…

作者头像 李华
网站建设 2026/7/3 23:02:03

AMD Ryzen调试工具终极指南:从系统瓶颈诊断到硬件深度控制

AMD Ryzen调试工具终极指南:从系统瓶颈诊断到硬件深度控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

作者头像 李华
网站建设 2026/7/3 16:39:34

音乐格式解密与跨平台播放完整方案:ncmdumpGUI深度解析

技术背景与问题界定 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 当前数字音乐版权保护机制中,网易云音乐采用的NCM格式加密技术为个人用户带来了…

作者头像 李华
网站建设 2026/7/3 21:10:02

AMD Ryzen调试工具终极实战:从入门到精通完整指南

AMD Ryzen调试工具终极实战:从入门到精通完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…

作者头像 李华