忘记过去,超越自己
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2023-09-27 ❤️
- ❤️ 本篇更新记录 2023-09-27 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志 🔥零基础从入门到熟悉Arduino平台下开发ESP8266,同时会涉及网络编程知识。专栏文章累计超过60篇,分为基础篇、网络篇、应用篇、高级篇,涵盖ESP8266大部分开发技巧。
快速导航
单片机菜鸟的博客快速索引(快速找到你要的)
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
文章目录
- 1. 前言
- 2. 手动安装工具链,命令行方式(windows)
- 2.1 下载离线安装器
- 2.2 使用安装器进行安装
- 2.3 认识一下目录文件
- 2.4 helloworld工程示例
- 2.4.1 进入到工程目录
- 2.4.2 配置目标芯片
- 2.4.3 编译工程
- 2.4.4 烧录固件
- 2.4.5 查看串口信息
- 3. 使用VSCode插件,IDE方式
- 3.1 安装IDF扩展
- 3.2 打开ESP-IDF扩展设置
- 3.3 开始安装工具链
- 3.4 helloworld工程示例
- 3.4.1 找到工程,用vscode打开
- 3.4.2 编译工程
- 3.4.3 烧录固件
- 3.4.4 查看串口信息
- 3.4.5 解决头文件include无法识别问题
- 3.5 新建项目
1. 前言
ESP-IDF 是乐鑫主推的ESP32的开发框架,旨在协助用户快速开发物联网 (IoT) 应用,可满足用户对 Wi-Fi、蓝牙、低功耗等方面的要求。
Espressif IoT Development Framework
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html
如需在 ESP32 上使用 ESP-IDF,请安装以下软件:
- 设置
工具链
,用于编译 ESP32 代码; - 编译构建工具 ——
CMake 和 Ninja
编译构建工具,用于编译 ESP32 应用程序; - 获取 ESP-IDF 软件开发框架。该框架已经基本包含 ESP32 使用的 API(软件库和源代码)和运行 工具链 的脚本;
软件开发的搭建有三种选择: - 手动安装工具链,命令行方式(尝试,本篇介绍)
- 使用
Eclipse
插件,IDE方式(自行尝试) - 使用
VSCode
插件,IDE方式(推荐,本篇介绍)
2. 手动安装工具链,命令行方式(windows)
2.1 下载离线安装器
进入乐鑫 ESP-IDF Windows Installer Download 下载页面,选择离线版本工具(网络原因,安装过程中使用github下载会出问题)。
默默等待下载一下。
2.2 使用安装器进行安装
下载完成之后双击,选择简体中文,准备开始安装。
- 同意协议,下一步
- 等待安装前系统检查
- 选择目标位置,这里我直接默认了,也可以修改为其他路径
- 选择组件,默认或者全选即可
- 准备安装前的确认
这里版本是 5.1.1 idf版本。 - 接下来,静静等待一小会
- 安装完成
点击完成就会有两个弹窗。
同时,电脑桌面会多两个快捷方式。
2.3 认识一下目录文件
frameworks包含了esp-idf版本,tools下面包含了各种编译工具,还有一个py环境工具。
这里我们会比较关注examples和components目录,也是重点学习的地方。
- components,看起来就是库
- example,案例参考代码
2.4 helloworld工程示例
既然我们这里用到命令行工具来编译,我们先了解一下。
比较重要就是设置了Bin目录,也就是我们常说的工具。
2.4.1 进入到工程目录
在安装目录C:\Espressif\
中打开以下文件夹C:\Espressif\frameworks\esp-idf-v5.1.1\examples\get-started
2.4.2 配置目标芯片
因为我这里是烧录到NodeMcu ESP32,输入命令:
idf.py set-target esp32
2.4.3 编译工程
输入命令:
idf.py build
运行命令可以编译应用程序和所有 ESP-IDF 组件,接着生成 bootloader、分区表和应用程序二进制文件:
等待一小会,先喝个水!!!
编译完成后会在项目文件夹下生成一个build
文件夹,所有的bin文件和BootLoader也会在该目录下
2.4.4 烧录固件
插上硬件,看看是哪个COM口。
使用命令,将刚刚生成的二进制文件 (bootloader.bin, partition-table.bin 和 hello-world.bin) 烧录到开发板:
idf.py -p PORT [-b BAUD] flash
- PORT是端口号,可以在【设备管理器】中看到,这里是COM3;
- BAUD是波特率,默认波特率为 460800;
烧录命令为:
idf.py -p COM3 flash
2.4.5 查看串口信息
idf.py -p PORT monitor
- PORT是端口号,可以在【设备管理器】中看到,这里是COM3;
所以,输入命令:
idf.py -p COM3 monitor
顺便也看看hello_world的代码是啥?
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
void app_main(void)
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}
printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}
通过对比日志,说明正常运行起来!完美!
如果想停止串口监控,直接键盘 ctrl + ]
即可。
3. 使用VSCode插件,IDE方式
上面方式是通过命令行配置,但是大多数人更喜欢vscode这种图形化IDE开发。那么,也来配置一下。
3.1 安装IDF扩展
3.2 打开ESP-IDF扩展设置
按下CTRL+shift+P
打开设置搜索,输入esp-idf configure esp-idf extension
3.3 开始安装工具链
为了和命令行区分,这里单独用了独立目录。
默默等待安装!!!先安装idf框架再安装idf工具。。。。
直到成功!
顺便也看看安装目录!
整体上和刚刚通过手动安装方式大同小异。
3.4 helloworld工程示例
3.4.1 找到工程,用vscode打开
3.4.2 编译工程
每个项目第一次编译时间会比较长,因为会把所有的源文件进行编译,后面在编译的话就算是差量化编译
了,相比之下编译速度非常快。
ps:记得选择一下目标板子。
3.4.3 烧录固件
3.4.4 查看串口信息
完美!
3.4.5 解决头文件include无法识别问题
虽然编译烧录下载都没有问题,但是作为一个强迫症,这个问题要解决。
解决方法:
- 按下
CTRL+shift+P
打开设置搜索,输入>esp-idf add vsc
打开ESP-IDF扩展设置。点击之后就会发现在项目根目录下创建一个.vscode文件夹,该命令会将所有的头文件路径都包含在该c_cpp_properties.json
配置文件中
{
"configurations": [
{
"name": "ESP-IDF",
"compilerPath": "e:\\esp-idf-tools\\tools\\xtensa-esp32-elf\\esp-12.2.0_20230208\\xtensa-esp32-elf\\bin\\xtensa-esp32-elf-gcc.exe",
"includePath": [
"${config:idf.espIdfPath}/components/**",
"${config:idf.espIdfPathWin}/components/**",
"${config:idf.espAdfPath}/components/**",
"${config:idf.espAdfPathWin}/components/**",
"${workspaceFolder}/**"
],
"browse": {
"path": [
"${config:idf.espIdfPath}/components",
"${config:idf.espIdfPathWin}/components",
"${config:idf.espAdfPath}/components/**",
"${config:idf.espAdfPathWin}/components/**",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": false
}
}
],
"version": 4
}
这下子就真的完美了!
3.5 新建项目
接下来试试我们自己创建一个新项目是否可行?
- 按下
CTRL+shift+P
打开设置搜索,输入>esp-idf new project
打开ESP-IDF扩展设置
- 给项目命名,选择目录及开发板类型、端口
- 选择一个模板创建项目
- 打开创建好的项目
- 我们稍微修改一下打印内容
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
void app_main(void)
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("Hello world! This is My First idf code! This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}
printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}
- 按照3.4进行编译烧录查看串口信息!
完美!这个也生效了!
到此,整个搭建过程就结束了!希望大家都能10分钟搭建完毕!