ESP32-GPIO基本输入输出

前言

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输出

通过函数 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输入

通过函数 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

标签:输入输出   示意图   模组   初始化   函数   接口   定义   参数   模式   方式

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top