赞
踩
树莓派型号:4B
固件版本:2022-04-04-raspios-bullseye-armhf-full.img
一,初始方案
接线:
gpio14(板子上的8号针脚)是树莓派的TXD,和TTL转usb模块的RXD连接在一起。
gpio15(板子上的10号针脚)是树莓派的RXD,和TTL转usb模块的TXD连接在一起。
14号口接地。
代码:
- import serial
- import time
- # 配置串口
- com = serial.Serial("/dev/ttyS0", 115200) #发送提示字符
- com.write(b'Hello 01Studio!')
- while True:
- count = com.inWaiting()
- if count != 0:# 读取内容并打印
- recv = com.read(count)
- print(recv)#发回数据
- com.write(recv)# 清空接收缓冲区
- com.flushInput()# 延时 100ms,接收间隔
- time.sleep(0.1)
效果:连接pc机之后用pc端的串口助手进行数据收发,发现打印出来的字符串全是乱码,而且有时候传送同样的数据打印出来的信息是不同的(这一点非常诡异)。原因是树莓派默认使用的是ttys0接口,这个接口非常不稳定,几乎不能传送正确的数据.
二,改进方案
用稳定性更高ttyAMA0替换ttys0,具体步骤如下:
首先打开pi configuration——>interfaces,将serial port和serial console改成下面的样子:
重启后打开终端,输入指令:
ls /dev -al
我们看到serial0默认使用的是稳定性很差的ttys0,下面要把serial0和serial1调换一下:
终端输入指令:
sudo nano /boot/config.txt
回车后在最后一行添加代码:
dtoverlay=disable-bt
按ctrl+o,按下回车保存,再按ctrl+x退出。
最后禁用蓝牙,输入终端指令:
sudo systemctl disable bluetooth
重启后会发现接口映射已经调换了:
最后再把代码中的接口调用换成ttyAMA0就行了
- import serial
- import time
- # 配置串口
- com = serial.Serial("/dev/ttyAMA0", 115200) #发送提示字符
- com.write(b'Hello 01Studio!')
- while True:
- count = com.inWaiting()
- if count != 0:
- # 读取内容并打印
- recv = com.read(count)
- print(recv)
- #发回数据
- com.write(recv)
- # 清空接收缓冲区
- com.flushInput()
- # 延时 100ms,接收间隔
- time.sleep(0.1)

再打开pc端的串口助手进行数据收发,这个时候会发现数据传输无误了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。