01. 初识ESP32

一、ESP32单片机简介

  ESP32 是一款非常流行的物联网 (IoT) 芯片,由 Espressif Systems 开发。它集成了双核微控制器和 Wi-Fi 与蓝牙模块,内置了天线开关、RF 射频模块、功率放大器、低噪声接收放大器、滤波器和电源管理模块。这款微控制器的工作温度范围达到 -40°C 到125°C,具有极高的射频性能、稳定性、通用性和可靠性,同时功耗极低。

二、ESP32各系列对比

乐鑫各系列MCU硬件区别

【1】、在内核数量方面

  S 系列和 ESP32 系列支持单核和双核处理器,而 C 系列和 H 系列仅支持单核处理器。这意味着 S 系列和 ESP32 系列在处理多任务和高强度计算方面具有更强的性能。对于需要高效能、多任务处理的应用场景,如复杂算法处理、大数据分析等,S 系列和 ESP32 系列可能更合适。

【2】、在时钟频率方面

  S 系列和 ESP32 系列的时钟频率范围为 80 ~ 240MHz,而 C 系列和 H系列的时钟频率分别为 120MHz 和 96MHz。较高的时钟频率意味着更快的处理速度和更高的性能。对于需要高速处理的应用场景,如实时信号处理、高速数据采集等,S 系列和 ESP32 系列可能更合适。

【3】、在引出编程 IO 方面

  S 系列和 ESP32 系列的引出编程 IO 数量较多,而 C 系列和 H 系列的引出编程 IO 数量较少。这表明 S 系列和 ESP32 系列在编程接口的多样性和灵活性方面具有优势。对于需要连接多种外设和传感器的应用场景,S 系列和 ESP32 系列可能更合适。

【4】、在神经网络加速方面

  只有 S 系列支持神经网络加速功能。这意味着选择 S 系列可以更好地满足深度学习、图像识别等应用场景的需求。对于需要加速神经网络运算的应用场景,如智能家居控制、智能安防等,S 系列可能更合适。

【5】、在通讯协议方面

  所有系列都支持 2.4G Wi-Fi 和蓝牙(BLE),这意味着它们在无线通信方面具有良好的兼容性。

【6】、在存储器方面

  各系列 MCU 的 SRAM 和 ROM 大小有所不同。较大的存储器可以提供更多的程序运行空间和数据存储空间,以满足更复杂的应用需求。对于需要处理大量数据和运行复杂程序的应用场景,如物联网网关、智能仪表等,S 系列和 ESP32 系列可能更合适。

对于需要高性能、多核处理和神经网络加速的应用场景,S 系列可能是更好的选择;而对于简单的物联网应用场景,C 系列或 H 系列可能更合适。

二、开发环境的搭建

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

2.1、MicroPython开发环境

2.1.1、Thonny的安装

  MicroPython 是一种精简的 Python 3 语言,可以运行在 ESP32 和其他一些微控制器上。它提供了一种简单的方式来编程和控制 ESP32,而且由于 Python 是一种高级语言,它使得开发过程相对快速和简单。开发者可以使用MicroPython进行快速原型设计和开发,并且由于 Python 是一种解释型语言,所以可以直接在 ESP32 上运行代码,无需进行编译。

  我们可以使用 Thony 开发 ESP32。Thony 的官网地址如下:https://thonny.org/

Thonny的安装过程

  Thonny 的软件开发者,由于一些原因,在软件中添加了支持乌克兰(SupportUkraine)的按钮,点击后会跳转到 GitHub 的一篇关于支持乌克兰的文章。如果我们想要在 Thony 软件中 屏蔽这个按钮,我们可以修改安装文件的源码。我们需要修改的文件在 Thony 的安装目录下的 Thonny\Lib\site-packages\thonny 文件夹下的 workbench.py 的文件。

取消支持乌克兰

2.1.2、下载MicroPython的固件

  我们还需要从 MicroPython 的官网下载我们需要的 MicroPython 固件。MicroPython 的官方的下载地址如下:https://micropython.org/download/。进入 MicroPython 的官方下载地址后,我们需要下滑,找到对应的模组,然后点击进入。

进入对应的模组

  进入对应的模组后,然后下滑,找到你要使用的 MicroPython 固件后,点击链接进行下载。

下载MicroPython固件

2.1.3、Thonny的配置

  首先,我们需要配置 Thonny 软件使用的 Python 解释器。

配置Python解释器

配置Python解释器和串口选择

选择ESP32的MicroPython固件

安装ESP32的MicroPython固件

如果无法进行下载 MicroPython 固件,有可能需要在点击安装的同时按下 Boot 按键或复位按键。

2.1.4、运行Python程序

  我们编写一个 Python 程序,然后保存文件。此时,我们可以将这个 Python 程序保存到电脑上,也可以直接保存到 ESP32 设备中。

import time

from machine import Pin

if __name__ == "__main__":
    led = Pin(1, Pin.OUT)
  
    print("hello esp32")
  
    while True:
        led.value(1)
        time.sleep(1)
        led.value(0)
        time.sleep(1)

直接保存文件到ESP32中

保存到ESP32中

  如果 Thonny 软件中没有文件视图,我们可以在视图选项卡中点击打开。

打开Thonny的文件视图

  保存完文件之后,我们可以点击运行按钮运行 Python 程序。

运行Python程序

  如果,我们保存到 ESP32 设备中,此时我们要想备份一份到电脑端,可以选中文件,单击右键,在弹出的菜单中单击下载到指定的文件夹。

从ESP32设备中备份一份到电脑端

  如果我们之前保存文件到当前电脑中,此时我们可以选中文件,右键单击,在弹出的菜单中上传该文件到 ESP32 中。

从当前电脑上传文件到ESP32设备中

2.2、Arduino开发环境

2.2.1、Arduino的安装

  Arduino 是一种流行的开源电子原型平台,包括一系列的开发板和开发环境。Arduino 提供了一种基于 C/C++ 的语言,使得开发者可以更容易地控制和编程 ESP32。Arduino开发环境还提供了大量的库和函数,可以帮助开发者快速地构建和测试他们的代码。Arduino 还支持图形化编程,使得初学者和非专业人士也可以轻松地进行开发。

  Arduino-IDE 的官网如下:https://docs.arduino.cc/software/ide/

ArduinoIDE的安装过程

  安装完 Arduino 后,如果我们要进行 ESP32 安装还需要安装 Arduino-esp32 库。Arduino-esp32 库就是一个在 Arduino 平台上开发 ESP32 的插件,它为 Arduino 环境下的ESP32 芯片提供了支持。它允许使用熟悉的 Arduino 函数和库编写代码,并直接在 ESP32 上运行。

Arduino中添加Arduino-ESP32库

若在开发板管理器找不到 ESP32,这时候就需要在“文件 → 首选项 → 其他开发板管理器地址”添加 ESP32 址 https://espressif.github.io/arduino-esp32/package_esp32_index.json 进去,具体操作如下:

打开Arduino的首选项

Arduino中添加Arduino-ESP32的在线网址

2.2.2、Arduino工程配置

Arduino的ESP32配置

Arduino配置ESP32

2.2.3、运行Arduino程序

Arduino运行程序

const int led_pin = 1;                              // LED引脚为IO1

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);                             // 初始化串口
  pinMode(led_pin, OUTPUT);                         // 设置LED引脚为输出模式

  Serial.println("Hello ESP32!");
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(led_pin, LOW);                       // LED引脚输出低电平
  delay(1000);
  digitalWrite(led_pin, HIGH);                      // LED引脚输出高电平
  delay(1000);
}

2.3、ESP-IDF

2.3.1、VSCode中安装ESP-IDF

  ESP-IDF 是乐鑫官方推出的开发框架,专门为 ESP32 和其他一些 ESP 系列芯片设计。它提供了一套完整的开发工具和库,可以帮助开发者快速地开发和调试 ESP32 应用程序。ESP-IDF支持 C/C++语言,并提供了一套完整的 API,可以控制 ESP32的各种功能和外设。此外,ESP-IDF 还提供了一个在线编译器和调试器,可以让开发者在云端进行开发和调试。

  我们需要在 VSCode 中安装 ESP-IDF 插件。

安装ESP-IDF插件

  安装完 ESP-IDF 插件后,我们需要进行在线安装 ESP-IDF。

VSCode安装ESP-IDF

  为了让系统能够找到和识别 ESP-IDF 的相关工具和库,从而能够顺利地进行编译、构建和调试 ESP32 或其他 Espressif 芯片的项目,我们可以设置 ESP-IDF 的环境变量(这步不是必要的)。

  如果,没有自动配置环境变量,我们可以按照如下过程添加手动环境变量:此电脑→属性→高级系统→环境变量

环境变量名 环境变量值
IDF_PATH IDF 的安装目录,例如:D:\Singlechip\Espressif
IDF_TOOLS_PATH IDF 工具的安装目录,例如:D:\Singlechip\Espressif\v5.3.2\esp-idf

配置ESP-IDF的环境变量

2.3.2、新建工程

新建ESP-IDF工程

选择工程模板

2.3.3、配置IDF工程

配置FLASH

配置CPU主频

配置FreeRTOS的时钟节拍

2.3.4、运行程序

下载工程

#include <stdio.h>

#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

// app_main()函数是ESP32的入口函数,它是FreRTOS的一个任务,任务优先级是1
// main()函数是C语言入口函数,它会在编译过程中插入到二进制文件中的
void app_main(void)
{
    gpio_config_t gpio_config_struct = {0};

    printf("Hello ESP32!\n");

    gpio_config_struct.intr_type = GPIO_INTR_DISABLE;                           // 禁止中断
    gpio_config_struct.mode = GPIO_MODE_OUTPUT;                                 // 配置为输出模式
    gpio_config_struct.pin_bit_mask = (1ULL << GPIO_NUM_1);                     // 配置引脚位置
    gpio_config_struct.pull_up_en = GPIO_PULLUP_DISABLE;                        // 禁止上拉
    gpio_config_struct.pull_down_en = GPIO_PULLDOWN_DISABLE;                    // 禁止下拉
    gpio_config(&gpio_config_struct);                                           // 配置引脚

    while(1)
    {
        gpio_set_level(GPIO_NUM_1, 1);                                          // 引脚输出高电平
        vTaskDelay(1000);
        gpio_set_level(GPIO_NUM_1, 0);                                          // 引脚输出低电平
        vTaskDelay(1000);
    }
}

2.3.5、ESP-IDF工程文件结构

  当我们使用 ESP-IDF 新建一个 sample_project 工程模板时,它自动生成的工程文件结构如下:

ESP-IDF工程文件结构

  顶层项目 CMakeLists.txt 文件,这是 CMake 用于学习如何构建项目的主要文件,可以在这个文件中设置项目全局的 CMake 变量。顶层项目 CMakeLists.txt 文件会导入 /tools/cmake/project.cmake 文件,由它负责实现构建系统的其余部分。该文件最后会设置项目的名称,并定义该项目。每个项目都有一个顶层 CMakeLists.txt 文件,包含整个项目的构建设置。

# CMake工具的最低版本
cmake_minimum_required(VERSION 3.16)

# 将ESP-IDF的源码包含进来
# $ENV{IDF_PATH} 环境变量,ESP-IDF的安装目录
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
# 工程名,编译后,生成的二进制文件是 Template.bin
project(Template)

  【main】 目录是一个特殊的组件,它包含两个文件,它们分别为 CMakeLists.txtmian.c 文件。其中 main.c 定义了 程序入口函数 app_main(),而 CMakeLists.txt 文件是 将组件添加到构建系统中

# 注册组件到构建系统的函数
idf_component_register(
    # SRCS 表示要包含C语言文件的路径
    SRCS "main.c"
    # 要包含的头文件的路径.
    INCLUDE_DIRS "."
)

  通过调用 idf_component_register() 函数,开发者可以将组件添加到构建系统中。在此过程中,SRCS 代表 源文件列表,其中包括 .c、.cpp、.cc、.S 等类型的文件,这些 源文件都将被编译并整合进组件库中。另外,INCLUDE_DIRS 指的是 目录列表,这些 目录中的路径将被添加到所有需要该组件(包括主组件)的全局 include 搜索路径中,确保在编译过程中能够正确找到相关的头文件。若该组件需要依赖其他的驱动代码,可使用 REQUIRES 设置依赖库。

  sdkconfig 项目配置文件,执行 idf.py menuconfig 时会创建或更新此文件,文件中保存了项目中所有组件(包括 ESP-IDF 本身)的配置信息。 sdkconfig 文件可能会也可能不会被添加到项目的源码管理系统中。

  子层的 CMakeLists.txt 文件负责将对应层的组件整合进构建系统当中,而 sdkconfig 文件则用于设置构建过程中所需的多种配置选项(该编译哪些代码,不该编译哪些代码)。同时,顶层的 CMakeLists.txt 文件不仅指定了 CMake 的版本,还通过引用 ESP-IDF 路径下的 project.cmake 文件来指导整个项目的构建流程。这些文件共同协作,确保项目能够顺利构建和配置。最终,项目构建完成后会生成一个 build 文件夹,其中包含了临时目标文件、库文件以及最终输出的二进制文件。

posted @ 2025-03-05 18:32  星光映梦  阅读(5255)  评论(2)    收藏  举报