树莓派-wiringPi-GPIO

本文详细介绍了树莓派上GPIO接口的使用方法,包括设置引脚模式、上下拉配置、数字信号的读写操作及PWM输出等。此外还提到了模拟量输入输出功能,并对比了wiringPi-C与raspberry-gpio-python库在控制速度上的差异。

原文地址:http://nicekwell.net/blog/20171122/shu-mei-pai-wiringpi-gpio.html


GPIO接口在官网有详细的说明:http://wiringpi.com/reference/core-functions/

wiringPi的GPIO序号如下:
1.jpg

void pinMode (int pin, int mode) ;
设置GPIO模式。
pin是引脚序号,以何种方式编号在前面决定。
mode可以设置为:

INPUT
OUTPUT
PWM_OUTPUT
GPIO_CLOCK
SOFT_PWM_OUTPUT
SOFT_TONE_OUTPUT
PWM_TONE_OUTPUT

只有具有相应功能的引脚才能设置为该功能。

void pullUpDnControl (int pin, int pud) ;
设置上下拉。
pin是引脚序号,以何种方式编号在前面决定。
pud是上下拉配置,可设置为:

PUD_OFF 无上下拉
PUD_UP 上拉,3.3v,50kΩ
PUD_DOWN 下拉,50kΩ

void digitalWrite (int pin, int value) ;
设置指定引脚的输出。
pin是引脚序号,以何种方式编号在前面决定。
value是输出值,可以设置为:

HIGH 或 非0 高电平(3.3v)
LOW 或 0 低电平

void digitalWriteByte (int value) ;

int digitalRead (int pin) ;
读取指定引脚。
pin是引脚序号,以何种方式编号在前面决定。
返回的是该引脚的电平,返回HIGH或LOW。

void pwmWrite (int pin, int value) ;
设置pwn输出占空比。
pin是引脚序号,以何种方式编号在前面决定。(最新的树莓派里面好像把pwm功能去掉了)
value是占空比,范围是0~1023。
???在哪设置pwm的周期呢?

analogRead (int pin) ;
读入模拟量(AD)。
analogWrite (int pin, int value) ;
输出模拟量(DA)。
以上两个功能需要外加芯片,这里略去。

wiringPi-C控制GPIO的速度
2.png
高低电平变化响应速度大约是80ns。(raspberry-gpio-python的速度大约是2us,大约是它的25倍)
注意,wiringPi-C也是在上层的程序,输出的波形同样是不稳定的。


### WiringPi 支持树莓派GPIO 3.6 吗? WiringPi 是一个用于操作树莓派 GPIO 引脚的库,它支持多种版本的树莓派和不同的操作系统。在树莓派 5 上,WiringPi 的版本已经更新到 3.6,并且仍然可以正常运行。以下是一个示例输出,展示了 WiringPi 的版本信息: ``` gpio version: 3.6 Copyright (c) 2012-2024 Gordon Henderson and contributors This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty ``` 这表明 WiringPi 3.6 是支持树莓派 5 的,而树莓派 4B 也能够运行该版本[^2]。 ### 如何在树莓派上使用 WiringPi 控制 GPIO 引脚 #### 1. 安装 WiringPi 在开始之前,确保你的树莓派系统中已经安装了 WiringPi。你可以通过以下命令从 GitHub 上克隆 WiringPi 的源代码并进行编译安装: ```bash git clone https://github.com/WiringPi/WiringPi.git cd WiringPi ./build ``` 安装完成后,可以通过 `gpio -v` 命令验证是否安装成功。 #### 2. 使用 WiringPi 控制 GPIO 引脚 WiringPi 提供了一系列 API 来操作 GPIO 引脚,例如: - `wiringPiSetup()`:初始化 WiringPi,使用 WiringPi 的针脚编号方式。 - `pinMode(int gpioPort, OUTPUT)`:设置指定 GPIO 引脚的模式,可以是 `OUTPUT`(输出)、`INPUT`(输入)或 `PWM_OUTPUT`(PWM 输出)。 - `digitalWrite(int gpioPort, int level)`:向指定 GPIO 引脚写入高电平(1)或低电平(0)。 - `digitalRead(int gpioPort)`:读取指定 GPIO 引脚的逻辑电平。 - `pwmWrite(int gpioPort, int value)`:向指定 GPIO 引脚写入 PWM 值。 以下是一个简单的示例代码,展示了如何使用 WiringPi 控制 GPIO 引脚: ```c #include <wiringPi.h> #include <stdio.h> #define LED_PIN 0 // 使用 WiringPi 编号方式的 GPIO 引脚 0 int main(void) { // 初始化 WiringPi if (wiringPiSetup() == -1) { printf("WiringPi 初始化失败!\n"); return 1; } // 设置 LED_PIN 为输出模式 pinMode(LED_PIN, OUTPUT); // 循环点亮和熄灭 LED while (1) { digitalWrite(LED_PIN, HIGH); // 点亮 LED delay(500); // 延迟 500 毫秒 digitalWrite(LED_PIN, LOW); // 熄灭 LED delay(500); // 延迟 500 毫秒 } return 0; } ``` 编译并运行该代码: ```bash gcc -o blink blink.c -lwiringPi ./blink ``` 这段代码将控制 GPIO 引脚 0(WiringPi 编号)上的 LED 以 1 秒的间隔闪烁。 #### 3. WiringPi 的针脚编号方式 WiringPi 使用自己的针脚编号方式,与树莓派的物理针脚编号不同。你需要确保你使用的针脚编号与 WiringPi 的映射表一致。可以通过 `gpio readall` 命令查看树莓派上所有 GPIO 引脚的映射情况。 ### 4. 注意事项 - WiringPi 的针脚编号与树莓派的物理针脚编号不同,请确保你使用的是正确的编号方式。 - WiringPi 支持硬件 PWM 和软件 PWM,可以通过 `pwmWrite()` 和 `softPWMCreate()` 函数实现。 - 如果你使用的是较新的树莓派(如树莓派 5),请确保你安装的是最新版本的 WiringPi,以获得最佳兼容性[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值