树莓派3B使用GPIO实现串口通信

文章目录

  • 介绍
    • 硬件
    • 系统
  • 配置步骤
    • 安装raspi-config
  • 配置GPIO串口
    • 1、启用串口ttyS0
    • 2、关闭Console
  • 修改树莓派CPU频率
  • 测试
    • 连线
    • 编辑文件
    • 运行代码
  • ttyS0串口权限
  • 参考文献

介绍

  前面已经写过一篇关于树莓派3B+的GPIO测试相关的博客,详情请移步《树莓派3B+使用GPIO实现串口通信》。本篇继续讲关于GPIO串口的相关操作。

硬件

树莓派3B

系统

Ubuntu mate 16.04


配置步骤

安装raspi-config

  在使用《树莓派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/

配置GPIO串口

1、启用串口ttyS0

打开串口/dev/ttyS0

sudo rasp-config

打开系统配置界面如下图,选择Inerfacing Options

树莓派3B使用GPIO实现串口通信_第1张图片

然后选择 serial

树莓派3B使用GPIO实现串口通信_第2张图片

选择No

树莓派3B使用GPIO实现串口通信_第3张图片

然后Yes

树莓派3B使用GPIO实现串口通信_第4张图片

最后选择保存,退出即可。

这个时候在输入下面的命令就可以看到串口ttyS0,但是还是不能用,继续配置。

ls -la /dev/

2、关闭Console

在终端中输入:

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service

然后,重启

重启之后输入,就可以啦

sudo systemctl mask serial-getty@ttyS0.service

修改树莓派CPU频率

这样理论上完成了,但是我在实际测试中发现,

  1. 串口发送时偶尔可以发送一条正常字符串,大部分情况下是乱码
  2. 串口接收数据时,出现**\xe8 \xe9**之类的数据。

各方查找资料后,发现有网友说可能是因为树莓派工作频率不对造成的,连接在此
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

树莓派3B使用GPIO实现串口通信_第5张图片
对应引脚参照表如下:
树莓派3B使用GPIO实现串口通信_第6张图片

编辑文件

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

ttyS0串口权限

前面虽然已经把串口配置好,但是每次使用串口时需要运行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是所属的群,对应下图中的蓝色框

树莓派3B使用GPIO实现串口通信_第7张图片

然后,重启,完事儿~

如果想修改蓝牙和串口之间的映射,请参考下面的连接

参考文献

How to setup the UART on Raspberry Pi 3
树莓派——安装raspi-config
Raspberry Pi 3 login via UART on GPIO Baud Rates broken

你可能感兴趣的:(树莓派)