前面已经写过一篇关于树莓派3B+的GPIO测试相关的博客,详情请移步《树莓派3B+使用GPIO实现串口通信》。本篇继续讲关于GPIO串口的相关操作。
树莓派3B
Ubuntu mate 16.04
在使用《树莓派3B+使用GPIO实现串口通信》中同样的方法配置GPIO时发现,纯净的Ubuntu mate 16.04系统是没有sudo raspi-config命令的,因此需要先安装raspi-config。
1、下载raspi-config.deb文件
wget http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20170926_all.deb
2、解决依赖问题
sudo apt install whiptail parted lua5.1 alsa-utils psmisc
3、安装软件
dpkg -i raspi-config_20170926_all.deb
4、运行raspi-config,需要sudo或以上权限
sudo raspi-config
5、raspi-config能够运行的还有一个重要前提,boot分区已被正常挂载
先查看一下boot分区所在设备号
fdisk -l
再把它挂载到/boot上(以下是示例,不一定是mmcblk0p6,需根据实际情况决定)mount /dev/mmcblk0p6 /boot
首先大家可以使用命令看一下树莓派3b+支持的GPIO串口
ls -la /dev/
打开串口/dev/ttyS0
sudo rasp-config
打开系统配置界面如下图,选择Inerfacing Options
然后选择 serial
选择No
然后Yes
最后选择保存,退出即可。
这个时候在输入下面的命令就可以看到串口ttyS0,但是还是不能用,继续配置。
ls -la /dev/
在终端中输入:
sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service
然后,重启
重启之后输入,就可以啦
sudo systemctl mask serial-getty@ttyS0.service
这样理论上完成了,但是我在实际测试中发现,
各方查找资料后,发现有网友说可能是因为树莓派工作频率不对造成的,连接在此
Raspberry Pi 3 login via UART on GPIO Baud Rates broken,有兴趣的朋友可以自己去看看。下面介绍修改方法:
sudo vim /boot/config.txt
查找下这句话 core_freq=250 是否启用,如果没有的话就将这句话前面的 # 号去掉,也可以在最下面添加上 core_freq=250 ,搞定。
树莓派串口接线如下图所示:
记得TX接RX,RX接TX
vim test.py
输入下面的代码(注意这里配置的串口波特率是9600):
import serial
serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=3.0)
while True:
serialport.write("rnSay something:")
rcv = serialport.read(10)
serialport.write("rnYou sent:" + repr(rcv))
运行代码之前,需要先提升串口/dev/ttyS0的读写权限
sudo chmod 666 /dev/ttyS0
然后在运行代码
pythoin test.py
前面虽然已经把串口配置好,但是每次使用串口时需要运行sudo chmod 666 /dev/ttyS0
给串口权限,为了方便,下面介绍如何把串口/dev/ttyS0自动获取权限
编写.rulrs
规则
sudo vim /etc/udev/rules.d/90-local.rules
然后在里面加上:
KERNEL=="ttyS0*", OWNER="root", GROUP="tty", MODE="0666"
这里简单解释下,其中KERNEL
是串口的名字,OWNER
是拥有者,对应下图中红色框,GROUP
是所属的群,对应下图中的蓝色框
然后,重启,完事儿~
如果想修改蓝牙和串口之间的映射,请参考下面的连接
How to setup the UART on Raspberry Pi 3
树莓派——安装raspi-config
Raspberry Pi 3 login via UART on GPIO Baud Rates broken