网站开发哪里便宜,腾讯公司主页,南京教育网站开发,邵阳做网站1. 树莓派串口#xff0c;你真的了解吗#xff1f; 如果你刚拿到树莓派#xff0c;想用它来控制一个Arduino、读取一个GPS模块的数据#xff0c;或者和另一个单片机“说说话”#xff0c;那么串口通信几乎是你绕不开的第一道坎。我刚开始玩树莓派的时候#xff0c;也以为…1. 树莓派串口你真的了解吗如果你刚拿到树莓派想用它来控制一个Arduino、读取一个GPS模块的数据或者和另一个单片机“说说话”那么串口通信几乎是你绕不开的第一道坎。我刚开始玩树莓派的时候也以为插上几根线、写几行代码就能搞定结果被各种“/dev/ttyAMA0”、“/dev/ttyS0”搞得晕头转向配置了半天电脑那边就是收不到任何消息。后来折腾了好几天踩了无数坑才终于把树莓派的硬件串口调通。今天我就把我这十年在嵌入式开发里摸爬滚打总结的经验特别是关于树莓派4B硬件串口的配置和调试掰开了揉碎了讲给你听。保证你看完就能上手避开我当年遇到的那些“天坑”。树莓派4B作为一款功能强大的微型电脑其实内部“藏”了两个串口。这就像你家有两个电话机一个音质清晰、从不掉线硬件串口另一个时不时有点杂音信号还不太稳mini串口。那个音质好的专业名称叫硬件串口在系统里通常叫/dev/ttyAMA0。它由独立的硬件模块实现有自己专用的时钟源来产生精确的波特率所以通信速度快、稳定性极高是进行可靠数据交换的首选。另一个是mini串口叫/dev/ttyS0它的波特率是“借用”CPU的主时钟来生成的一旦CPU忙起来比如你在看视频或者处理复杂计算它的通信速率就可能飘忽不定导致数据出错所以一般只用于对可靠性要求不高的场景。但问题来了树莓派4B为了集成蓝牙功能默认把这个高性能的硬件串口/dev/ttyAMA0分配给了蓝牙模块使用。而我们通过GPIO引脚第8脚TX和第10脚RX引出来的那个串口默认其实是那个不太靠谱的mini串口。这就好比把家里最好的电话机装在了内部通讯系统上而把那个信号不好的电话机留给了你对外联系这显然不是我们做物联网开发想要的结果。我们的目标就是把那台“最好的电话机”——硬件串口抢回来给我们自己的项目用。这个过程就是所谓的“串口重映射”。2. 实战第一步释放被蓝牙“霸占”的硬件串口理论说清楚了咱们直接动手。首先你需要通过SSH或者直接接上显示器键盘登录到你的树莓派系统。我强烈建议新手使用Raspberry Pi OS原Raspbian这个官方系统兼容性最好坑最少。2.1 查看当前的串口“家庭状况”打开终端我们先来“查户口”看看串口设备现在都是什么状态。输入下面这个命令ls /dev -la | grep tty或者更直观一点ls /dev -la然后在一大堆设备文件里找到ttyAMA0和ttyS0这两行。在默认情况下你可能会看到类似这样的链接关系serial0 - ttyS0 serial1 - ttyAMA0这里有个关键点要理解serial0和serial1是逻辑名称它们像“快捷方式”一样指向实际的物理设备。serial0默认代表主串口也就是连接GPIO引脚8和10的那个口。上面的显示意味着主串口serial0指向了mini串口ttyS0而硬件串口ttyAMA0被分配给了辅助串口serial1也就是蓝牙在用。我们的任务就是要把serial0这个“快捷方式”的指向从ttyS0改成ttyAMA0。2.2 使用官方配置工具关闭串口控制台树莓派系统默认启用了串口控制台登录功能这个功能会占用串口我们必须先把它关掉。最简单的方法是使用官方的raspi-config工具。在终端输入sudo raspi-config你会看到一个蓝色的文本配置界面。用键盘上下键移动选择“3 Interface Options”接口选项回车。然后选择“P6 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我们要启用GPIO上的串口引脚功能。选择完成后它会提示你重启。先别急着重启因为我们还有关键配置没做。按Tab键切换到Finish先不重启退出。2.3 修改Boot配置完成硬件串口“抢夺”这才是最核心的一步。我们需要编辑树莓派的启动配置文件/boot/config.txt。在终端输入sudo nano /boot/config.txt用方向键滚动到文件的最末尾添加以下两行代码dtoverlaypi3-miniuart-bt force_turbo1让我解释一下这两行“咒语”是干嘛的dtoverlaypi3-miniuart-bt这行命令的作用是“交换”。它告诉系统将蓝牙模块从硬件串口ttyAMA0切换到mini串口ttyS0上从而把硬件串口解放出来。虽然名字叫pi3-但对树莓派4B同样有效。force_turbo1这行命令是为了解决一个潜在的性能问题。当蓝牙使用mini串口时这个设置可以确保CPU核心时钟不被动态调整降频从而维持mini串口波特率的稳定性避免蓝牙通信出问题。简单说就是让系统“全力运行”别偷懒。添加完成后按CtrlO保存文件再按CtrlX退出nano编辑器。现在可以重启了输入sudo reboot。重启完成后再次运行ls /dev -la命令查看。如果配置成功你会欣喜地看到serial0 - ttyAMA0 serial1 - ttyS0恭喜这意味着硬件串口ttyAMA0已经成功“夺权”成为了连接GPIO引脚的主串口serial0。你的树莓派现在拥有了一个高速稳定的硬件串口通道。3. 调试利器在树莓派上安装和使用Minicom串口配置好了我们怎么知道它真的能工作呢总不能每次都写个程序来测试吧。这时候一个叫Minicom的终端工具就派上用场了。它就像是一个在命令行里运行的“串口调试助手”可以让你直接通过串口发送和接收数据非常方便。3.1 安装Minicom安装过程非常简单一条命令搞定sudo apt update sudo apt install minicom -yapt update是更新软件源列表确保安装的是最新版本。-y参数表示对所有的确认提示都自动回答“是”。3.2 快速启动与基本通信测试安装好后我们可以直接用命令行参数启动Minicom并连接我们的硬件串口。假设我们使用最常用的9600波特率minicom -D /dev/ttyAMA0 -b 9600-D /dev/ttyAMA0指定要打开的串口设备文件就是我们千辛万苦配置好的硬件串口。-b 9600设置通信波特率为9600。这个值必须和你的通信对象比如Arduino、另一个树莓派设置得完全一致。常见的波特率还有115200、57600、19200等。如果一切正常你会看到一个空白的终端界面光标在闪烁。这时候Minicom已经打开了串口并处于接收模式。但是你可能会发现一个现象你在键盘上打字屏幕上什么都不显示别慌这不是坏了而是Minicom默认关闭了“本地回显”。你输入的字符其实已经通过串口发出去了只是没有在本地屏幕显示出来。要验证通信你需要进行双向测试。最经典的方法是使用一个USB转TTL串口模块比如CH340、CP2102芯片的。将这个模块的GND接树莓派的GND比如第6脚模块的RX接树莓派的TX第8脚模块的TX接树莓派的RX第10脚。然后把模块插到电脑上。在电脑上打开你熟悉的串口调试助手比如XCOM、SecureCRT、Putty或者前面提到的SSCOM选择对应的COM口设置同样的9600波特率。现在你在电脑的调试助手里发送字符串就能在树莓派的Minicom窗口里看到了。反过来在树莓派的Minicom里输入字符虽然不显示电脑的调试助手也能收到。这就证明你的硬件串口收发功能完全正常3.3 Minicom的进阶操作与退出老是盲打也不是办法我们可以开启本地回显。但Minicom的操作比较特殊它不是直接按CtrlC之类的而是有一个组合键前缀CtrlA。按下CtrlA后松开再按Z屏幕会显示一个帮助菜单。开启/关闭本地回显按CtrlA再按E。这是一个开关按一下开启输入字符会在屏幕显示再按一下关闭。退出Minicom这是新手最容易卡住的地方。千万不要直接关终端窗口正确的方法是先按CtrlA然后按Z调出菜单最后按X。它会问你是否要退出选择Yes并按回车就能干净地退回到命令行。注意如果你发现用sudo minicom -s进入配置模式后保存设置时提示权限错误可以尝试先以普通用户启动一次minicomminicom -D /dev/ttyAMA0正常退出后其生成的配置文件就会属于当前用户之后再配置就不会有权限问题了。4. 与电脑联调硬件连接与常见问题排坑理论配置和软件调试都过了最后一步就是真刀真枪地接上线和电脑或者其他设备实际通信了。这里面的门道和可能遇到的坑我一次性给你讲明白。4.1 硬件连接详解以USB转TTL模块为例这是最常用的连接方式。你需要准备一个USB转TTL串口模块几块钱一个和三条母对母的杜邦线。连接原则就一句话交叉连接共地。树莓派 GPIO 8 脚 (TX)-模块的 RX 针脚。数据从树莓派“发送”(TX)出去要进入模块的“接收”(RX)端。树莓派 GPIO 10 脚 (RX)-模块的 TX 针脚。数据从模块“发送”(TX)出来要进入树莓派的“接收”(RX)端。树莓派任意 GND 脚 (如6, 9, 14, 20等)-模块的 GND 针脚。这是必须的为两者提供共同的电压参考点。千万不要给树莓派从模块的5V或3.3V引脚供电树莓派有自己的电源混接电源极易烧毁设备。连接好后将USB模块插入电脑。4.2 电脑端配置与双向通信验证在Windows电脑上打开设备管理器在“端口(COM和LPT)”下你会看到新增了一个COM口比如COM3。记下这个号码。电脑端打开串口调试助手如XCOM选择对应的COM口COM3设置波特率为9600数据位8停止位1无校验位常写作9600,8,N,1。点击“打开串口”。树莓派端按照第3章的方法启动Minicomminicom -D /dev/ttyAMA0 -b 9600。如果需要按CtrlA再按E打开回显。现在开始测试电脑发树莓派收在电脑的调试助手发送区输入“Hello Pi”点击发送。树莓派的Minicom窗口应该会显示出这行字。树莓派发电脑收在树莓派的Minicom窗口中直接键盘输入“Hello PC”然后回车。虽然你可能在Minicom里看到自己输入的字如果开了回显但关键是电脑的调试助手接收区应该会收到“Hello PC”。如果双向都能成功那么恭喜你整个硬件串口通信链路已经完美打通4.3 避坑指南那些年我踩过的雷坑一波特率不匹配。这是最常见的问题。两边设备的波特率必须像镜子一样完全一致差一点都不行。9600就是9600不能一边9600一边115200。坑二端口号弄错。确保树莓派用的是/dev/ttyAMA0电脑端选择的是正确的COM口。如果电脑上插了多个串口设备务必在设备管理器中确认。坑三线接错了。TX和RX一定要交叉连接自己默念三遍TX接RXRX接TX。如果接反了数据根本发不出去。坑四权限问题。有时直接运行minicom会提示没有权限访问/dev/ttyAMA0。可以将你的用户加入dialout组sudo usermod -a -G dialout $USER然后注销重新登录生效。或者暂时用sudo minicom启动。坑五蓝牙冲突。如果你按照本文配置后发现蓝牙不能用了这是正常现象因为蓝牙被移到了性能较差的mini串口。如果你的项目必须同时使用高性能串口和蓝牙那就需要寻找更复杂的解决方案比如使用USB蓝牙适配器。对于大多数物联网设备开发串口的优先级通常更高。走完这一整套流程从理解串口概念、修改系统配置、安装调试工具到最终硬件联调成功你对树莓派串口的掌握就已经超越了绝大多数初学者。这套方法不仅适用于4B对于树莓派3B等型号也基本通用。接下来你就可以放心地用Python的pyserial库或者C语言的wiringPi库去编写你自己的串口通信程序让树莓派和各种传感器、执行器、控制器畅快地对话了。