首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >小智AI ESP32S3 学习课件 - 第2周:理解编译与烧录

小智AI ESP32S3 学习课件 - 第2周:理解编译与烧录

作者头像
网罗开发
发布2025-11-14 13:49:03
发布2025-11-14 13:49:03
2420
举报
文章被收录于专栏:网罗开发网罗开发
📚 本周学习目标
  • 了解ESP32开发工具链组成
  • 掌握ESP-IDF、CMake、VSCode插件的使用
  • 理解编译与烧录流程
  • 学习分区表概念和配置
  • 完成第一个"Hello ESP32"程序

🎯 第2课:开发环境搭建(3小时)

2.1 ESP32开发工具链介绍(45分钟)

ESP32开发工具链组成
代码语言:javascript
复制
ESP32开发工具链:
├── ESP-IDF (Espressif IoT Development Framework)
│   ├── 官方开发框架
│   ├── 基于FreeRTOS
│   └── 支持C/C++开发
├── CMake (构建系统)
│   ├── 跨平台构建工具
│   ├── 支持组件化开发
│   └── 自动化依赖管理
├── VSCode插件
│   ├── ESP-IDF插件
│   ├── C/C++插件
│   └── CMake插件
└── 工具链
    ├── 编译器 (xtensa-esp32-elf-gcc)
    ├── 调试器 (OpenOCD)
    └── 烧录工具 (esptool.py)
ESP-IDF框架特点
代码语言:javascript
复制
ESP-IDF特点:
├── 官方支持:乐鑫官方维护
├── 功能完整:WiFi、蓝牙、音频、显示等
├── 组件化:模块化设计,易于扩展
├── 跨平台:支持Windows、macOS、Linux
├── 文档完善:详细的中文文档
└── 社区活跃:丰富的示例和教程
CMake构建系统
代码语言:javascript
复制
CMake优势:
├── 跨平台:一次编写,多平台构建
├── 组件化:支持组件依赖管理
├── 自动化:自动处理依赖关系
├── 可扩展:支持自定义构建规则
└── 集成性:与IDE无缝集成

2.2 ESP-IDF环境搭建(60分钟)

环境搭建步骤

步骤1:下载ESP-IDF

代码语言:javascript
复制
# 创建工作目录
mkdir -p ~/esp
cd ~/esp

# 克隆ESP-IDF
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf

# 切换到稳定版本
git checkout v5.3
git submodule update --init --recursive

步骤2:安装工具链

代码语言:javascript
复制
# 安装ESP32-S3工具链
./install.sh esp32s3

# 设置环境变量
echo 'alias get_idf=". $HOME/esp/esp-idf/export.sh"' >> ~/.zshrc
source ~/.zshrc

步骤3:验证安装

代码语言:javascript
复制
# 设置环境
get_idf

# 检查版本
idf.py --version
# 期望输出:ESP-IDF v5.3

# 检查工具链
xtensa-esp32s3-elf-gcc --version
VSCode插件安装

必需插件

代码语言:javascript
复制
VSCode插件列表:
├── ESP-IDF (必装)
│   ├── 提供ESP-IDF集成开发环境
│   ├── 支持项目创建、编译、烧录
│   └── 集成串口监视器
├── C/C++ (必装)
│   ├── 提供C/C++语言支持
│   ├── 智能代码补全
│   └── 语法高亮和错误检查
├── CMake (推荐)
│   ├── CMake语法支持
│   ├── 智能提示
│   └── 错误检查
└── GitLens (推荐)
    ├── Git集成
    ├── 代码历史查看
    └── 协作功能

插件配置

代码语言:javascript
复制
// VSCode设置
{
    "C_Cpp.default.configurationProvider": "espressif.esp-idf-extension",
    "C_Cpp.default.intelliSenseMode": "gcc-x64",
    "C_Cpp.default.compilerPath": "${workspaceFolder}/.espressif/python_env/idf5.3_py3.11_env/Scripts/python.exe",
    "C_Cpp.default.cStandard": "c11",
    "C_Cpp.default.cppStandard": "c++17"
}

2.3 编译与烧录流程(45分钟)

编译流程详解

步骤1:项目配置

代码语言:javascript
复制
# 进入项目目录
cd xiaozhi-esp32

# 设置目标芯片
idf.py set-target esp32s3

# 配置项目
idf.py menuconfig

步骤2:编译项目

代码语言:javascript
复制
# 清理项目(可选)
idf.py fullclean

# 编译项目
idf.py build

编译过程解析

代码语言:javascript
复制
编译过程:
├── 1. 检查依赖
│   ├── 检查ESP-IDF版本
│   ├── 检查工具链
│   └── 检查Python环境
├── 2. 配置项目
│   ├── 读取sdkconfig
│   ├── 生成配置头文件
│   └── 设置编译选项
├── 3. 编译组件
│   ├── 编译main组件
│   ├── 编译依赖组件
│   └── 链接库文件
├── 4. 生成二进制文件
│   ├── 生成bootloader.bin
│   ├── 生成partition-table.bin
│   └── 生成应用程序.bin
└── 5. 显示内存使用情况
    ├── Flash使用情况
    ├── RAM使用情况
    └── 分区使用情况

编译成功标志

代码语言:javascript
复制
编译成功输出:
Project build complete. To flash all build output, run 'idf.py -p PORT flash'.

Total sizes:
Used static IRAM:   123456 bytes ( 15.2%) remaining: 687544 bytes ( 84.8%)
Used stat D/IRAM:   23456 bytes (  2.9%) remaining: 825544 bytes ( 97.1%)
Used Flash size:   567890 bytes ( 34.7%) remaining: 1068110 bytes ( 65.3%)
烧录流程详解

步骤1:连接开发板

代码语言:javascript
复制
连接步骤:
1. 使用USB-C数据线连接ESP32-S3开发板
2. 将USB-A端插入电脑USB端口
3. 确认设备管理器中出现COM端口
4. 开发板上的电源LED应该亮起

步骤2:烧录固件

代码语言:javascript
复制
# 烧录并监控
idf.py -p COM3 flash monitor

# 只烧录,不监控
idf.py -p COM3 flash

# 自动检测端口
idf.py flash monitor

烧录过程解析

代码语言:javascript
复制
烧录过程:
├── 1. 连接开发板
│   ├── 检测串口
│   ├── 建立连接
│   └── 进入下载模式
├── 2. 擦除Flash
│   ├── 擦除bootloader区域
│   ├── 擦除应用程序区域
│   └── 擦除用户数据区域
├── 3. 写入固件
│   ├── 写入bootloader.bin
│   ├── 写入partition-table.bin
│   └── 写入应用程序.bin
├── 4. 验证烧录
│   ├── 校验数据完整性
│   ├── 检查CRC
│   └── 确认写入成功
└── 5. 启动应用程序
    ├── 重启开发板
    ├── 加载bootloader
    └── 启动应用程序

烧录成功标志

代码语言:javascript
复制
烧录成功输出:
Hard resetting via RTS pin...
Done

2.4 分区表概念(30分钟)

分区表基础概念

什么是分区表?

代码语言:javascript
复制
分区表作用:
├── 定义Flash存储布局
├── 划分不同功能区域
├── 管理应用程序和数据
└── 支持OTA更新

分区表结构

代码语言:javascript
复制
分区表结构:
├── 名称 (Name)
│   ├── 分区的唯一标识
│   └── 用于引用分区
├── 类型 (Type)
│   ├── app (应用程序)
│   ├── data (数据)
│   └── 0x00-0x40 (自定义类型)
├── 子类型 (SubType)
│   ├── 0x00 (默认)
│   ├── 0x10 (OTA)
│   └── 0x20 (NVS)
├── 偏移量 (Offset)
│   ├── 分区在Flash中的起始位置
│   └── 相对于Flash起始地址
└── 大小 (Size)
    ├── 分区的存储空间大小
    └── 支持K、M单位
不同Flash容量的分区表

4M Flash分区表

代码语言:javascript
复制
4M Flash分区布局:
├── 0x1000  bootloader (32KB)
├── 0x9000  partition-table (4KB)
├── 0x10000 app (1.5MB)
├── 0x190000 nvs (16KB)
├── 0x1D0000 otadata (8KB)
├── 0x1D2000 ota_0 (1.5MB)
└── 0x350000 ota_1 (1.5MB)

8M Flash分区表

代码语言:javascript
复制
8M Flash分区布局:
├── 0x1000  bootloader (32KB)
├── 0x9000  partition-table (4KB)
├── 0x10000 app (2MB)
├── 0x210000 nvs (32KB)
├── 0x218000 otadata (8KB)
├── 0x21A000 ota_0 (2MB)
├── 0x41A000 ota_1 (2MB)
└── 0x61A000 spiffs (1.5MB)

16M Flash分区表

代码语言:javascript
复制
16M Flash分区布局:
├── 0x1000  bootloader (32KB)
├── 0x9000  partition-table (4KB)
├── 0x10000 app (4MB)
├── 0x410000 nvs (64KB)
├── 0x420000 otadata (8KB)
├── 0x422000 ota_0 (4MB)
├── 0x822000 ota_1 (4MB)
└── 0xC22000 spiffs (3.5MB)

32M Flash分区表

代码语言:javascript
复制
32M Flash分区布局:
├── 0x1000  bootloader (32KB)
├── 0x9000  partition-table (4KB)
├── 0x10000 app (8MB)
├── 0x810000 nvs (128KB)
├── 0x830000 otadata (8KB)
├── 0x832000 ota_0 (8MB)
├── 0x1032000 ota_1 (8MB)
└── 0x1832000 spiffs (7MB)
分区表配置

通过menuconfig配置

代码语言:javascript
复制
分区表配置步骤:
1. 运行 idf.py menuconfig
2. 进入 Partition Table
3. 选择分区表类型:
   ├── Single factory app (no OTA)
   ├── Factory app, two OTA definitions
   ├── Custom partition table CSV
   └── Custom partition table CSV (with size)
4. 设置分区表文件路径
5. 保存配置

自定义分区表

代码语言:javascript
复制
# 自定义分区表示例
# Name,   Type, SubType, Offset,  Size,   Flags
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 1M,

2.5 学生上机:编译并烧录"Hello ESP32"程序(60分钟)

实验目标
  • 完成第一个ESP32程序编译和烧录
  • 理解基本的开发流程
  • 掌握串口监视器使用
实验步骤

步骤1:创建项目

代码语言:javascript
复制
# 创建项目目录
mkdir -p ~/esp-projects/hello-esp32
cd ~/esp-projects/hello-esp32

# 创建main目录
mkdir main

# 创建CMakeLists.txt
touch CMakeLists.txt

步骤2:编写主程序

代码语言:javascript
复制
// main/hello_esp32.c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"

staticconstchar *TAG = "hello_esp32";

void app_main(void)
{
    ESP_LOGI(TAG, "Hello ESP32!");
    ESP_LOGI(TAG, "Free heap: %d bytes", esp_get_free_heap_size());
    ESP_LOGI(TAG, "Minimum free heap: %d bytes", esp_get_minimum_free_heap_size());
    
    int i = 0;
    while (1) {
        ESP_LOGI(TAG, "Hello ESP32! Count: %d", i++);
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

步骤3:配置项目

代码语言:javascript
复制
# CMakeLists.txt
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(hello_esp32)

步骤4:编译项目

代码语言:javascript
复制
# 设置ESP-IDF环境
get_idf

# 设置目标芯片
idf.py set-target esp32s3

# 编译项目
idf.py build

步骤5:烧录程序

代码语言:javascript
复制
# 连接开发板后烧录
idf.py -p COM3 flash monitor

步骤6:观察输出

代码语言:javascript
复制
期望输出:
I (1234) hello_esp32: Hello ESP32!
I (1235) hello_esp32: Free heap: 123456 bytes
I (1236) hello_esp32: Minimum free heap: 98765 bytes
I (1237) hello_esp32: Hello ESP32! Count: 0
I (2237) hello_esp32: Hello ESP32! Count: 1
I (3237) hello_esp32: Hello ESP32! Count: 2
...
实验总结

掌握内容

  • ✅ ESP-IDF环境使用
  • ✅ 项目创建和配置
  • ✅ 编译和烧录流程
  • ✅ 串口监视器使用
  • ✅ 基本日志输出

常见问题

  1. 编译失败:检查ESP-IDF环境设置
  2. 烧录失败:检查USB连接和端口
  3. 无输出:检查串口监视器设置

🎯 本周学习总结

掌握内容

  1. ✅ ESP32开发工具链组成
  2. ✅ ESP-IDF环境搭建
  3. ✅ VSCode插件配置
  4. ✅ 编译与烧录流程
  5. ✅ 分区表概念理解
  6. ✅ 第一个ESP32程序

关键知识点

  • ESP-IDF:官方开发框架,功能完整
  • CMake:跨平台构建系统,支持组件化
  • 分区表:Flash存储布局管理
  • 编译流程:配置→编译→链接→生成二进制
  • 烧录流程:连接→擦除→写入→验证→启动

📚 课后作业

基础作业

  1. 完成ESP-IDF环境搭建
  2. 安装VSCode插件
  3. 编译并烧录"Hello ESP32"程序
  4. 观察串口输出日志

进阶作业

  1. 尝试修改程序,改变输出内容
  2. 调整延时时间,观察效果
  3. 添加更多日志输出
  4. 记录遇到的问题和解决方案

学习资源

  • ESP-IDF 编程指南[1]
  • CMake 官方文档[2]
  • VSCode ESP-IDF插件[3]

参考资料

[1]

ESP-IDF 编程指南: https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/

[2]

CMake 官方文档: https://cmake.org/documentation/

[3]

VSCode ESP-IDF 插件: https://github.com/espressif/vscode-esp-idf-extension

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网罗开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🎯 第2课:开发环境搭建(3小时)
    • 2.1 ESP32开发工具链介绍(45分钟)
      • ESP32开发工具链组成
      • ESP-IDF框架特点
      • CMake构建系统
    • 2.2 ESP-IDF环境搭建(60分钟)
      • 环境搭建步骤
      • VSCode插件安装
    • 2.3 编译与烧录流程(45分钟)
      • 编译流程详解
      • 烧录流程详解
    • 2.4 分区表概念(30分钟)
      • 分区表基础概念
      • 不同Flash容量的分区表
      • 分区表配置
    • 2.5 学生上机:编译并烧录"Hello ESP32"程序(60分钟)
      • 实验目标
      • 实验步骤
      • 实验总结
  • 🎯 本周学习总结
    • 掌握内容
    • 关键知识点
  • 📚 课后作业
    • 基础作业
    • 进阶作业
    • 学习资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档