忘记过去,超越自己
- ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
- ❤️ 本篇创建记录 2023-09-27 ❤️
- ❤️ 本篇更新记录 2023-09-27 ❤️
- 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
- 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
- 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志 🔥零基础从入门到熟悉Arduino平台下开发ESP8266,同时会涉及网络编程知识。专栏文章累计超过60篇,分为基础篇、网络篇、应用篇、高级篇,涵盖ESP8266大部分开发技巧。
快速导航
单片机菜鸟的博客快速索引(快速找到你要的)
如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。
文章目录
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"voidapp_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"voidapp_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分钟搭建完毕!
版权归原作者 单片机菜鸟哥 所有, 如有侵权,请联系我们删除。