【笔记】树莓派操作GPIO引脚

前言

树莓派操作GPIO引脚

安装gpio命令

1
sudo apt-get install wiringpi

踩坑

  • gpio readall查看引脚编码时报错:Oops - unable to determine board type... model: 17

原因

  • 项目原作者很久没更新,导致与新版树莓派不兼容

解决问题

  • 安装另一位作者更新的版本
1
2
3
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-lastest.deb

通过gpio命令操作引脚

设置引脚的输出模式

设置为BCM编码

1
gpio -g mod 4 out

设置为wiringpi编码

1
gpio mod 4 out

读取引脚状态

  • 0为低电平,1为高电平
1
gpio -g read 4

设置引脚状态

1:设置为高电平
0:设置为低电平

1
gpio -g write 4 1

通过Linux内核操作引脚

进入GPIO目录

1
cd /sys/class/gpio

将需要操作的接口暴露

  • 将需要操作的GPIO引脚接口从内核空间暴露到用户空间

<bcm_num>:需要操作的引脚的BCM编码

1
echo <bcm_num> > export

进入引脚目录

<bcm_num>:目录名的后缀为引脚的BCM编号

1
cd gpio<bcm_num>

设置引脚为输出方向

1
echo out > direction

设置引脚的状态

1:设置为高电平
0:设置为低电平

1
echo 1 > value

注销GPIO引脚

1
2
cd ..
echo <bcm_num> > unexport

通过Python3操作GPIO引脚

  • 使用RPI.GPIO模块

<bcm_num>:需要操作的引脚的BCM编码

1
2
3
4
5
6
7
8
9
10
11
12
13
import RPI.GPIO as GPIO
from time import sleep

# 设置为BCM模式
GPIO.setmode(GPIO.BCM)
# 设置为输出模式
GPIO.setup(<bcm_num>, GPIO.OUT)
# 设置为高电平
GPIO.output(<bcm_num>, GPIO.HIGH)
# 设置为低电平
GPIO.output(<bcm_num>, GPIO.LOW)
# 注销GPIO引脚
GPIO.cleanup()

通过C操作GPIO

  • 使用wiringPi.h头文件

<wiringpi_num>:需要操作的引脚的wiringpi编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <wiringPi.h>
#define Pin <wiringpi_num>

int main()
{
if (wiringPiSetup() < 0)
{
return 1;
}

// 设置为输出模式
pinMode(Pin, OUTPUT);
// 设置为高电平
digitalWrite(Pin, 1);
// 设置为低电平
digitalWrite(Pin, 0);

return 0;
}

编译

1
gcc 文件名.c -lwiringPi

完成

参考文献

哔哩哔哩——树小悉