ESP32S3 ——点亮一个LED

ESP32S3 ——点亮一个LED

所谓工欲善其事,必先点其灯。

点灯应该是每位工程师拿到一块新板子时,第一件做的事。

本篇主要介绍如何操纵esp32S3的IO口,并用IO口使一个led闪烁。

在这里插入图片描述

如下是ESP-IDF的编程指南,在后面的学习过程中,会经常使用,可以添加一个书签。

GPIO & RTC GPIO

esp32S3 IO介绍

ESP32-S3 芯片具有 45 个物理 GPIO 管脚(GPIO0 ~ GPIO21 和 GPIO26 ~ GPIO48)。每个管脚都可用作一个通用 IO

更位厉害的是,通过 IO MUX、RTC IO MUX 和 GPIO 交换矩阵,可配置外设模块的输入信号来源于任何的 IO 管脚,并且外设模块的输出信号也可连接到任意 IO 管脚。不过,关于这项技术,将在其他篇章再做了解,不在本篇深入。

配置IO口

关于IO口的配置,这里提供了两种方法

方法1:

#define LED_IO 38
void led_io_config(void)
{
	gpio_config_t io_conf;
	io_conf.pin_bit_mask = (1ULL<<LED_IO) ;
	io_conf.intr_type = GPIO_INTR_DISABLE;
	io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
	io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
	io_conf.mode =GPIO_MODE_OUTPUT;
	gpio_config(&io_conf);
}

通过设置一个结构体gpio_config_t,将IO38配置为输出模式,无上拉下拉且不支持中断。

使用该方法的好处就是随心所欲,你可以按照自己的意向将对应的IO口配置为输入或输出,上拉或下拉,边沿中断或电平中断。。。。

方法2:

这是一种更为简易的配置方法

gpio_reset_pin(LED_IO );
gpio_set_direction(LED_IO , GPIO_MODE_OUTPUT);//输出

先通过gpio_reset_pin函数初始化一个IO口,然后再使用gpio_set_direction函数配置这个函数的输入输出模式。

让我们点进gpio_reset_pin函数,看看它究竟干了些什么

esp_err_t gpio_reset_pin(gpio_num_t gpio_num)
{
    assert(GPIO_IS_VALID_GPIO(gpio_num));
    gpio_config_t cfg = {
        .pin_bit_mask = BIT64(gpio_num),
        .mode = GPIO_MODE_DISABLE,
        //for powersave reasons, the GPIO should not be floating, select pullup
        .pull_up_en = true,
        .pull_down_en = false,
        .intr_type = GPIO_INTR_DISABLE,
    };
    gpio_config(&cfg);
    return ESP_OK;
}

可以看到本质上这个函数也是配置gpio_config_t结构体

IO口操控

配置完IO口后,让我们再来认识一个IO口控制函数:

esp_err_t gpio_set_level(gpio_num_t gpio_num, uint32_t level)

该函数可以设置IO口的高低电平

例:

gpio_set_level(LED_IO, 0);//将led引脚配置为低电平
gpio_set_level(LED_IO, 1);//将led引脚配置为高电平

点个灯先

通过现有的知识,我们可以编写一个最为简易的LED灯闪烁的程序

#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include "driver/gpio.h"
#define LED_IO 38
extern void led_wink(void);
void app_main(void)
{
	gpio_reset_pin(LED_IO);
	gpio_set_direction(LED_IO, GPIO_MODE_OUTPUT);//输出

    while (true) {
    	led_wink();
        sleep(1);
    }
}

void led_wink(void)
{
	static uint8_t flag =0;
	if(flag == 0)
	{
		gpio_set_level(LED_IO, 1);//将led引脚配置为高电平;
		flag =1;
	}
	else
	{
		gpio_set_level(LED_IO, 0);//将led引脚配置为高电平;
		flag =0;
	}
}
ESP32-S3是一款由Espressif Systems公司开发的单片机,集成了Wi-Fi和蓝牙功能,常用于物联网(IoT)应用。在Arduino中使用ESP32S3控制LED灯和按键,你可以按照以下步骤操作: 1. **硬件连接**: - 将LED灯的正极连接到ESP32 S3的GPIO引脚(通常是数字IO pin,如D1或D2)。 - 将LED灯的负极接到GND。 - 按键连接到另一个GPIO引脚(如D3或D4),通常使用中断模式来检测按键按下事件。 2. **软件配置**: - 在Arduino IDE中,选择适合ESP32-S3的Boards(如`Espressif ESP32S3`)。 - 使用`#include <WiFi.h>` 和 `#include <ArduinoJson.h>` 或其他必要的库(如果要处理网络请求)。 - 初始化GPIO,设置按键的中断模式,并为LED灯定义一个函数,比如`void ledOn()`和`void ledOff()`来控制亮度。 ```cpp void setup() { // 初始化GPIO pinMode(LED_PIN, OUTPUT); // LED PIN是你的LED灯对应引脚 pinMode(KEY_PIN, INPUT_PULLUP); // KEY_PIN是你的按键对应引脚,设置为上拉 // 如果需要,注册按键中断 attachInterrupt(digitalPinToInterrupt(KEY_PIN), keyPressHandler, RISING); } void loop() { if (keyPressed()) { // 判断按键是否被按下 digitalWrite(LED_PIN, HIGH); // LED亮起 } else { digitalWrite(LED_PIN, LOW); // LED熄灭 } } void keyPressHandler() { digitalWrite(LED_PIN, HIGH); // 按键按下时,点亮LED delay(1000); // 示例中短暂保持点亮状态,可根据需求修改 digitalWrite(LED_PIN, LOW); // 松开按键后,LED熄灭 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值