树梅派学习 9. wiringPi库学习

wiringpi 库安装参见:

https://blog.csdn.net/xundh/article/details/81806526

wiringPi GPIO 和 BCM2835 GPIO映射关系

这里写图片描述

命令行使用示例:

命令行设置引脚:

gpio readdall
gpio -g mode 17 out
gpio -g write 17 0 //设置为低电平

使用

一般分为4步骤:
上面的代码非常简单,可以分为四个部分——wiringPiSetupi初始化、pinMode设置IO为输出方向、digitalWrite输出高电平或低电平和delay系统延时函数。

C 部分示例

wiringPiSetup(); //初始化
   
int i = 0;
// 设置IO口全部为输出状态
for( i = 0 ; i < 8 ; i++ )
    pinMode(i, OUTPUT);
       
    for (;;)
    {
        for( i = 0 ; i < 8 ; i++ )
        {
            // 点亮500ms 熄灭500ms
            // 输出
            digitalWrite(i, HIGH); delay(500);
            digitalWrite(i, LOW); delay(500);
        }
    }

// 读取引脚状态
	digitalRead(BtnPin);   //1 输入高电平  0 输入低电平

Python 部分示例

import wiringpi 	#老版本是导入wiringpi2,新版本改为wiringpi

wiringpi.wiringPiSetup() 					#设置GPIO编号为wPi方式
wiringpi.wiringPiSetupSys() 			#设置GPIO编号为BCM方式
wiringpi.wiringPiSetupGpio() 			#设置GPIO编号为BCM方式
wiringpi.pinMode(6,1) 						#设置pin6为输出
wiringpi.digitalWrite(6,1) 					#pin6电平置为高
wiringpi.digitalRead(6) 					#读取pin6的电平

--------------------- 

常用函数

初始化函数

函数返回值说明
int wiringPiSetup (void)返回:执行状态,-1表示失败当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16
int wiringPiSetupGpio (void)返回执行状态,-1表示失败当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。
wiringPiSetupPhys(void)不常用,不做介绍
wiringPiSetupSys (void)不常用,不做介绍

通用GPIO工作模式

1.void pinMode (int pin, int mode) ;

这个函数式设置pin脚的输入和输出模式以及PWM的输入和输出模式。在wiringPi中只有 pin 1 (BCM_GPIO 18)是支持PWM的输出的。

2.void digitalWrite (int pin, int value) ;

这个函数式用来设置pin脚的高低电平的,当我们写HIGH or LOW (1 or 0)的时候pin脚的mode必须为输出模式。

3.void digitalWriteByte (int value) ;

这个函数可以将8位字节写给8个GPIO pin脚,这是设置8个pin脚值的最快的方式。

4.void pwmWrite (int pin, int value) ;

写入的值必须是0-1024。输出一个值到PWM寄存器,控制PWM输出。pin只能是wiringPi 引脚编号下的1脚(BCM下的18脚)

5.int digitalRead (int pin) ;

这个函数是读取GPIO的pin脚的电平高低然后返回读取的值。

6.void pullUpDnControl (int pin, int pud) ;

这个函数是设置GPIO的pin脚是否接上拉电阻和下拉电阻的。函数的参数pud必须设置,当设置为PUD_OFF时表示没有上拉电阻和下拉电阻,当设置为PUD_DOWN 时为下拉电阻,设置为PUD_UP是为上拉电阻。

7. void analogWrite(int pin, int value)

pin:引脚
value:输出的模拟量
模拟量输出 树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API,

需要增加另外的模块

8. int analogRead (int pin)

pin:引脚
返回:引脚上读取的模拟量
模拟量输入 树莓派的引脚本身是不支持AD转换的,也就是不能使用模拟量的API,需要增加另外的模块

PWM的控制:

1.pwmSetMode (int mode) ;

这个函数是设置PWM的占空比模式一般为50%占空比和占空比可调模式。树莓派默认是50%占空比模式,我们可以通过PWM_MODE_BAL 和PWM_MODE_MS这两个参数来设置。

2.pwmSetRange (unsigned int range) ;

这个函数是设置PWM寄存器写入的范围,一般默认为1024.

3.pwmSetClock (int divisor) ;

这个函数的设置PWM时钟的分频因子。

时间控制函数:

1.void delay (unsigned int howLong)

这个是毫秒级的延时函数。

2.void delayMicroseconds (unsigned int howLong)

微秒级的延时函数

3. unsigned int millis (void)

这个函数返回 一个 从你的程序执行 wiringPiSetup 初始化函数(或者wiringPiSetupGpio ) 到 当前时间 经过的 毫秒数。
返回类型是unsigned int,最大可记录 大约49天的毫秒时长。

4. unsigned int micros (void)

这个函数返回 一个 从你的程序执行 wiringPiSetup 初始化函数(或者wiringPiSetupGpio ) 到 当前时间 经过的 微秒数。
返回类型是unsigned int,最大可记录 大约71分钟的时长。

关于中断的函数:

1.int waitForInterrupt (int pin, int timeOut) ;

这一个等待事件中断函数,timeout参数是毫秒级别的参数,当为-1时代表永远等待中断状态。如果发生错误返回值是-1,0表示超时,1表示成功中断。调用这个函数之前我们需要对GPIO进行初始化。

例如我们要设置GPIO 0为等待下降沿中断:

我们需要在运行程序之前先终端运行 gpio edge 0 falling

2.int wiringPiISR (int pin, int edgeType, void (*function)(void)) ;

这个函数是利用一个函数作为参数来获取在特定的GPIO pin脚的中断。edge_Type参数可以设定为 INT_EDGE_FALLING, INT_EDGE_RISING, INT_EDGE_BOTH or INT_EDGE_SETUP.

当中断发生的时候function将被调用,调用function之前会先清除相应的标志位,这就使得随后的中断不会被影响。

wiringPI 库详细分析参见:
https://blog.csdn.net/xukai871105/article/details/17881433

更多函数参见:
https://www.cnblogs.com/lulipro/p/5992172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程圈子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值