主要目的:
- 了解蜂鸣器的基础知识点;
- 掌握wiringPi的GPIO调用方法;
- 实现蜂鸣器的鸣叫。
目录
1、安装wiringPi库
树莓派C语言开发基于wiringPi,如果学员对单片机或stm32的C语言开发有一定了解,是很容易上手这个树莓派的C语言开发,参考官方连接:wiringPi updated to 2.52 for the Raspberry Pi 4B | Wiring Pi
1.1、下载和安装wiringPi
备注:该操作是建立在网络已经连接好的情况下。
在命令终端操作指令如下所示。
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
图1-1-1 安装wiringPi
1.2、查看GPIO版本
安装提示成功后,输入gpio -v指令实现
图1-2-1 查看wiringPi的版本
可以看到当前的GPIO版本是2.52版本。
2、基础知识
2.1、蜂鸣器基础知识
蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种。
有源蜂鸣器和无源蜂鸣器的具体区别:请参考百度百科的知识。蜂鸣器_百度百科
本次案例中主要用到了有源蜂鸣器,有源蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号。而蜂鸣器之所以能够发出蜂鸣声主要是有压电陶瓷片。
通俗一点讲,就是蜂鸣器通电就鸣叫。
2.2、wiringPI的API接口
在使用wiringPi库时,你需要包含头文件 #include<wiringPi.h>。
2.2.1、wiringPi的GPIO引脚定义
GPIO引脚定义如下图所示:
输入gpio readall查看
gpio readall
图2-2-1 gpio引脚定义
2.2.2、硬件初始化函数
使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作。
常见的初始化函数如下所示,它们都会返回一个int值,返回 -1 表示初始化失败。
- 1、wiringPi引脚初始化
int wiringPiSetup (void)
返回状态值:-1表示执行失败
备注:
当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0-16引脚需要root权限。
- 2、BCM引脚初始化
int wiringPiSetupGpio (void)
返回状态值:-1表示执行失败
备注:
当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。需要root权限
- 3、不常用的两种接口
wiringPiSetupPhys(void)
wiringPiSetupSys (void)
2.2.3、通用的GPIO引脚功能设置
- 1、GPIO模式设置
对GPIO操作的第一步,设置GPIO的模式
void pinMode (int pin, int mode)
pin:配置的引脚
mode:指定引脚的IO模式
可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
注意:
只有wiringPi 引脚编号下的1脚(BCM下的18脚) 支持PWM输出
只有wiringPi编号下的7(BCM下的4号)支持GPIO_CLOCK输出
- 2、GPIO设置引脚电平
当GPIO设置位输出模式(OUTPUT)后,然后在用digitalWrite指定GPIO的高低电平。
void digitalWrite (int pin, int value)
pin:控制的引脚
value:引脚输出的电平值。
可取的值:HIGH,LOW分别代表高低电平
- 3、读取GPIO引脚电平
当GPIO的模式设置位输入模式(INPUT)的时候,digitalRead函数才有效。
int digitalRead (int pin)
pin:读取的引脚
返回:引脚上的电平,可以是LOW HIGH 之一
- 4、设置GPIO的PWM值
当GPIO模式设置位PWM_OUTPUT模式的时候,调用pwmWrite函数设置PWM值。
void pwmWrite (int pin, int value)
pin:引脚
value:写入到PWM寄存器的值,范围在0~1024之间。
备注:
输出一个值到PWM寄存器,控制PWM输出。
pin只能是wiringPi引脚编号下的1脚(BCM下的18脚)
- 5、GPIO拉电阻模式
对一个设置IO模式为 INPUT 的输入引脚设置拉电阻模式,树莓派内部的拉电阻达50K欧姆。
void pullUpDnControl (int pin, int pud)
pin: 引脚
pud: 拉电阻模式
可取的值:PUD_OFF 不启用任何拉电阻。关闭拉电阻。
PUD_DOWN 启用下拉电阻,引脚电平拉到GND
PUD_UP 启用上拉电阻,引脚电平拉到3.3v
3、功能实现
首先查看设备的硬件原理图,找到对应的wiringPi引脚编号,然后编写代码实现蜂鸣器的鸣叫(每隔2秒)。
3.1、蜂鸣器原理图
蜂鸣器原理图如下图3-1-1所示
图3-1-1 蜂鸣器
有源蜂鸣器,占用树莓派的GPIO0引脚,初始化引脚为输出模式,通过配置GPIO的电平,控制蜂鸣器的鸣叫。
3.2、代码编写
代码编写主要有三大步骤,初始化wiringPi、设置引脚为输出模式、控制蜂鸣器鸣叫。
#include <wiringPi.h>
#include <stdlib.h>
#include <stdio.h>
#define GPIOPIN 0 //定义蜂鸣器引脚GPIO0
int main(void)
{
int ret;
//第一步: 初始化wiringPi
ret = wiringPiSetup(); //编号为0 ,需要在root权限下才能执行
if(ret == -1)
{
printf("wiringPiSetup is error\r\n");
return ret;
}
//第二步:设置蜂鸣器引脚为输出引脚
pinMode(GPIOPIN, OUTPUT);
// 第三步:实现蜂鸣器的鸣叫,鸣叫500ms 间隔2s
for (;;)
{
digitalWrite(GPIOPIN, HIGH); delay(500);
digitalWrite(GPIOPIN, LOW); delay(2000);
}
return 0;
}
3.3、生成执行程序
编译的时候需要添加wiringPi库,编译步骤如下所示:
gcc -Wall -o beep beep.c -lwiringPi
图3-3-1 编译过程
3.4、现象
运行执行程序,蜂鸣器鸣叫。
./beep