树莓派3B+使用GPIO实现串口通信[通俗易懂]

树莓派3B+使用GPIO实现串口通信[通俗易懂]https://www.circuits.dk/setup-raspberry-pi-3-gpio-uart/

大家好,又见面了,我是你们的朋友全栈君。

介绍

  由于项目原因需要使用树莓派连接串口,从串口获取机器人的信息同时也向机器人发送控制信息,因此串口在这里灰常重要。下面简单介绍下目前的方案:

方案介绍

  旧方案: 借助串口模块(FT232、CH340模块等)。串口模块插在树莓派上。

  • 缺点:

    1. 因为机器人要在室外工作,经常由于阳光的照射导致机器人、串口模块温度升高,从而导致串口工作不稳定。
    2. 因为串口模块插在树莓派的USB上,经常会由于机器人颠簸导致连接不良。
    3. 不同型号的模块用的串口通信芯片可能不一样,这个时候在配置.rules来固定串口时,需要对不同的串口模块分别配置单独的规则,详情请移步之前教程《串口绑定别名》
    4. 串口和树莓派之间连接、串口和机器人之间连接都可能出现问题,导致系统问题出现问题的情况有点多,排查起来也比较麻烦。
  • 优点:

    1. 串口插拔方便 ,坏了可以直接换。
    2. 用起来方便,不用很麻烦的配置环境。
  • 新方案: 直接使用树莓派的GPIO中的串口,这样可以减少串口模块的使用,避免出现上述问题。

串口配置的各种坑

  为了使用树莓派板上的GPIO串口,折腾了两天,虽然目前网上挺多资料的,但是由于系统的不同,各种问题:

  1. 树莓派硬件不一样,本教程里面用的是树莓派3B+,网上大多数都是树莓派3B的教程
  2. 系统不一样,本教程使用的是Ubuntu mate 16.04系统,网上大多数都是Debin、Centos等系统,反正就是没有Ubuntu mate的资料。(这个可以理解,毕竟树莓派3B+目前还没有官方的Ubuntu mate系统提供,当初我安装Ubuntu mate 16.04的时候也是各种坑,想用这个系统的请移步树莓派3B+ 安装Ubuntu mate 16.04教程

  主要就是上面这些问题啦,不过是真心难解决。下面给大家详细的解决方案:


配置步骤

首先大家可以使用命令看一下树莓派3b+支持的GPIO串口

ls -la /dev/

  大家可以发现如下图所示,应该是没有红色框内的串口ttyS0,只有蓝色框内的串口ttyAMA0。其中/dev/ttyAMA0串口时给蓝牙模块使用的。另外一个ttyS0应该是对接的miniUART,不过不知道为啥这个不显示,而且不能直接用,需要进行配置。我看了有些文章里面说,需要将连接蓝牙的串口/dev/ttyAMA0映射到serial0,因此这个比较稳定(图中按着文章中的步骤配置完后serial0映射的是串口/dev/ttyS0),但是我测试了2个小时也没有看到串口/dev/ttyS0崩溃,而且运行时CPU占用率80%,所以就没必要来回切换映射咯。


树莓派3B+使用GPIO实现串口通信[通俗易懂]

启用串口ttyS0

下面打开串口/dev/ttyS0,在命令框输入

sudo raspi-config

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


树莓派3B+使用GPIO实现串口通信[通俗易懂]

然后选择 serial


树莓派3B+使用GPIO实现串口通信[通俗易懂]

选择No


树莓派3B+使用GPIO实现串口通信[通俗易懂]

然后Yes


树莓派3B+使用GPIO实现串口通信[通俗易懂]

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

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

ls -la /dev/

关闭Console

在终端中输入:

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

然后配置cmdline.txt,使用的是vim,不会用的可以使用其他编辑器

sudo vim /boot/cmdline.txt

打开后你应该可以看到这个,我自己的系统打开后在root wait后面还有一长串,不过不影响

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes root wait

删掉里面的console=serial0,115200,注意,其他的不要删掉,不管后面是什么,都只删掉中间的这一句话。

保存之后,重启树莓派。

然后,在此编辑cmdline.txt

sudo vim /boot/cmdline.txt

在里面输入console=serial0(or ttyAMA0),115200,后面的不要动,在中间插入就行,没错,括号里的也要写上去不要乱改。

dwc_otg.lpm_enable=0 console=tty1 console=serial0(or ttyAMA0),115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

然后,再重启,就可以啦

测试

连线

树莓派串口接线如下图所示:
记得TX接RX,RX接TX


树莓派3B+使用GPIO实现串口通信[通俗易懂]
对应引脚参照表如下:

树莓派3B+使用GPIO实现串口通信[通俗易懂]

编辑文件

vim test.py

输入下面的代码(注意这里配置的串口波特率是9600):

import serial

serialport = serial.Serial("serial0", 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自动获取权限
先运行

sudo systemctl mask serial-getty@ttyS0.service

然后编写.rulrs规则

sudo vim /etc/udev/rules.d/90-local.rules

然后在里面加上:

KERNEL=="ttyS0*", OWNER="root", GROUP="tty", MODE="0666" 

这里简单解释下,其中KERNEL是串口的名字,OWNER是拥有者,对应下图中红色框,GROUP是所属的群,对应下图中的蓝色框


树莓派3B+使用GPIO实现串口通信[通俗易懂]

然后,重启,完事儿~

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

参考文献

How to setup the UART on Raspberry Pi 3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152949.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BM3D算法学习

    BM3D算法学习来源:BM3D算法学习-知乎(zhihu.com)作者:爱酷的胡巴前些日子在学习图像降噪的算法,自然而然的发现了这篇里程碑式的作品,“BM3D”3D块匹配降噪算法,想来时间也久,赶紧再写下来,以免过后忘记。在学习的过程中,由于没学过数字图像处理,学起来还是挺墨迹的,前前后后得有四五天吧,才算整个大差不差,期间看了许多前辈的博客和代码,也总算有些许的进步和理解,特此感…

    2022年5月22日
    76
  • 添加和共享打印机的方法是_按名称选择共享打印机输入什么

    添加和共享打印机的方法是_按名称选择共享打印机输入什么在Windows10中,可以将打印机共享给网络上的多台电脑。若要从连接到打印机的电脑(主要电脑)共享打印机至未连接到打印机的辅助电脑,你必须设置共享打印机设置、将打印机连接到主要电脑(或者以无线方式或使用USB电缆),然后打开打印机。另外,请确保主电脑已打开、连接到打印机并连接到网络。注意共享打印机时,请确保已在主要和辅助电脑上设置了共享设置。此外,请确保你知道主要电脑的名称。有关详细信…

    2025年5月25日
    3
  • linux java 日志_linux查看日志的方法

    linux java 日志_linux查看日志的方法linux查看日志文件内容命令tail、cat、tac、head、echotail-ftest.log你会看到屏幕不断有内容被打印出来.这时候中断第一个进程Ctrl-C,—————————linux如何显示一个文件的某几行(中间几行)从第3000行开始,显示1000行。即显示3000~3999行catfilename|tail-n+3000|…

    2022年6月22日
    238
  • Ubuntu安装谷歌_谷歌地球手机专业版

    Ubuntu安装谷歌_谷歌地球手机专业版在Ubuntu18.04中安装谷歌地球GoogleEarthGoogleEarth在Linux系统中(Ubuntu18.04)的安装方法1.安装必备组建2.下载GoogleEarth安装包3.安装GoogleEarth4.开启运行GoogleEarthGoogleEarth在Linux系统中(Ubuntu18.04)的安装方法1.安装必备组建使用gdebi在我们的系统上安装Goo…

    2025年12月11日
    5
  • pycharm怎么新建python项目_pycharm怎么新建一个项目

    pycharm怎么新建python项目_pycharm怎么新建一个项目如果选择新建虚拟环境并且没有加入本地解释器的库的话会导致没有代码提示的一、如果选择新建虚拟环境的话二、选择系统解释器,这样可能会导致多个项目时依赖库太多三、如果不是这个原因导致没有代码提示的话,可以看看下面的其他注意事项1.2.3.看看这里的解释器是否正常,一般都是默认正常的…

    2022年8月25日
    8
  • webpack css_webpack打包有哪些文件

    webpack css_webpack打包有哪些文件css文件处理-准备工作(以下项目配置都是基于上一篇webpack(4)的基础上)在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中。这里我们就在src目录中创建一个n

    2022年7月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号