我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么理解树莓派的GPIO编程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么理解树莓派的GPIO编程

本篇文章为大家展示了怎么理解树莓派的GPIO编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input/Output)接口。这组GPIO接口大大拓展了树莓派的能力。GPIO不仅能实现通信,还能直接控制电子元器件,从而让用户体验到硬件编程的乐趣。
GPIO简介

在树莓派3上,GPIO接口由40个针脚(PIN)组成。每个针脚都可以用导线和外部设备相连。你可以通过焊接的方式来把导线固定在PIN上,也可以用母型的跳线套接在PIN上。

跳线

40个PIN中,有固定输出的5V(2、4号PIN)、3.3V(1、17号PIN)和地线(Ground,6、9、14、20、25、30、34、39)。如果一个电路两端接在,5V和地线之间,该电路就会获得5V的电压输入。27和28号PIN标着ID_SD和ID_SC。它们是两个特殊的PIN。它们属于ID EEPROM (Electrically Erasable Programmable Read-Only Memory) 接口,用于和拓展树莓派功能的附加电路板通信。其他的PIN大多编程GPIOX的编号,如GPIO14。树莓派的操作系统中,会用GPIO的编号14来指代这个PIN,而不是位置编号的8。有一些PIN除了GPIO功能外,还提供了高级端口功能。比如说,GPIO14和GPIO15就同时可以充当UART端口。此外,GPIO上还能找到I2C和SPI端口。

 

   

树莓派3的GPIO针脚

在计算机中,通常用高、低两个电压来表示二进制的1和0。树莓派也是如此。GPIO用相同的方式来表示数据。每个GPIO的PIN都能处于输入或输出状态。当处于输出状态时,系统可以把1或0传给该PIN。如果是1,那么对应的物理PIN向外输出3.3V的高电压,否则输出0V的低电压。相应的,处于输入状态的PIN可以探测物理PIN上的电压。如果是高电压,那么该PIN将向系统返回1,否则返回0。就是利用上述简单机制,GPIO实现了和物理电路的互动。

 
控制LED灯

我们先来看GPIO输出的一个例子。我们在GPIO21和地线之间接了一个串联电路。电路上有一个LED灯,还有一个用于防止短路的330欧电阻。当GPIO21位于高电平时,将有电流通过电路,从而点亮LED灯。

我们用bash命令来控制GPIO21。在Linux中,外部设备经常被表示成文件。向文件写入或读取字符,就相当于向设备输出或者从设备输入字符。树莓派上的GPIO端口也是如此,其代表文件位于/sys/class/gpio/下。首先,激活GPIO21:

echo 21 > /sys/class/gpio/export

这个命令的意思,是把字符"21"输入到/sys/class/gpio/export。可以看到,命令执行后,/sys/class/gpio/下面增加了代表GPIO21的一个目录,目录名就是gpio21。下一步,我们把GPIO21置于输出状态:

echo out > /sys/class/gpio/gpio21/direction

文件/sys/class/gpio/gpio21/direction用于控制GPIO21的方向。我们向里面写入了代表输出的字符"out"。最后,向GPIO21写入1,从而让PIN处于高电压:

echo 1 > /sys/class/gpio/gpio21/value

可以看到,LED灯亮了起来。如果想关掉LED灯,只需要向GPIO21写入0:

echo 0 > /sys/class/gpio/gpio21/value

使用完毕GPIO21,可以删除该端口:

echo 21 > /sys/class/gpio/unexport

/sys/class/gpio/gpio21随即消失。

 
两个树莓派之间的GPIO

我们可以用GPIO的方式连接两个树莓派。一个树莓派的GPIO输出,将成为另一个树莓派的GPIO输入。连接方式很简单,只需要2根导线。一个导线连接两个树莓派的地线,另一根导线连接树莓派的两个PIN:

我们用左侧的树莓派来输出,右侧树莓派来输入。输出过程和上面控制LED灯的例子相似。在第一个树莓派中的GPIO21准备输出:

echo 21 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio21/direction

在第二个树莓派中,准备好读取GPIO26:

echo 26 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio26/direction

当我们往/sys/class/gpio/gpio26中写入"in"时,就把GPIO26置于输入状态。

 

此后,在第一个树莓派中,就可以更改输出值为1或0:

echo 1 > /sys/class/gpio/gpio21/value
echo 0 > /sys/class/gpio/gpio21/value

 

在第二个树莓派中,可以用cat命令来读取文件,获得输入值:

cat /sys/class/gpio/gpio26/value

由于cat命令读完一次后会返回。为了持续读取,我们可以用bash中的无限循环,来反复调用cat:

while true; do cat /sys/class/gpio/gpio26/value; done

随着第一个树莓派中输出的改变,第二个树莓派获得的输入也随之改变。我们在两个树莓派之间实现了简单的通信。

最后,在使用完GPIO后,别忘了删除端口。

 
UART编程

计算机的数据都是许多位的0和1构成的序列。尽管GPIO可以在0和1之间切换,但并不能准确地分割出位。比如说,我们把一个二进制序列11000111输出到GPIO端口,那么在输入端看来,只是输入了一段时间的1,然后变成0,然后又变成1。输入端没法准确说出,一段高电平输入究竟包好了几位1。

一个解决方案是用多个PIN同时通信,每个PIN表示一位。当输入端读取完成后,通知输出端,让输出端送来下面一批的数据。这种通信方式被称为并口传输。和并口对应的是串口传输。传输时依然是用一个PIN,但输入方可以知道一位的数据持续了多长时间。GPIO上的UART、I2C、SPI都是串口通信。

UART与其余两者的区别在于,通信双方通过事先约定的速率来发送或接受数据。这种通信方式称为异步通信。在I2C和SPI这样的同步通信方式,会用额外的连线来保证双方速率相同。UART的连线和实现方式很简单,成为最流行的串口通信方式。但UART的缺点在于,如果发送方和接收方的速率不同,那么通信就会发生错误。通信速率就称为“波特率”(baudrate),单位是每秒通信的位数(bps)。

 

UART的端口至少有RX、TX和地线三个针脚。RX负责读取,TX负责输出。如果有两个UART端口,它们的连接方式如下:

 

在树莓派3的情况下,TX和RX就是GPIO14和GPIO15针脚。因此,我们可以把两个树莓派之间按照上图的方式连接起来,然后在两个树莓派之间实现UART通信。

 

在这里,我们要注意树莓派3发生的一点变化。树莓派1和2中都使用了标准的UART,在操作系统中的对应文件是/dev/ttyAMA0。在树莓派3中,新增的蓝牙模块占用了标准UART端口和树莓派沟通,外部的UART通信采用了简单的Mini UART,在操作系统中的对应文件是/dev/ttyS0。由于mini UART的波特率依赖于CPU时钟频率,而CPU频率可能在运行过程中浮动,因此mini UART经常会带来意向不到的错误。一般有两种解决方案有。一种是关闭蓝牙模块,让外部连接重新使用标准UART端口。另一种是固定CPU时钟频率,以便mini UART能以准确的波特率进行通信。

 

关闭蓝牙模块,需要修改/boot/config.txt,在文件末尾增加:

dtoverlay=pi3-disable-bt

修改后重启。此后的UART通信,就可以通过/dev/ttyAMA0进行。

 

如果是采取第二种解决方案,还是要修改/boot/config.txt,上面的修改变成:

core_freq=250
dtoverlay=pi3-miniuart-bt

修改后重启。此后的UART通信,就可以通过/dev/ttyS0进行。

 

我们以第一种解决方案为例,进行UART通信。设定波特率:

stty -F /dev/ttyAMA0 9600

 

输出文本:

echo "hello" > /dev/ttyAMA0

 

读取文本:

cat /dev/ttyAMA0

如果使用第二种解决方案,那么只需要把上面的/dev/ttyAMA0改为/dev/ttyS0。

 

可以看到,UART可以实现更加复杂的文本通信。

 
用UART连接PC

一般的PC都没有暴露在外的UART针脚。为了通过UART来连接PC和树莓派,我们需要一个USB和UART的转换器。这个转换器的一端是USB接口,另一端是UART的针脚。我们把USB一端插入到PC。另一端按照UART到UART的方式,连接到树莓派的UART针脚。

连接好之后,就可以在PC上,利用串口操作软件来和树莓派通信。在Linux下,USB连接表示为/dev/ttyUSB0。当然,当计算机上只有1个USB设备时,最后的编号才会是0。而在我的Mac OSX上,该USB连接被表示成/dev/cu.SLAB_USBtoUART。此后,就可以通过操作USB文件来进行UART通信。在Windows下,也有现成的进行串口通信的图形化软件。

 
用UART登陆树莓派

我们还可以用UART的方式连接并登陆树莓派。进入树莓派设置:

sudo raspi-config

在Interfacing Options->Serial中,允许开机时通过串口登陆。
 

重启后,树莓派启动时会自动把开机信息已115200的波特率推到UART端口。在UART另一端的PC上,如果你使用Mac OSX,那么你可以用下面命令连接:

screen /dev/cu.SLAB_USBtoUART 115200

如果PC是Linux系统,只需要把USB设备文件改为对应的设备文件即可。如果是Windows系统,还可以用图形化软件。这里不再赘述。

上述内容就是怎么理解树莓派的GPIO编程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么理解树莓派的GPIO编程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么理解树莓派的GPIO编程

本篇文章为大家展示了怎么理解树莓派的GPIO编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input
2023-06-05

怎么使用C语言操作树莓派GPIO

这篇文章主要介绍了怎么使用C语言操作树莓派GPIO,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。第一步安装GPIO库。cd /tmpwget https://project-
2023-06-15

树莓派Python编程到底是什么?

在学习Python编程的过程中,大家可能会接触到一个叫做树莓派的东西,那这个树莓派是什么呢?为什么要用它来做Python编程?树莓派是个用来学习编程的优秀设备,它可以理解多种语言。第一,它很便宜。价格差不多只有低端计算机的十分之一,作为你的
2023-01-31

树莓派不能安装php怎么解决

这篇文章主要介绍“树莓派不能安装php怎么解决”,在日常操作中,相信很多人在树莓派不能安装php怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”树莓派不能安装php怎么解决”的疑惑有所帮助!接下来,请跟
2023-06-21

树莓派php5安装失败怎么解决

这篇文章主要介绍“树莓派php5安装失败怎么解决”,在日常操作中,相信很多人在树莓派php5安装失败怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”树莓派php5安装失败怎么解决”的疑惑有所帮助!接下来
2023-06-22

树莓派4安装Ubuntu 19.10的教程详解

由于之前在raspbian上面跑opencv有些依赖包装不上,所以一些代码不能跑,就想着用Ubuntu试试。安装的过程是跟着这个视频来的:[linux]在Raspberry Pi 4上安装完整版Ubuntu 19
2022-06-04

在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解

在树莓派上运行NodeJS并不需要特别的配置,你只需要确保可以用openssh远程连接到你的树莓派。 安装并配置Open SSH服务器 它可以确保你能远程连接到树莓派,它应该已经被安装了,但是这个过程可以确保安装最新版和生成加密密钥。 如果
2022-06-04

python树莓派怎么通过队列实现进程交互

这篇文章主要为大家展示了“python树莓派怎么通过队列实现进程交互”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python树莓派怎么通过队列实现进程交互”这篇文章吧。写在前面现在购物车有一任
2023-06-20

树莓派更新资源出现failed to fetch问题怎么解决

当树莓派更新资源时出现"failed to fetch"问题,可以尝试以下解决方法:检查网络连接:确保树莓派连接到互联网,并且具有稳定的网络连接。可以通过尝试访问其他网站或使用ping命令来测试网络连接是否正常。检查源地址:检查树莓派的源地
2023-10-26

C++编程技术怎么理解

本篇内容介绍了“C++编程技术怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们对这个程序逐行加以解释:(1)***行是C++语言的
2023-06-17

怎么理解异步编程RxJava

这篇文章给大家介绍怎么理解异步编程RxJava,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式;并
2023-06-17

Java虚拟机中的双亲委派机制怎么理解

Java虚拟机中的双亲委派机制怎么理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类
2023-06-22

Java编程中的面向对象怎么理解

本篇内容主要讲解“Java编程中的面向对象怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java编程中的面向对象怎么理解”吧!许多人刚刚学完现在看来是快要淘汰的只是面向过程的语言。他们的
2023-06-17

怎么理解Python中的面向对象编程

本篇内容主要讲解“怎么理解Python中的面向对象编程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python中的面向对象编程”吧!Python支持多种类型的编程范式,例如过程式编程、
2023-06-02

网络编程的理解是怎样的

网络编程的理解是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1:网络编程(理解) (1)网络编程:用Java语言实现计算机间数据的信息传递
2023-06-02

怎么理解Python中的编码

这篇文章主要介绍“怎么理解Python中的编码”,在日常操作中,相信很多人在怎么理解Python中的编码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Python中的编码”的疑惑有所帮助!接下来,请跟
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录