raspi的GPIO控制

最近学习了下树莓派的GPIO的控制,通过如下命令可以查看所有pin的情况:


pinout

当前是raspi 4B,输出如下:

通过一根线将GPIO17与GPIO27相连,读取其状态值均为0:


gpioget gpiochip0 17
gpioget gpiochip0 27

至于为什么是chip0,而不是chip1或chip4,可以通过命令进行查询:


$ gpiofind GPIO17
gpiochip0 17

执行如下命令将GPIO17拉抬到高电压:


gpioset --mode=wait gpiochip0 17=1

默认命令执行结束就退出,电压就恢复了,所以这里使用--mode=wait来保持不退出。此时在另一个终端里读取GPIO27的值:


$ gpioget gpiochip0 27
1

输出就为0. 结束原终端的进程,查询GPIO17和GPIO27,输出为:


$ gpioget gpiochip0 17
0
$ gpioget gpiochip0 27
1

那为什么进程结束,电压就恢复了呢,因为默认gpio的pin脚为悬空,是0还是1可由外部电路进行下拉或上拉来决定,但其实也可以指定bias电压,如下命令就不需要--mode=wait,而进程结束,电压还是高:


gpioset -B pull-up gpiochip0 17=1

参数-B或--bias取值可为as-is(默认值)、disable、pull-up、pull-down。

有个--drive参数,默认为push-pull,其各取值含义如下:


push-pull:	推挽模式,即指定电压高或低。可用来驱动单一器件,如LED
open-drain:	开漏模式,电压为低或悬空(表现为高阻抗),可以用于多器件的信号线与
open-source: 开源模式,电压为高或悬空(表现为高阻抗)

监控某个GPIO的电平变化,可执行:


$ gpiomon gpiochip0 17
event:  RISING EDGE offset: 17 timestamp: [   48929.128336981]
event: FALLING EDGE offset: 17 timestamp: [   48937.490543703]

然后另一终端反复执行如下两行命令,就可以看到监听进程有输出:


gpioset gpiochip0 27=1
gpioset gpiochip0 27=0

 

发表于 11月28日 23:19   修改于 3天前   评论:0   阅读:259  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo