NodeMCU-32_V1.3 开发板 模组共接出 38 个接口,如管脚示意图,管脚功能定义表是接口
定义。
components/driver/include/driver/gpio.h
通过调用 gpio_config(const gpio_config_t *pGPIOConfig)函数完成GPIO的初始化
gpio_config(const gpio_config_t *pGPIOConfig)
GPIO通用配置,配置 GPIO 的模式、上拉、下拉、输入类型。
返回值:
ESP_OK成功
ESP_ERR_INVALID_ARG 参数错误
参数:
gpio_config_t
struct gpio_config_t{
uint64_t pin_bit_mask;
gpio_mode_t mode;
gpio_pullup_t pull_up_en;
gpio_pulldown_t pull_down_en;
gpio_int_type_t intr_type;
}
pin_bit_mask设置需要操作的GPIO引脚,例如我要设置GPIO16和GPIO21则pin_bit_mask应该设置为(1ULL << 1 | 1ULL << 33)
mode用于设置gpio的模式
GPIO_MODE_INPUT 输入
GPIO_MODE_OUTPUT 输出
GPIO_MODE_OUTPUT_OD 开漏输出(如果外部或者内部不上拉电阻则无法输出高电平)
GPIO_MODE_INPUT_OUTPUT_OD 开漏输入输出
GPIO_MODE_INPUT_OUTPUT 输入输出
pull_up_en用于设置是否上拉
pull_down_en用于设置是否下拉
gpio_int_type_t intr_type用于设置GPIO中断相关属性
通过函数 gpio_set_level() 设置。
esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)
参数:
gpio_num:输出引脚
level:输出方式
1:高电平
0:低电平
返回值:
ESP_OK Success
ESP_ERR_INVALID_ARG GPIO number error
通过函数 gpio_get_level()获取
int gpio_get_level(gpio_num_t gpio_num)
参数:
gpio_num:指定引脚
返回值:
0:输入为低电平
1:输入为高电平
#include
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "nvs_flash.h"
#include "esp_log.h"
#include "driver/gpio.h"
const static char *TAG = "GPIO";
static void System_Init(void);
void app_main(){
ESP_LOGI(TAG,"System initializtion");
System_Init();
ESP_LOGI(TAG, "GPIO initializtion");
//配置GPIO16为输出
gpio_config_t gpio = {
.intr_type = GPIO_INTR_DISABLE, //关闭中断
.mode = GPIO_MODE_OUTPUT, //输出模式
.pin_bit_mask = 1ULL << GPIO_NUM_16, //16引脚
.pull_down_en = GPIO_PULLDOWN_DISABLE, //关闭下拉
.pull_up_en = GPIO_PULLUP_ENABLE //开启上拉
};
gpio_config(&gpio);
//配置GPIO为输入
gpio_config_t gpio_two = {
.intr_type=GPIO_INTR_DISABLE,
.mode=GPIO_MODE_INPUT,
.pin_bit_mask = 1ULL << GPIO_NUM_21,
.pull_down_en = GPIO_PULLDOWN_ENABLE,
.pull_up_en =GPIO_PULLUP_DISABLE
};
gpio_config(&gpio_two);
int temp;
while (1){
//设置输出
gpio_set_level(GPIO_NUM_16,1);
//设置输入
temp = gpio_get_level(GPIO_NUM_21);
ESP_LOGI(TAG,"gpio 16 level is %d",temp);
vTaskDelay(500 / portTICK_PERIOD_MS); //延时
gpio_set_level(GPIO_NUM_16,0);
temp = gpio_get_level(GPIO_NUM_21);
ESP_LOGI(TAG,"gpio 16 level is %d",temp);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
static void System_Init(void){
esp_err_t ret = nvs_flash_init();
if(ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){
ESP_ERROR_CHECK(ret);
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
}
将GPIO16和GPIO21短接之后就可以看到输出结果,获取的输入电压在1和0之间不停变换
运行结果:
页面更新:2024-03-15
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号