ESP32 IDF GPIO控制

  • 本文采用API函数设置的方式。
  • 还有通过结构体的方式进行配置的方式可参考文末文献。

相关函数

gpio_pad_select_gpio(BLINK_GPIO);// 选择要操作的GPIO
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式
gpio_set_level(gpio_pin[i], 0);// GPIO输出低

demo

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "sdkconfig.h"
#include <esp_log.h>
#include "driver/gpio.h"

#define GPIO12 12
#define GPIO13 13
#define GPIO14 14
#define GPIO15 15
#define GPIO02 02

#define GPIO25 25
#define GPIO32 32
#define GPIO33 33
/* 只能设置为输入 */
#define GPIO34 34
#define GPIO35 35
#define GPIO36 36
#define GPIO37 37
#define GPIO38 38
#define GPIO39 39

uint8_t gpio_pin[] = {GPIO12, GPIO13, GPIO14, GPIO15, GPIO02, GPIO25, GPIO32, GPIO33, GPIO33, GPIO34, GPIO35, GPIO36, GPIO37, GPIO38, GPIO39};

void app_main(void)
{
	ESP_LOGI(TAG, "APP Start......");

	gpio_pad_select_gpio(BLINK_GPIO);// 选择要操作的GPIO
	gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式

	for(uint8_t i = 0; i < sizeof(gpio_pin)/sizeof(*gpio_pin); i++) {
		gpio_pad_select_gpio(gpio_pin[i]);// 选择要操作的GPIO
		gpio_set_direction(gpio_pin[i], GPIO_MODE_OUTPUT);// 设置GPIO为推挽输出模式
		printf("set gpio pin %d \r\n", gpio_pin[i]);
	}

	while(1) {
		ESP_LOGI(TAG, "Turning On the LED\n");
		gpio_set_level(BLINK_GPIO, 0);// GPIO输出低
		for(uint8_t i = 0; i < sizeof(gpio_pin)/sizeof(*gpio_pin); i++) {
			gpio_set_level(gpio_pin[i], 0);// GPIO输出低
		}
		vTaskDelay(1000 / portTICK_PERIOD_MS);
		
		ESP_LOGI(TAG, "Turning Off the LED\n");
		gpio_set_level(BLINK_GPIO, 1);// GPIO输出高
		for(uint8_t i = 0; i < sizeof(gpio_pin)/sizeof(*gpio_pin); i++) {
			gpio_set_level(gpio_pin[i], 1);// GPIO输出高
		}
		vTaskDelay(1000 / portTICK_PERIOD_MS);
	}
}

运行结果

在这里插入图片描述

参考

参考官方案例
参考

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值