02 GPIO输出控制
GPIO常用编程方式和区别¶
树莓派的GPIO编程控制方式有使用wiringPi库、BCM2835库、RPi.GPIO库。
其中wiringPi库、BCM2835库是使用C++编程,RPi.GPIO是使用python编程方式。下面将实现这3种方式的安装和控制。
函数库的安装¶
wiringPi¶
WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi中的函数类似于Arduino的Wiring系统
下载的话输入
然后就可以使用以下信息查看安装是否完成。
如果能够打印版本信息和引脚信息,即是完成了安装。
BCM2835库¶
bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。
从BCM2835的官网下载最新的库,然后放到树莓派种解压安装,我下载的时候是1.75的版本,也会放在我的开源软件文件夹中。
这样就安装完成了
RPi.GPIO¶
如果是按照我之前第一节的安装步骤安装的话,他应该会默认安装RPi.GPIO,而且该固件默认的python是python3,这可能和以前部分教程说的python2不太一样,这点需要注意,如果你不是下的我上篇博客说的版本,需要自己去找教程安装python3和对应的RPi.GPIO。可以使用python测试
应该是没问题的,我都可以通过。
控制GPIO口输出¶
首先,树莓派的GPIO口,不同的库给他的编号不同,有基本的功能名编的引脚,然后BCM库有一种编码,然后是wiringPi有一种编码。我们下面的代码将控制GPIO.1的输出高低电平的变换,他在BCM编码是18,在WiringPi是1,具体的编码对应可以看上面gpio readall打印的引脚信息。
wiringPi¶
1、int wiringPiSetup (void)
返回:执行状态,-1表示失败
使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作。当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16需要root权限
2、int wiringPiSetupGpio (void)
返回:执行状态,-1表示失败
当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。需要root权限
3、void pinMode (int pin, int mode)
pin:配置的引脚
mode:指定引脚的IO模式
可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
4、void digitalWrite (int pin, int value)
pin:控制的引脚
value:引脚输出的电平值。
可取的值:HIGH,LOW分别代表高低电平
下面就是写了一个使用wiringPi的控制0号端口高低电平变化的代码。c文件名我命名为main.c
然后编译这段代码
-Wall 表示编译时显示所有警告,-lwiringPi 表示编译时动态加载 wiringPi 库
编译完成后调用生成的main文件
然后可以用示波器啥的,或者自己连接的LED灯在这个引脚上,就可以查看到变化。、
想要停止这个程序,Ctrl+c即可。
bcm2835库¶
1、int bcm2835_init (void)
返回:执行状态,-1表示失败
当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。
2、void bcm2835_gpio_fsel(uint8_t pin, uint8_t mode);
pin:配置的引脚
mode:指定引脚的IO模式
可取的值:BCM2835_GPIO_FSEL_INPT、BCM2835_GPIO_FSEL_OUTP或者另外6个alternate function中的一个
3、void bcm2835_gpio_write(uint8_t pin, uint8_t on);
pin:控制的引脚
on:引脚输出的电平值。
可取的值:HIGH,LOW分别代表高低电平
bcm的引脚编号和wiringPi不同,需要注意,下面是一个实际例子
然后编译这段代码
-Wall 表示编译时显示所有警告,-lbcm2835 表示编译时动态加载bcm2835 库
编译完成后调用生成的main文件
然后可以用示波器啥的,或者自己连接的LED灯在这个引脚上,就可以查看到变化。、
想要停止这个程序,Ctrl+c即可。
RPi.GPIO¶
直接给代码了,python应该比较好理解,具体的实现注释放在代码里面

