## 什么是 ESP-IDF
ESP-IDF 是乐鑫官方的物联网开发框架,适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。ESP-IDF 目前已服务支持数以亿计的物联网设备,并已开发构建了多种物联网产品,例如照明、消费电子大小家电、支付终端、工控等各类物联网设备。
## 特性
- **RTOS** **内核**,FreeRTOS 内核已进行优化,可支持多核,具有基于功能的堆分配器。
- **标准编程接口**,包含 POSIX 线程和其他 POSIX API、BSD 套接字、线程安全的 C/C++ 标准库,支持虚拟文件系统。
- **外设驱动程序**,包含 SPI,I(2)C,UART,GPIO,I(2)S,ADC,DAC,电容触摸板,定时器,LED 和电机 PWM,RMT,脉冲计数器,CAN/TWAI,SD/eMMC/SDIO 主机和 SDIO 从机,以太网驱动器。
- **Wi-Fi**,Wi-Fi 驱动程序已通过 Wi-Fi Alliance 认证,支持 WPA3、Wi-Fi Mesh 协议、ESP-NOW 点对点协议、ESP-LR 远程协议、嗅探模式和 SmartConfig 配置协议。
- **经典蓝牙和低功耗蓝牙**,包含蓝牙控制器和两个主机栈:Bluedroid(双模)和 NimBLE(仅低功耗蓝牙),支持符合标准的 Bluetooth LE Mesh,所有组件均通过蓝牙 SIG 认证。
- **网络协议**,用于 IPv4 和 IPv6 连接的 LwIP TCP/IP 栈,DHCP 客户端和服务器,TLS 客户端和服务器(最高 1.2 版本),HTTP 客户端和服务器,HTTP2 客户端,WebSocket 客户端,MQTT,mDNS,CoAP,ModBus,SNTP,SMTP。
- **电源管理**,适用于 MCU 低功耗模式以及 Wi-Fi、蓝牙低功耗模式的电源管理框架;动态频率调节,支持 ULP(超低功耗)协处理器。
- **存储**,具备分区管理器、容错和日志结构的键值存储 (NVS),支持加密、FAT 和 SPIFFS 文件系统。
- **安全性**,具备受硬件支持的安全性能,如 Flash 加密和安全启动,为 RSA、SHA 和 AES 提供加密加速器支持、以及 libsodium 和 micro-ecc 加密库。
- **网络配置**,使用 Bluetooth LE、Wi-Fi 和其他带外机制的设备加载统一配置框架。
- **构建系统**,基于 CMake 的构建系统,支持外部组件和外部应用项目。
- **开发工具**,包含 GCC 交叉工具链、基于 OpenOCD 的 JTAG 调试器、静态和动态足迹分析、内存泄漏检测器、核心转储崩溃分析器、兼容 Segger SystemView 工具的实时跟踪、Flash 和 eFuse 编程器、设备制造工具。
- **IDE 支持**,ESP-IDF 项目支持 Microsoft VS Code 插件和 Eclipse IDE 插件。
## 安装(MacOS)
### 必备工具安装
```Shell
$ brew install cmake ninja dfu-util
$ # 安装python3,如已经安装请忽略
$ brew install python3
```
```Shell
$ # 如果安装时发生错误,可以尝试执行下面命令
$ # sudo xcodebuild -license
$ # /usr/sbin/softwareupdate --install-rosetta --agree-to-license
```
### ESP-IDF 安装
```Shell
$ # 下载最新仓库
$ mkdir -p ~/esp
$ cd ~/esp
$ git clone -b v5.1 --recursive https://github.com/espressif/esp-idf.git
$ # 编译安装
$ cd ~/esp/esp-idf
$ ./install.sh all
$ # 设置环境变量
$ . ~/esp/esp-idf/export.sh
$ # 如果安装出现证书错误,可运行您电脑 Python 文件夹中的 Install Certificates.command 安装证书
```
## 编辑上传并监控(官方示例)
```Shell
$ cd <你的项目目录>
$ cp -r $IDF_PATH/examples/get-started/hello_world .
$ cd ./hello_world
$ idf.py set-target esp32s3
$ idf.py menuconfig #设置开发板
$ idf.py build # 编译
$ ls /dev/cu.* #查看串口名称
$ idf.py -p <串口名称> flash monitor #烧录并监视输出
```
## 参考
- https://www.espressif.com/zh-hans/products/sdks/esp-idf
- https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32s3/index.html
- https://github.com/espressif/esp-idf/blob/master/README_CN.md
- https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/tools/idf-py.html