树莓派4BUbuntu系统的串口UART配置

本文介绍了如何在树莓派上安装并配置串口,包括更改pip源安装pyserial,修改配置文件启用额外的串口,解决权限问题,以及查看和使用不同UART。针对UART0的特殊配置,需要禁用内部蓝牙以释放串口。

1  安装串口:

        如果没有更换pip源会报错,所以指定安装源

pip install pyserial -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
  • 修改uart配置:
sudo vim /boot/firmware/config.txt

        在末尾添加:

dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5
  • 重启生效。

  • 组别修改:

        重启后,遇到权限问题,由于tty属于"dialout"组别,将用户加入该组别即可

sudo gpasswd --add $your_username dialout # 将$your_username 修改为自己的用户名
  • 运行出现错误:Permission denied: '/dev/ttyAMAx'
sudo chmod 777 /dev/ttyAMAx   # ttyAMAx改为相应的串口号

2  查看树莓派支持的串口

dtoverlay -a | grep uart

3 串口号与针脚对应

UART0:   GPIO14 = TXD0 -> ttyAMA0     GPIO15 = RXD0 -> ttyAMA0
UART1: ttyS0         # 内部蓝牙
UART2: GPIO0  = TXD2 -> ttyAMA1     GPIO1  = RXD2 -> ttyAMA1
UART3: GPIO4  = TXD3 -> ttyAMA2     GPIO5  = RXD3 -> ttyAMA2
UART4: GPIO8  = TXD4 -> ttyAMA3     GPIO9  = RXD4 -> ttyAMA3
UART5: GPIO12 = TXD5 -> ttyAMA4     GPIO13 = RXD5 -> ttyAMA4

 4 使用UART0

串口0不能使用一般,需要额外的配置

查看 serial0 和 serial1 链接的对象。

ls -l /dev/serial*

返回上面说明串口1连接在ttyAMA0上,而串口1用在了内部蓝牙上,需要

修改 serial0 和 serial1 的物理映射:

sudo vim /boot/firmware/config.txt

在后面追加:

enable_uart=1
dtoverlay=pi3-miniuart-bt

保存,重启,再查看链接对象:

 

### 实现树莓派4B在Ubuntu系统上通过UART与ESP32通信的Python程序 以下是基于用户需求设计的一个完整方案,用于实现在树莓派4B运行的Ubuntu系统中,通过UART接口与ESP32设备进行串行通信的功能。 #### 设置硬件连接 首先确认树莓派4B和ESP32之间的UART连线方式。通常情况下会遵循以下映射关系[^2]: | **Tree Pi 4B Pin** | **ESP32 Pin** | |---------------------|---------------| | TXD (Pin 8) | RX | | RXD (Pin 10) | TX | | GND | GND | #### 安装依赖项 确保已经安装了必要的库文件来操作串口通讯。可以通过pip工具轻松获取pyserial包: ```bash sudo apt-get update && sudo apt-get install python3-pip pip3 install pyserial ``` #### Python 示例代码 下面提供了一段简单的Python脚本来演示如何配置并使用PySerial库来进行基本的数据传输过程: ```python import serial from time import sleep def uart_communicate(port='/dev/ttyS0', baudrate=9600): ser = None try: # 初始化串口对象 ser = serial.Serial( port=port, baudrate=baudrate, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=1 ) if not ser.is_open: raise IOError('Failed to open the specified serial port.') while True: message_to_send = 'Hello ESP32!' # 向ESP32发送消息 num_written_bytes = ser.write(message_to_send.encode()) print(f'Sent {num_written_bytes} byte(s): "{message_to_send}"') # 给予时间让对方处理接收数据后再继续下一步动作 sleep(1) # 检查是否有来自ESP32的消息返回 incoming_data = ser.readline().decode().strip() if len(incoming_data)>0: print(f'Received reply: "{incoming_data}"') finally: if isinstance(ser, serial.Serial) and ser.is_open: ser.close() if __name__ == '__main__': uart_communicate('/dev/serial0') # 默认对于RPi模型来说'/dev/serial0'指向物理RS-232头 ``` 以上代码片段展示了怎样建立一个持续循环往复地向相连的目标装置发送问候语句的同时也尝试读取任何可能存在的回应信息的过程。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laocui1

你的鼓励是我创作的最大动了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值