树莓派系列(一)-——————树莓派usb串口的使用

本文档介绍了如何使用CH340 USB串口解决树莓派与单片机通信问题。通过连接CH340模块,利用lsusb和ls-l/dev/tty*命令检查设备连接,并通过stty设置波特率。在Python中使用pyserial库实现串口通信,确保数据正确传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:笔者对于树莓派是一个新人,主要是用来进行opencv的图像识别,因此,笔者的文章可能有许多错误,但笔者会把自己能用的都写出来。

笔者之前用的一直是树莓派3B+的自带TXRX串口,也着实出现了不少问题,比如和单片机进行通信的时候要不就是发一些乱码,要不就是不能通信,能连接上并正常通信的几率很低,这样虽然能通信,但你并不保险,尤其是树莓派开机的时候,那个串口还会发送一堆奇怪的东西。
在和学长(某大佬)说了我们的困扰之后,学长当即指出他们用的一直是usb串口,用一个ch340连着,这样数据就不会有错误。我们试了一下,效果奇佳,因而写这篇文档来记录一下。(注:有些图片来源于fhqlongteng的csdn博客)

我们ch340选用的是市面上十分普遍的一款,这样式的:

连接上我们的树莓派之后,在命令行输入
lsusb
即可出现所有的串口,看自己的设备是否连接上ch340,有的话就会显示;
接着输入ls -l /dev/tty*
形如

这里可以看到自己的ch340模块被识别成什么,可能是0,也可能是1;
接着,输入stty -F /dev/ttyUSB1(若识别为0则写0)
即可看到目前USB串口的波特率。

到这里,如果都可以用,说明USB串口可以正常使用,接着就是怎么应用。由于作者一直用的是python,下面具体写python的应用方法,用C++的话应该也不难。
python首先要有一个serial的包,在命令行输入pip list即可看到具体的包是否安装(一般来说树莓派默认安装了python3.5.3和pyserial)

像这样,版本可能更高一些,如果没有的话安装一下就好。
下面,在树莓派中有两个python,Linux系统自带的python2和树莓派已经安装好的python3,笔者这里用python3来写,即在ide中写,代码为:

import serial
ser=serial.Serial('/dev/ttyUSB0',9600)#如果是1就写1
ser.write('12345'.encode())#这里发的时候要有encode(),不然系统会报错格式不对

其他serial库的使用方法自行了解即可。

### 树莓派通过USB串口进行通信 #### 配置树莓派USB转UART接口 为了使树莓派能够通过USB串口与其他设备通信,需要先确认并设置好相应的硬件连接以及软件配置。 对于基于Ubuntu系统的树莓派4B,在默认情况下,系统会自动识别大多数标准的USB-to-UART适配器,并将其映射到`/dev/ttyUSB*`这样的文件路径下[^2]。这意味着当插入兼容的USB转UART模块时,无需额外安装驱动程序即可实现基本的数据传输功能。 #### 修改内核参数禁用串口登录服务 由于某些版本的操作系统可能会占用这些端口用于调试或其他目的(比如启动过程中的console输出),因此建议编辑`cmdline.txt`来移除对特定TTY设备的支持: ```bash sudo nano /boot/cmdline.txt ``` 找到其中包含`console=serial0,115200`的部分并将之删除或注释掉保存退出后再重启机器以生效更改。 #### 安装必要的库和支持工具 确保已经安装了Python包管理工具pip以及其他可能需要用到的相关依赖项之后,可以继续安装pySerial——这是个非常流行的用来处理串行通讯任务的第三方扩展库: ```bash sudo apt-get update && sudo apt-get install python3-pip -y pip3 install pyserial ``` #### 编写简单的测试脚本验证连通性 下面给出了段简单的小例子展示怎样利用Python读取来自指定串口号的信息并向其发送命令字符串: ```python import serial ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, timeout=1) try: while True: line = ser.readline().decode('utf-8').strip() if not line: continue print(f"Received from Arduino: {line}") except KeyboardInterrupt as e: pass finally: ser.close() # 发送消息给Arduino message_to_send = b'Hello World\n' ser.write(message_to_send) ``` 上述代码片段展示了如何打开个指向/dev/ttyUSB0的串行连接对象,并设置了波特率为9600bps;接着进入无限循环等待接收到来自外部设备的消息直到遇到Ctrl+C中断为止;最后尝试关闭资源释放之前还演示了下往对方发送条ASCII编码后的短语作为回应[^1]。 #### 注意事项 需要注意的是实际应用过程中还需要考虑更多细节问题,例如错误处理机制的设计、不同平台间字符集差异带来的潜在风险等因素的影响。另外就是如果涉及到更复杂的协议解析工作,则往往离不开专门定制化的解决方案支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值