ESP32 GPIO
时间: 2025-05-24 15:01:55 浏览: 12
### ESP32 GPIO配置与使用教程
#### 1. GPIO 配置的整体方法
ESP32 的 GPIO 可以通过整体配置的方式完成初始化。这种方式适用于需要一次性配置多个引脚的情况。主要依赖于 `gpio_config` 函数以及对应的结构体定义。
- 使用 `gpio_config_t` 结构体来描述一组 GPIO 引脚的属性,包括中断类型、工作模式(输入/输出)、上下拉电阻设置等[^1]。
```c
#include "driver/gpio.h"
void gpio_example() {
gpio_config_t io_conf = {
.intr_type = GPIO_INTR_DISABLE, // 禁用中断
.mode = GPIO_MODE_OUTPUT, // 设置为输出模式
.pin_bit_mask = (1ULL << GPIO_NUM_3), // 配置GPIO3
.pull_down_en = 0, // 关闭下拉电阻
.pull_up_en = 0 // 关闭上拉电阻
};
gpio_config(&io_conf); // 调用函数进行配置
}
```
#### 2. 单个 GPIO 的配置
对于只需要单独配置某一个 GPIO 的情况,可以使用更简单的 API 来实现功能。
- **设置方向**:可以通过 `gpio_set_direction` 函数指定某个 GPIO 是作为输入还是输出[^3]。
```c
// 将 GPIO3 设置为输出模式
gpio_set_direction(GPIO_NUM_3, GPIO_MODE_OUTPUT);
// 将 GPIO9 设置为输入模式
gpio_set_direction(GPIO_NUM_9, GPIO_MODE_INPUT);
```
- **读取或写入电平**:当 GPIO 已经被配置为输出时,可以用 `gpio_set_level` 控制其输出高低电平;如果是输入,则可通过 `gpio_get_level` 获取当前状态[^3]。
```c
// 设置 GPIO3 输出高电平
gpio_set_level(GPIO_NUM_3, 1);
// 获取 GPIO9 输入的状态
int level = gpio_get_level(GPIO_NUM_9);
if (level == 1) {
printf("GPIO9 is HIGH\n");
} else {
printf("GPIO9 is LOW\n");
}
```
#### 3. 上下拉电阻的配置
某些情况下可能需要开启内部的上拉或者下拉电阻以便稳定信号电压水平。这同样可以在单个法中处理,也可以集成到整体配置里去设定[^4]。
```c
gpio_pulldown_dis(GPIO_NUM_3); // 禁用下拉电阻
gpio_pullup_en(GPIO_NUM_3); // 启用上拉电阻
```
#### 4. 中断触发机制
如果希望利用外部事件驱动程序逻辑运行而非轮询检测变化的话,那么就需要涉及到中断服务例程的设计了。下面是一个基本的例子展示如何注册并响应来自特定 IO 的边缘敏感型中断请求[^5]:
```python
from machine import Pin
def handle_interrupt(pin):
print('Interrupt occurred on pin', pin)
p_in = Pin(0, Pin.IN, Pin.PULL_UP) # 定义输入引脚,并激活上拉
p_in.irq(trigger=Pin.IRQ_FALLING, handler=handle_interrupt)
```
---
###
阅读全文
相关推荐
















