ESP32S3 -- Arduino


参考:(正点原子)DNESP32S3 V1.0 硬件参考手册、(正点原子)DNESP32S3使用指南-Arduino版本_V1.1、ESP32-S3 技术规格书、(正点原子)标准例程-Arduino版

1. 综述:


1.1 资料获取

在Arduino 官网中找到官方开发板资料和Arduino 函数说明:

  1. 打开Arduino 官网 ;
  2. 点击Documentation;
    在这里插入图片描述
  3. 点击Tutorials;
    在这里插入图片描述
  4. 搜索关键字“ESP32”
    在这里插入图片描述

乐鑫公司提供的 arduino_esp32库的资料:
https://github.com/espressif/arduino-esp32
这是乐鑫公司专门为了 ESP32 能在 Arduino IDE 软件上运行专门编写的库包。后续在 Arduino IDE 上开发 ESP32 是依靠该库包,并不是 Arduino 官方提供的 Arduino ESP32 Boards 软件包


正点原子的学习资料:
http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

1.2 Arduino 简介

Arduino(Arduino Integrated Development Environment 、集成开发环境)是一个开源电子原型平台,由硬件和软件组成,旨在让任何人都能轻松创建交互式电子项目;

简单来说,只要是搭载 Arduino 支持芯片的开发板都可以称为 Arduino 开发板。目前支持 Arduino 开发的芯片有很多,比如 Mega 系列芯片(Mega328p/Mega2560/Mega32u4 等)、STM32 系列芯片(STM32F0/F1/F2/F3/F4/F7/H7 等)、ESP 系列芯片(esp32/esp32s2/esp32c3/esp32s3 等)以及树莓派系列芯片等。

这里的实质就是有每个系列芯片对应要有一个 Arduino 库,比如乐鑫官方的arduino-esp32 库,ST 的 stm32duino 库,只要在 Arduino 安装这种芯片库便可以使用 Arduino 的语法在 Arduino IDE 上对芯片进行开发。
在这里插入图片描述- –

  • Arduino IDE 可以在 Windows、Mac OS 和 Linux 三大主流操作系统上运行;
  • Arduino 使用 C/C++语言编写程序,以下是在不同框架内开发的例程:
  1. 在使用 ESP-IDF(乐鑫科技开发的官方物联网开发框架)对 ESP32 进行开发中,将一个 I/O 口设置为输出高电平状态需要以下操作:
gpio_set_direction(GPIO_NUM_1, GPIO_MODE_OUTPUT);
gpio_set_level(GPIO_NUM_1, PIN_SET);
  1. 在 Arduino 中,采用的是如下代码去设置 IO 口输出高电平:
PinMode(1, OUTPUT);
digitalWrite(1, HIGH);
  • 在 Arduino 程序的应用层中,是没有 main 函数的,这跟传统的 C/C++程序结构有所不同。在进行 Arduino 开发时一般不直接操作 main 函数,而使用 setup()和 loop()这两个函数:
void setup() {
   
// 在这里填写 setup 函数代码,它只会运行一次
}
void loop() {
   
// 在这里编写 loop 函数代码,它会不断重复运行
}

1.2.1 Arduino 开发环境搭建

ESP32 的开发方式主要有三种:ESP-IDF、Arduino 和 MicroPython:

  1. ESP-IDF:ESP-IDF 是乐鑫官方推出的开发框架,专门为 ESP32 和其他一些 ESP 系列芯片设计。它提供了一套完整的开发工具和库,可以帮助开发者快速地开发和调试 ESP32 应用程序。ESP-IDF 支持 C/C++语言,并提供了一套完整的 API,可以控制 ESP32 的各种功能和外设。此外,ESP-IDF 还提供了一个在线编译器和调试器,可以让开发者在云端进行开发和调试。
  2. Arduino:Arduino 是一种流行的开源电子原型平台,包括一系列的开发板和开发环境。Arduino 提供了一种基于 C/C++的语言,使得开发者可以更容易地控制和编程 ESP32。Arduino开发环境还提供了大量的库和函数,可以帮助开发者快速地构建和测试他们的代码。Arduino 还支持图形化编程,使得初学者和非专业人士也可以轻松地进行开发。本教程选择此开发方式。
  3. MicroPython:MicroPython 是一种精简的 Python 3 语言,可以运行在 ESP32 和其他一些微控制器上。它提供了一种简单的方式来编程和控制 ESP32,而且由于 Python 是一种高级语言,它使得开发过程相对快速和简单。开发者可以使用 MicroPython 进行快速原型设计和开发,并且由于 Python 是一种解释型语言,所以可以直接在 ESP32 上运行代码,无需进行编译。

  1. 软件下载与安装:到Arduino 官网下载并安装软件;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 配置首选项:文件 - 首选项:
    在这里插入图片描述

1.2.2 安装 arduino-esp32 库

  1. https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls搜索ESP32,找到如下链接:
    在这里插入图片描述
  2. 在IDE 中的首选项中的“其他开发板管理器地址”中添加:
    在这里插入图片描述
  3. 此时在本机路径“C:\Users\用户名\AppData\Local\Arduino15”中会多出一个文件“package_esp32_index.json”;
  4. 将12个离线库文件复制粘贴到路径“C:\Users\用户名\AppData\Local\Arduino15\staging\packages”
    在这里插入图片描述
  5. 回到IDE,在侧边栏开发板管理器中,搜索“ESP32”,选择对应版本点安装,即可完成本地库安装;(注意版本要和本地库版本一致)
    在这里插入图片描述

如果网络允许,可直接点击上图“安装”,完成在线安装;

  1. 安装完成后,在对应路径即可看到esp32 的库文件夹:
    在这里插入图片描述
    在开发板选项中,也多了esp32的选项;
    在这里插入图片描述

1.2.3 完成开发板配置

  1. 选择开发板:工具 - 开发板 - esp32 - ESP32S3 Dev Module;
  2. 此后,工具栏则多了很多配置项,配置完成后如下图:
    在这里插入图片描述

配置参数说明可查看该网站https://www.corvin.cn/3258.html

1.2.4 工程内全局搜索

在这里插入图片描述

1.3 ESP32简介

ESP32是乐鑫公司开发的物联网芯片:
在这里插入图片描述
ESP32官方选型页面

1.3.1 ESP32-S3

ESP32-S3 是一款由乐鑫公司开发的物联网芯片:

  1. 架构和性能:ESP32-S3 采用 Xtensa® LX7 CPU,这是一个哈佛结构的双核系统。它具有独立的指令总线和数据总线,所有的内部存储器、外部存储器以及外设都分布在这两条总线上。这种架构使得 CPU 可以同时读取指令和数据,从而提高了处理速度。
  2. 存储:ESP32-S3 具有丰富的存储空间。它内部有 384 KB 的内部 ROM,512 KB 的内部SRAM,以及 8 KB 的 RTC 快速存储器和 8 KB 的 RTC 慢速存储器。此外,它还支持最大 1 GB的片外 FLASH 和最大 1 GB 的片外 RAM。
  3. 外设:ESP32-S3 具有许多外设,总计有 45 个模块/外设。其中 11 个具有 GDMA(Generic DMA)功能,可以用来进行数据块的传输,减轻 CPU 的负担,提高整体性能。
  4. 通信:ESP32-S3 同时支持 WIFI 和蓝牙功能。在 2.4GHz 频带支持 20MHz 和 40MHz 频宽。
  5. 向量指令:ESP32-S3 增加了用于加速神经网络计算和信号处理等工作的向量指令。这些向量指令可以大大提高芯片在 AI 方面的计算速度和效率。

ESP32-S3 资源简介:
在这里插入图片描述


乐鑫 S3 系列型号包括 ESP32-S3、ESP32-S3R2、ESP32-S3R8 和 ESP32-S3FN8 等,不同型号的 MCU 有不同的应用场景,这些型号的命名规则如下:
在这里插入图片描述

以ESP32-S3FH4R2这一芯片为例:
在这里插入图片描述

1.3.2 S3 系列模组

除了 S3 系列的芯片之外,乐鑫还推出了 S3 系列的模组,它是 S3 系列芯片的简易系统。乐鑫 S3 系列模组是基于 S3 系列芯片的子系统,它已经设计好了外围电路,简化了开发过程,让开发者可以更快速地使用 S3 系列芯片进行开发。
在这里插入图片描述

乐鑫推出了 ESP32-S3-WROOM-1 和 ESP32-S3-WROOM-1U 两款通用型 Wi-Fi+低功耗蓝牙MCU 模组,如下图所示,它们搭载 ESP32-S3 系列芯片。除具有丰富的外设接口外,模组还拥有强大的神经网络运算能力和信号处理能力,适用于 AIoT 领域的多种应用场景,例如唤醒词检测和语音命令识别、人脸检测和识别、智能家居、智能家电、智能控制面板、智能扬声器等。
在这里插入图片描述
可见,ESP32-S3-WROOM-1 采用 PCB 板载天线,而 ESP32-S3-WROOM-1U 采用连接器连接外部天线。两款模组均有多种芯片型号可供选择,具体见下表所示:
在这里插入图片描述

1.4 boot 启动流程

从宏观上,该启动流程可分为如下 3 个步骤:

  1. 一级引导程序,它被固化在 ESP32-S3 内部的 ROM 中,它会从 flash 的 0x00 处地址加载二级引导程序至 RAM 中。
  2. 二级引导程序从 flash 中加载分区表和主程序镜像至内存中,主程序中包含了 RAM 段和通过 flash 高速缓存映射的只读段。
  3. 应用程序启动阶段运行,这时第二个 CPU 和 freeRTOS 的调度器启动,最后进入app_main 函数执行用户代码。

1.5 Arduino-esp32 库

Arduino-esp32 库是一个在 Arduino 平台上开发 ESP32 的插件,它为 Arduino 环境下的ESP32 芯片提供了支持。它允许使用熟悉的 Arduino 函数和库编写代码,并直接在 ESP32 上运行。

Arduino-esp32 库支持对 ESP32、ESP32-S2、ESP32-S3、ESP32-C3、ESP32-C6 和 ESP32-H2进行开发,还提供了很多基础库:
在这里插入图片描述

3. GPIO


对于 ESP32-S3 模组引出的 IO,每个管脚都可用作一个通用 IO,或连接一个内部外设信号;

GPIO 口输出来的信号是以 0,1 表示的不连续数字信号。在 Arduino 中数字信号用高低电平来表示,高电平为数字信号 1,低电平为数字信号 0;Arduino 输出的低电平为 0V,输出的高电平为当前 Arduino 的工作电压,对于 ESP32-S3 模组的工作电压为 3.3V,则其高电平为 3.3V;
在这里插入图片描述

3.1 核心代码

新建工程后,选择对应串口和对应芯片:
在这里插入图片描述
在这里插入图片描述

  1. 硬件上使用IO1控制LED,IO0控制按钮;
  2. 新建一个工程,新建“led.h”头文件,并编写:
#define LED_PIN 1

void led_init(void)
{
   
  pinMode(LED_PIN, OUTPUT); 
  digitalWrite(LED_PIN, HIGH); 
}
  1. 新建一个工程,新建“key.h”头文件,并编写:
#define KEY_PIN 0
#define KEY     digitalRead(KEY_PIN) /* 读取 KEY 引脚的状态 */

void key_init(void)
{
   
  /* 结合原理图设计,按键没有按下时,KEY 引脚检测到的是高电平 */
  pinMode(KEY_PIN, INPUT_PULLUP); /* 设置 key 引脚为上拉输入模式 */
}
  1. 在工程文件中编写:
#include "led.h"
#include "key.h"


#define LED(x) digitalWrite(LED_PIN, x)
#define LED_TOGGLE() digitalWrite(LED_PIN, !digitalRead(LED_PIN))


void setup() {
   
  // put your setup code here, to run once:
  led_init(); /* LED 初始化 */
  key_init(); /* KEY 初始化 */
}

void loop() {
   
  if (KEY == 0) /* 读取 KEY 状态,如果按下 KEY */
  {
   
    delay(10);
    if (KEY == 0)
    {
   
      LED(0); /* LED 引脚输出接低电平,点亮 */
    }
  }
  else /* 读取 KEY 状态,如果 KEY 没有按下 */
  {
   
    LED(1); /* LED 引脚输出接高电平,熄灭 */
  }
}

  1. 点击IDE 上传按钮,编译通过后,即烧录到ESP32中,观察效果;

4. 中断


外部中断是由外部设备发起请求的中断。

每个中断对应一个中断程序,中断程序可以看作一段独立于主程序之外的程序,也称为中断回调函数。

当中断被触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序。当中断程序运行完毕,则返回到先前主程序暂停的位置,继续运行主程序,如此便可达到实时响应处理事件的效果。
在这里插入图片描述


ESP32-S3 的中断:ESP32-S3 有 99 个外部中断源,但是 CPU0 或 CPU1 只能够处理 32 个中断。ESP32-S3 将外部中断映射到 CPU0 或 CPU1 中断就需要用到中断矩阵。

ESP32-S3 中断矩阵会将任一外部中断源单独分配到双核 CPU 的任一外部中断上,以便在外设中断信号产生后,及时通知 CPU0 或 CPU1 进行处理。
在这里插入图片描述


ESP32-S3 的中断模式
在这里插入图片描述


4.1 核心代码

  1. attachInterrupt :该函数功能是指定中断引脚,并对中断引脚进行初始化设置;
void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode);
/*
参数 pin 为要设置中断触发输入的引脚,ESP32-S3 所有引脚均可以配置为外部中断引脚。
参数 handler 为中断回调函数,当引脚中断触发时,会终止当前运行的程序,转而执行该程序。
参数 mode 为 5 种中断触发模式
*/

// 很多时候,attachInterrupt 函数的使用也采用以下方式。
attachInterrupt(digitalPinToInterrupt(pin), handler, mode);
/* 在一些 Arduino 开发板中比如 Arduino Uno、Leon
### 使用ESP32-S3进行Arduino开发的键盘控制示例项目 #### 介绍 ESP32-S3是一款功能强大的微控制器,支持Wi-Fi和蓝牙连接。通过Arduino IDE可以方便地对其进行编程。为了展示如何使用ESP32-S3来模拟USB HID设备并发送按键事件到计算机,下面提供了一个简单的例子。 #### 准备工作 确保已经安装好最新的Arduino IDE,并按照官方指导配置好了ESP32-S3的支持包[^4]。接着需要设置正确的开发板选项:“工具” -> “开发板”,选择“ESP32-S3 Dev Module”。 #### 示例代码 此程序会将ESP32-S3当作一个虚拟键盘,在启动后自动输入字符串 "Hello, World!" 到主机电脑上: ```cpp #include <Keyboard.h> void setup() { // 初始化串口通信用于调试目的 Serial.begin(115200); // 启动HID库 Keyboard.begin(); } void loop() { delay(5000); // 延迟五秒等待系统准备就绪 // 发送字符序列给宿主机器 Keyboard.print("Hello, "); delay(1000); // 添加一点间隔时间使效果更明显 Keyboard.println("World!"); } ``` 这段代码利用了`<Keyboard.h>`头文件中的函数来初始化硬件抽象层(HAL),并通过调用`print()`方法向PC发出ASCII码表示的文字消息。每次重启模块都会重复执行一次这样的操作。 #### 进一步扩展 对于更加复杂的场景比如游戏手柄或是多媒体快捷键等功能,则可以通过查阅文档了解其他可用的方法如`press()`, `releaseAll()`等来进行定制化设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truffle7电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值