【树莓派4B学习】十四、树莓派
【树莓派
学习】十四、树莓派4B串口通信
串口通信
一、必须要先知道的储备知识
一、必须要先知道的储备知识
树莓派4B的外设一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。
硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠。
mini串口性能低,功能也简单,并且没有波特率专用的时钟源而是由CPU内核时钟提供,因此mini串口有个致命的弱点是:波
特率受到内核时钟的影响。内核若在智能调整功耗降低主频时,相应的这个mini串口的波特率便受到牵连了。当然可以固定内
核的时钟频率,如果不考虑功耗的情况下。
树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,而性能较差的mini串口是分配给GPIO串口
TXD0、RXD0。
其中红框中就是引出的串口IO,如果我们需要通过UART外接模块,默认情况下必须得使用性能很低的mini串口了,而且随着
恢复硬件串口与GPIO 14/15的映射
内核主频的变化,还会造成波特率的变化导致通信的失败,几乎很难使用。所以我们希望恢复硬件串口与
关系,使得我们能够通过GPIO使用高性能的硬件串口来连接我们的串口设备。
补充:树莓派IO引出的串口默认是用来做控制台使用的(使用串口登录树莓派,类似SSH登录那种),它的初衷是为了在没
有网络接口时,通过串口对树莓派进行相关的配置。
二、关闭串口登录,打开硬件串口调试功能
二、关闭串口登录,打开硬件串口调试功能
在树莓派终端输入sudo raspi-config,依次按照下图所示选择
关闭串口登录功能
打开硬件串口调试功能
然后退出,重启。
三、配置树莓派串口
三、配置树莓派串口
经过第一部分了解到,硬件串口默认分配给板载蓝牙使用,如果想要使硬件串口分配给GPIO,那么就需要配置,这也正是本
节要讲述的。
1、查看当前串口分配方式
、查看当前串口分配方式
在树莓派终端输入ls /dev -al,可以查看到默认的串口分配方式。其中可以看到有如下图所示的一组对应。
serial0即GPIO映射的串口,默认是ttyS0,即mini串口
serial1即板载蓝牙映射的串口,默认是ttyAMA0,即硬件串口。
我们要做的工作便是,将两者映射互相交换。
serial0映射成ttyAMA0,serial1映射成ttyS0。
2、修改配置文件
、修改配置文件
在树莓派终端输入sudo vim /boot/config.txt
在对应的文件末尾加入dtoverlay=pi3-disable-bt
蓝牙使用硬件串口,所以我们在 /boot/config.txt里面加上 dtoverlay=pi3-disable-bt ,ttyAMA0 得以释放,这时候树莓派也自动交换了
ttyAMA0和ttyS0,把serial0 分配给了 ttyAMA0 。
随后,输入 sudo reboot重启树莓派,使修改生效。
3、验证当前串口分配方式
、验证当前串口分配方式
依旧输入在树莓派终端输入ls /dev -al。
四、代码测试
四、代码测试
终于到了,最激动人心的环节了 — 测试。
通过USB-TTL连接树莓派的TXD/RXD连接到PC,并打开PC端的串口助手,设置波特率为9600.
树莓派上,编写4.py,代码如下所示。
# -*- coding: utf-8 -*
import serial
import time
def main():
while True:
# 获得接收缓冲区字符
count = ser.inWaiting()
if count != 0:
# 读取内容并显示
recv = ser.read(count)
print recv
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__ == '__main__':
try:
# 打开串口
ser = serial.Serial('/dev/ttyAMA0', 9600)
if ser.isOpen == False:
ser.open() # 打开串口
ser.write(b"Raspberry pi is ready")
main()
except KeyboardInterrupt:
if ser != None:
ser.close()
树莓派运行4.py文件,同时开启PC端串口助手,并注意观察接收框变化
上面PC端串口助手成功打印Raspberry pi is ready,说明树莓派发送到PC端没得问题。
接着测试树莓派接收PC端的消息
树莓派接收也没得问题!!!
至此,树莓派4B的串口通信测试,便成功实现!
参考参考
树莓派3b/4b通用 + 串口配置
树莓派3b+串口配置
树莓派4B如何使用串口与外部进行通信
作者:ReCclay