ESP32-C3 无线探险

ESP32-C3 无线探险

物联网综合指南

乐鑫系统 12 年 2023 月 XNUMX 日

规格

  • 产品:ESP32-C3 无线探险
  • 制造商: 乐鑫系统
  • 日期:12 年 2023 月 XNUMX 日

产品使用说明

准备

在使用 ESP32-C3 Wireless Adventure 之前,请确保您已
熟悉物联网的概念和架构。这会有所帮助
您了解该设备如何融入更大的物联网生态系统
及其在智能家居中的潜在应用。

物联网项目介绍与实践

在本节中,您将了解典型的物联网项目,
包括常见物联网设备的基础模块、基础模块
客户端应用程序和常见的物联网云平台。这会
为您提供理解和创造您的基础
自己的物联网项目。

实践:智慧灯项目

在这个实践项目中,您将学习如何创建一个智能的
使用 ESP32-C3 Wireless Adventure 照明。项目结构,
功能、硬件准备、开发流程
详细解释了。

项目结构

该项目由几个部分组成,包括
ESP32-C3 无线探险、LED、传感器和云
后端。

项目职能

智能灯项目允许您控制亮度和
通过移动应用程序远程控制 LED 的颜色或 web
界面。

硬件准备

为了准备该项目,您需要收集
必要的硬件组件,例如 ESP32-C3 Wireless
冒险板、LED、电阻器和电源。

开发过程

开发过程涉及设置开发
环境,编写代码来控制 LED,连接到
云后端,并测试智能的功能
光。

ESP RainMaker 简介

ESP RainMaker 是一个用于开发 IoT 的强大框架
设备。在本节中,您将了解 ESP RainMaker 是什么以及
如何在您的项目中实施它。

什么是 ESP RainMaker?

ESP RainMaker 是一个基于云的平台,提供了一组
用于构建和管理物联网设备的工具和服务。

ESP RainMaker 的实现

本节解释了涉及的不同组件
实施 ESP RainMaker,包括领取服务,
RainMaker 代理、云后端和 RainMaker 客户端。

实践:ESP RainMaker 开发要点

在本练习部分,您将了解以下要点:
使用 ESP RainMaker 进行开发时请考虑。这包括设备
声明、数据同步和用户管理。

ESP RainMaker 的特点

ESP RainMaker 提供多种功能用于用户管理、终端
用户和管理员。这些功能使设备变得简单
设置、远程控制和监控。

搭建开发环境

本节提供了view ESP-IDF(乐鑫物联网
Development Framework),这是官方的开发框架
适用于基于 ESP32 的设备。它解释了不同版本
ESP-IDF 以及如何设置开发环境。

硬件和驱动程序开发

基于ESP32-C3的智能灯产品硬件设计

本节重点介绍智能灯的硬件设计
基于 ESP32-C3 Wireless Adventure 的产品。它涵盖了
智能灯产品的特点和组成,以及
ESP32-C3核心系统的硬件设计。

智能灯产品特点及构成

本小节介绍了使
推出智能灯光产品。它讨论了不同的功能
以及创建智能灯的设计注意事项。

ESP32-C3核心系统硬件设计

ESP32-C3核心系统的硬件设计包括电源
电源,上电顺序,系统复位,SPI闪存,时钟源,
以及射频和天线考虑因素。本小节提供
有关这些方面的详细信息。

常问问题

问:什么是 ESP RainMaker?

答:ESP RainMaker 是一个基于云的平台,提供工具
以及用于构建和管理物联网设备的服务。它简化了
开发过程,并允许轻松的设备设置、远程
控制和监测。

问:如何搭建开发环境
ESP32-C3?

A:搭建ESP32-C3的开发环境,需要
安装 ESP-IDF(乐鑫物联网开发框架)并
根据提供的说明进行配置。 ESP-IDF 是
基于 ESP32 的设备的官方开发框架。

问:ESP RainMaker 有哪些特点?

答:ESP RainMaker 提供各种功能,包括用户
管理、最终用户功能和管理功能。用户管理
允许轻松的设备声明和数据同步。最终用户
功能可以通过移动应用程序远程控制设备或
web 界面。管理功能提供设备监控工具
和管理。

ESP32-C3 无线探险
物联网综合指南
乐鑫系统 12 年 2023 月 XNUMX 日

内容

我准备

1

1 物联网简介

3

1.1 物联网的架构。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 3

1.2 物联网在智能家居中的应用。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 6

2 IoT项目介绍与实践

9

2.1 典型物联网项目介绍。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 9

2.1.1 常见物联网设备的基本模块。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 9

2.1.2 客户端应用程序的基本模块。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 10

2.1.3 常见物联网云平台介绍。 。 。 。 。 。 。 。 。 。 。 。 。 。 11

2.2 实践:智慧灯项目。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 12

2.2.1 项目结构。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 13

2.2.2 项目功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 13

2.2.3 硬件准备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 14

2.2.4 开发流程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 16

2.3 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 17 号

3 ESP RainMaker 简介

19

3.1 什么是 ESP RainMaker? 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 20

3.2 ESP RainMaker 的实现。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 21

3.2.1 索赔服务。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 22

3.2.2 造雨者代理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 22

3.2.3 云后端。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 23

3.2.4 RainMaker 客户端。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 24

3.3 实践:ESP RainMaker 开发要点。 。 。 。 。 。 。 。 。 。 。 。 25

3.4 ESP RainMaker 的特点。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 26

3.4.1 用户管理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 26

3.4.2 最终用户功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 27 号

3.4.3 管理功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 28

3.5 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 29 号

4 搭建开发环境

31

4.1 ESP-IDF 结束view 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 31

4.1.1 ESP-IDF 版本。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 32

3

4.1.2 ESP-IDF Git 工作流程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 33 4.1.3 选择合适的版本。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 34 4.1.4 结束view ESP-IDF SDK 目录。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 34 4.2 设置 ESP-IDF 开发环境 . 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 38 4.2.1 在Linux 上搭建ESP-IDF 开发环境。 。 。 。 。 。 。 。 38 4.2.2 在Windows 上搭建ESP-IDF 开发环境。 。 。 。 。 。 40 4.2.3 Mac 上搭建 ESP-IDF 开发环境. 。 。 。 。 。 。 。 。 45 4.2.4 安装 VS 代码。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 46 4.2.5 第三方开发环境介绍。 。 。 。 。 。 。 。 46 4.3 ESP-IDF 编译系统。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 47 4.3.1 编译系统基本概念。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 47 4.3.2 项目 File 结构 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 47 4.3.3 编译系统默认构建规则。 。 。 。 。 。 。 。 。 。 。 。 。 50 4.3.4 编译脚本简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 51 4.3.5 常用命令介绍. 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 52 4.4 练习:编译Examp程序“闪烁”。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 53 4.4.1 防爆amp乐分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 53 4.4.2 编译Blink 程序。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 56 4.4.3 闪烁程序闪烁。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 59 4.4.4 Blink程序串口日志分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 60 4.5 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 63

二、硬件及驱动开发

65

5 基于ESP32-C3的智能灯产品硬件设计

67

5.1 智能灯产品的特点及构成。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 67

5.2 ESP32-C3 核心系统硬件设计。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 70

5.2.1 电源。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 74

5.2.2 上电顺序和系统复位。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 74

5.2.3 SPI 闪存。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 75

5.2.4 时钟源。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 75

5.2.5 射频和天线。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 76

5.2.6 捆扎销钉。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 79

5.2.7 GPIO 和 PWM 控制器。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 79

5.3 实践:使用 ESP32-C3 构建智能灯系统。 。 。 。 。 。 。 。 。 。 。 。 。 80

5.3.1 选择模块。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 80

5.3.2 配置PWM信号的GPIO。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 82

5.3.3 下载固件和调试接口。 。 。 。 。 。 。 。 。 。 。 。 82

5.3.4 射频设计指南。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 84 5.3.5 电源设计指南。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 86 5.4 小结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 86

6 驱动程序开发

87

6.1 驱动程序开发流程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 87

6.2 ESP32-C3 外围应用。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 88

6.3 LED 驱动器基础知识。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 89

6.3.1 色彩空间。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 89

6.3.2 LED 驱动器。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 94

6.3.3 LED 调光。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 94

6.3.4 脉宽调制简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 95

6.4 LED 调光驱动器开发。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 96

6.4.1 非易失性存储(NVS)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 97

6.4.2 LED PWM 控制器(LEDC)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 98

6.4.3 LED PWM 编程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 100

6.5 实践:为智能灯项目添加驱动程序。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 103

6.5.1 按钮驱动程序。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 103

6.5.2 LED 调光驱动器。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 104

6.6 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 108 号

三、无线通讯与控制

109

7 Wi-Fi 配置和连接

111

7.1 Wi-Fi 基础知识。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 111

7.1.1 Wi-Fi 简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 111

7.1.2 IEEE 802.11 的演变。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 111

7.1.3 Wi-Fi 概念。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 112

7.1.4 Wi-Fi 连接。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 115

7.2 蓝牙基础知识。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 122

7.2.1 蓝牙简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 123

7.2.2 蓝牙概念。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 124

7.2.3 蓝牙连接。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 127

7.3 Wi-Fi 网络配置。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 131

7.3.1 Wi-Fi 网络配置指南。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 131

7.3.2 软AP。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 132

7.3.3 智能配置。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 132

7.3.4 蓝牙。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 135

7.3.5 其他方法。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 137

7.4 Wi-Fi 编程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 139 7.4.1 ESP-IDF 中的 Wi-Fi 组件。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 139 7.4.2 练习:Wi-Fi 连接。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 141 7.4.3 练习:智能 Wi-Fi 连接。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 145
7.5 实践:智慧灯项目中的Wi-Fi配置。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 156 7.5.1 智慧灯项目中的 Wi-Fi 连接。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 156 7.5.2 智能Wi-Fi配置。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 157
7.6 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 158 号

8 本地控制

159

8.1 本地控制简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 159

8.1.1 本地控制的应用。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 161

8.1.2年Advantag本地控制的es。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 161

8.1.3 通过智能手机发现受控设备。 。 。 。 。 。 。 。 。 。 161

8.1.4 智能手机和设备之间的数据通信。 。 。 。 。 。 。 。 162

8.2 常见的本地发现方法。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 162

8.2.1 广播。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 163

8.2.2 组播。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 169

8.2.3 广播和组播的比较。 。 。 。 。 。 。 。 。 。 。 。 。 。 176

8.2.4 用于本地发现的组播应用协议 mDNS。 。 。 。 。 。 。 。 176

8.3 本地数据的通用通信协议。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 179

8.3.1 传输控制协议(TCP)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 179

8.3.2 超文本传输​​协议(HTTP)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 185

8.3.3 用户达tag内存协议(UDP)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 189

8.3.4 受限应用协议(CoAP)。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 192

8.3.5 蓝牙协议。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 197

8.3.6 数据通信协议总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 203

8.4 数据安全保障。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 205

8.4.1 传输层安全 (TLS) 简介。 。 。 。 。 。 。 。 。 。 。 。 。 207

8.4.2 Da简介tagRAM 传输层安全 (DTLS)。 。 。 。 。 。 。 213

8.5 实践:智慧灯项目中的本地控制。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 217

8.5.1 创建基于Wi-Fi的本地控制服务器. 。 。 。 。 。 。 。 。 。 。 。 。 。 。 217

8.5.2 使用脚本验证本地控制功能。 。 。 。 。 。 。 。 。 。 。 221

8.5.3 创建基于蓝牙的本地控制服务器。 。 。 。 。 。 。 。 。 。 。 。 222

8.6 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 224 号

9 云控制

225

9.1 远程控制简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 225

9.2 云数据通信协议。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 226

9.2.1 MQTT 简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 226 9.2.2 MQTT 原则。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 227 9.2.3 MQTT 消息格式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 228 9.2.4 协议比较。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 233 9.2.5 在Linux 和Windows 上设置MQTT 代理。 。 。 。 。 。 。 。 。 。 。 。 233 9.2.6 设置基于 ESP-IDF 的 MQTT 客户端... 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 235 9.3 确保MQTT数据安全。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 237 9.3.1 证书的含义和作用。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 237 9.3.2 本地生成证书。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 239 9.3.3 配置 MQTT 代理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 241 9.3.4 配置MQTT客户端... 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 241 9.4 练习:通过ESP RainMaker 进行远程控制。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 243 9.4.1 ESP RainMaker 基础知识。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 243 9.4.2 节点和云后端通信协议。 。 。 。 。 。 。 。 。 。 。 244 9.4.3 客户端与云后端之间的通信。 。 。 。 。 。 。 。 。 。 。 249 9.4.4 用户角色。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 252 9.4.5 基本服务。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 253 9.4.6 智能灯防爆amp勒。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 255 9.4.7 RainMaker 应用程序和第三方集成。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 262 9.5 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第267章

10 智能手机应用程序开发

269

10.1 智能手机应用程序开发简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 269

10.1.1 结束view 智能手机应用程序开发。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 270

10.1.2 Android 项目的结构。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 270

10.1.3 iOS 项目的结构。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第271章

10.1.4 Android Activity 的生命周期。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第272章

10.1.5 iOS 的生命周期 View控制器 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 273

10.2 创建新的智能手机应用程序项目。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 275

10.2.1 Android 开发准备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 275

10.2.2 创建新的 Android 项目。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 275

10.2.3 添加 MyRainmaker 的依赖项。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 276

10.2.4 Android 中的权限请求。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第277章

10.2.5 iOS 开发准备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第277章

10.2.6 创建新的 iOS 项目。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 278

10.2.7 添加 MyRainmaker 的依赖项。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 279

10.2.8 iOS 中的权限请求。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 280

10.3 App功能需求分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第281章

10.3.1 项目功能需求分析。 。 。 。 。 。 。 。 。 。 。 。第282章

10.3.2 用户管理需求分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 282 10.3.3 设备配置和绑定要求分析。 。 。 。 。 。 。 283 10.3.4 远程控制要求分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 283 10.3.5 调度要求分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 284 10.3.6 用户中心需求分析。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 285 10.4 用户管理的开发。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 285 10.4.1 RainMaker API 简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 285 10.4.2 通过智能手机发起通信。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 286 10.4.3 帐户注册。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 286 10.4.4 账户登录。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 289 10.5 设备配置的发展。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 292 10.5.1 扫描设备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 293 10.5.2 连接设备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 295 10.5.3 生成密钥。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 298 10.5.4 获取节点 ID。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 298 10.5.5 配置设备。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 300 10.6 设备控制的发展。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 302 10.6.1 设备与云账号绑定.. 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 303 10.6.2 获取设备列表。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 305 10.6.3 获取设备状态... 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 308 10.6.4 更改设备状态。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 310 10.7 调度和用户中心的开发。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 313 10.7.1 实现调度功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 313 10.7.2 实施用户中心。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 315 10.7.3 更多云API。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 318 10.8 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第319章

11 固件升级及版本管理

321

11.1 固件升级。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 321

11.1.1 结束view 分区表。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第322章

11.1.2 固件启动过程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第324章

11.1.3 结束view OTA 机制。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第326章

11.2 固件版本管理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第329章

11.2.1 固件标记。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第329章

11.2.2 回滚和防回滚。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第331章

11.3 练习:无线(OTA)Examp勒。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第332章

11.3.1 通过本地主机升级固件。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第332章

11.3.2 通过 ESP RainMaker 升级固件。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第335章

11.4 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 342 号

IV优化及量产

343

12 电源管理和低功耗优化

345

12.1 ESP32-C3 电源管理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第345章

12.1.1 动态频率缩放。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第346章

12.1.2 电源管理配置。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第348章

12.2 ESP32-C3 低功耗模式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第348章

12.2.1 调制解调器睡眠模式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第349章

12.2.2 浅睡眠模式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第351章

12.2.3 深度睡眠模式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第356章

12.2.4 不同功率模式下的电流消耗。 。 。 。 。 。 。 。 。 。 。 。 。第358章

12.3 电源管理和低功耗调试。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第359章

12.3.1 日志调试。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 360

12.3.2 GPIO 调试。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第362章

12.4 实践:智能灯项目中的电源管理。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第363章

12.4.1 配置电源管理功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第364章

12.4.2 使用电源管理锁。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 365

12.4.3 验证功耗。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第366章

12.5 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 367 号

13 项增强的设备安全功能

369

13.1 结束view 物联网设备数据安全。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第369章

13.1.1 为什么要保护物联网设备数据? 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 370

13.1.2 物联网设备数据安全的基本要求。 。 。 。 。 。 。 。 。 。 。 。第371章

13.2 数据完整性保护。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第372章

13.2.1 完整性验证方法简介。 。 。 。 。 。 。 。 。 。 。 。 。 。第372章

13.2.2 固件数据的完整性验证。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第373章

第13.2.3章amp勒。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第374章

13.3 数据保密保护。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第374章

13.3.1 数据加密简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第374章

13.3.2 Flash 加密方案简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第376章

13.3.3 闪存加密密钥存储。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第379章

13.3.4 Flash加密工作模式。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 380

13.3.5 闪存加密过程。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第381章

13.3.6 NVS 加密简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第383章

第13.3.7章ampFlash 加密和 NVS 加密文件。 。 。 。 。 。 。 。 。 。 。第384章

13.4 数据合法性保护。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第386章

13.4.1 数字签名简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第386章

13.4.2 结束view 安全启动方案。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第388章

13.4.3 软件安全启动简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 388 13.4.4 硬件安全启动简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 390 13.4.5 前amp莱斯。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 394 13.5 实践:批量生产中的安全功能。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 396 13.5.1 闪存加密和安全启动。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 396 13.5.2 使用批量闪存工具启用闪存加密和安全启动。 。 397 13.5.3 在智能灯项目中启用闪存加密和安全启动。 。 。第398章 13.6总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第398章

14 量产固件烧录及测试

399

14.1 量产固件烧录。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第399章

14.1.1 定义数据分区。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第399章

14.1.2 固件烧录。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第402章

14.2 批量生产测试。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 403

14.3 实践:智慧灯项目量产数据。 。 。 。 。 。 。 。 。 。 。 。 。 404

14.4 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 404 号

15 ESP 见解:远程监控平台

405

15.1 ESP 见解简介。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 405

15.2 ESP 见解入门。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 409

15.2.1 开始使用 esp-insights 项目中的 ESP Insights。 。 。 。 。 。 409

15.2.2 运行Examp文件位于 esp-insights 项目中。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第411章

15.2.3 报告核心转储信息。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第411章

15.2.4 定制感兴趣的日志。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第412章

15.2.5 报告重启原因。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第413章

15.2.6 报告自定义指标。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第413章

15.3 实践:在智能灯项目中使用 ESP 见解。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第416章

15.4 总结。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 417 号

介绍
ESP32-C3 是一款基于开源 RISC-V 架构的单核 Wi-Fi 和蓝牙 5 (LE) 微控制器 SoC。它在功耗、I/O 功能和安全性之间取得了适当的平衡,从而为连接设备提供了最佳的经济高效的解决方案。为了展示 ESP32-C3 系列的各种应用,乐鑫的这本书将带您踏上一段有趣的 AIoT 之旅,从 IoT 项目开发和环境搭建的基础知识开始,到实际操作。amp莱斯。前四章讨论 IoT、ESP RainMaker 和 ESP-IDF。第5章和第6章简要介绍了硬件设计和驱动程序开发。随着您的进步,您将发现如何通过 Wi-Fi 网络和移动应用程序配置您的项目。最后,您将学习优化您的项目并将其投入批量生产。
如果您是相关领域的工程师、软件架构师、教师、学生或任何对物联网感兴趣的人,这本书就适合您。
您可以下载代码 examp本书中使用的文件来自 GitHub 上的 Espressif 网站。了解物联网发展的最新资讯,请关注我们的公众号。

前言
信息化世界
乘着互联网浪潮,物联网隆重登场,成为数字经济新型基础设施。为了让技术更贴近公众,乐鑫系统致力于实现这样的愿景:各行各业的开发人员都可以使用物联网来解决我们这个时代一些最紧迫的问题。 “万物智联”的世界是我们对未来的期盼。
设计我们自己的芯片是这一愿景的关键组成部分。这是一场马拉松,需要不断突破技术界限。从“游戏规则改变者”ESP8266,到集成 Wi-Fi 和蓝牙 (LE) 连接的 ESP32 系列,再到配备 AI 加速的 ESP32-S3,乐鑫从未停止过 AIoT 解决方案产品的研发。借助我们的开源软件,例如物联网开发框架 ESP-IDF、网格开发框架 ESP-MDF 和设备连接平台 ESP RainMaker,我们创建了用于构建 AIoT 应用程序的独立框架。
截至 2022 年 800 月,乐鑫 IoT 芯片组累计出货量已超过 32 亿颗,在 Wi-Fi MCU 市场处于领先地位,为全球大量联网设备提供动力。对卓越的追求使得乐鑫的每一款产品都因其高水平的集成度和成本效率而大受欢迎。 ESP3-C32 的发布标志着乐鑫自主研发技术的一个重要里程碑。它是一款单核、400 位、基于 RISC-V 的 MCU,具有 160KB SRAM,运行频率为 2.4MHz。它集成了 5 GHz Wi-Fi 和蓝牙 32 (LE),并提供远程支持。它在功耗、I/O 功能和安全性之间取得了良好的平衡,从而为连接设备提供了最佳的经济高效的解决方案。基于如此强大的ESP3-CXNUMX,本书旨在帮助读者了解物联网相关知识,并通过详细的插图和实践来帮助读者了解物联网相关知识。amp莱斯。
我们为什么写这本书?
乐鑫系统不仅仅是一家半导体公司。它也是一家物联网平台公司,始终致力于技术领域的突破和创新。同时,乐鑫将自主研发的操作系统和软件框架开源并与社区共享,形成了独特的生态系统。工程师、创客、技术爱好者积极基于乐鑫产品开发新的软件应用,自由交流、分享经验。你随时可以在 YouTube 和 GitHub 等各种平台上看到开发者的精彩想法。乐鑫产品的受欢迎刺激了越来越多的作者,他们基于乐鑫芯片组创作了 100 多本书籍,涵盖英语、中文、德语、法语和日语等十多种语言。

正是社区伙伴的支持和信任,激励着乐鑫不断创新。 “我们努力使我们的芯片、操作系统、框架、解决方案、云、业务实践、工具、文档、著作、想法等与人们在当代生活中最紧迫的问题所需的答案更加相关。这是乐鑫的最高抱负和道德指南针。”乐鑫创始人兼首席执行官张瑞安先生说道。
乐鑫重视阅读和创意。物联网技术的不断升级对工程师提出了更高的要求,如何帮助更多人快速掌握物联网芯片、操作系统、软件框架、应用方案和云服务产品?俗话说,授人以鱼不如授人以渔。在一次头脑风暴中,我们想到可以写一本书来系统地梳理物联网开发的关键知识。我们一拍即合,很快聚集了一批高级工程师,结合技术团队在嵌入式编程、物联网软硬件开发方面的经验,为本书的出版做出了贡献。在写作过程中,我们力求客观公正,剥去茧子,用简洁的表达方式讲述物联网的复杂性和魅力。我们认真总结了常见问题,参考了社区的反馈和建议,以明确解答开发过程中遇到的问题,为相关技术人员和决策者提供实用的物联网开发指南。
书籍结构
本书以工程师为中心的视角,一步步阐述了物联网项目开发所需的知识。它由四部分组成,如下:
· 准备工作(第1章):介绍物联网的架构、典型物联网项目框架、ESP RainMakerr云平台、开发环境ESP-IDF,为物联网项目开发打下坚实的基础。
· 硬件及驱动开发(第5章):基于ESP6-C32芯片组,详细阐述最小硬件系统及驱动开发,实现调光、调色、无线通信等控制。
· 无线通信与控制(第7章):介绍基于ESP11-C32芯片的智能Wi-Fi配置方案、本地和云端控制协议以及设备的本地和远程控制。它还提供了开发智能手机应用程序、固件升级和版本管理的方案。
· 优化和量产(第12-15章):这部分针对先进的物联网应用,重点关注产品在电源管理、低功耗优化和增强安全性方面的优化。还介绍了量产中的固件烧录和测试,以及如何通过远程监控平台ESP Insights诊断设备固件的运行状态和日志。

关于源代码
读者可以运行 examp可以通过手动输入代码或使用本书附带的源代码来编写本书中的文件程序。我们强调理论与实践的结合,因此几乎每章都设置了基于智慧灯项目的实践部分。所有代码都是开源的。欢迎读者下载源代码,并在 GitHub 和我们的官方论坛 esp32.com 上与本书相关的部分进行讨论。本书的开源代码受 Apache License 2.0 条款的约束。
作者注
本书由乐鑫官方出品,由该公司高级工程师撰写。适合物联网相关行业的管理人员、研发人员、相关专业的师生、物联网领域的爱好者。我们希望本书能作为工作手册、参考书、床头书,成为良师益友。
在编写本书时,我们参考了国内外专家、学者和技术人员的一些相关研究成果,并尽量按照学术规范进行引用。但难免有疏漏之处,在此向所有相关作者致以深深的敬意和感谢。另外,我们所引用的信息均来自网络,在此向原作者和发布者表示感谢,同时对无法标明每条信息的出处表示歉意。
为了制作出高质量的书籍,我们组织了多轮内部讨论,听取了试读读者和出版社编辑的建议和反馈。在此,我们再次感谢您的帮助,为我们的工作取得成功做出了贡献。
最后,也是最重要的,感谢为我们产品的诞生和普及付出辛勤努力的乐鑫所有人。
物联网项目的开发涉及广泛的知识。限于本书篇幅以及作者水平和经验,疏漏在所难免。因此,恳请专家和读者批评指正。如果您对本书有任何建议,请通过 book@espressif.com 联系我们。我们期待您的反馈。

如何使用这本书?
本书中的项目代码已经开源。您可以从我们的 GitHub 存储库下载它,并在我们的官方论坛上分享您的想法和问题。 GitHub:https://github.com/espressif/book-esp32c3-iot-projects 论坛:https://www.esp32.com/bookc3 在整本书中,会有一些突出显示的部分,如下所示。
源代码 本书强调理论与实践的结合,因此几乎每章都设置了关于智能灯项目的实践部分。相应的步骤和源页面将标记在以 开头的两行之间 tag 源代码。
注意/提示 您可以在此处找到一些成功调试程序的关键信息和提醒。它们将被标记在两条粗线之间,以 tag 注意或提示。
本书中的大部分命令都是在Linux下执行的,由字符“$”提示。如果该命令需要超级用户权限才能执行,则提示符将替换为“#”。 Mac 系统上的命令提示符为“%”,如 4.2.3 在 Mac 上安装 ESP-IDF 中所使用的。
本书正文将印在Charter中,而代码examp文件、组件、函数、变量、代码 file 名称、代码目录和字符串将位于 Courier New 中。
需要用户输入的命令或文本,以及可以通过按“Enter”键输入的命令将以 Courier New 粗体打印。日志和代码块将显示在浅蓝色框中。
Examp乐:
其次,使用 esp-idf/components/nvs flash/nvspartitiongenerator/nvspartitiongen.py 生成 NVS 分区二进制文件 file 在开发主机上使用以下命令:
$ python $IDF PATH/components/nvs flash/nvs 分区生成器/nvs 分区 gen.py –输入质量 prod.csv –输出质量 prod.bin –大小 NVS 分区大小

第三章

介绍

物联网

20世纪末,随着计算机网络和通信技术的兴起,互联网迅速融入人们的生活。随着互联网技术的不断成熟,物联网(IoT)的理念诞生了。从字面上看,物联网意味着事物相互连接的互联网。原本的互联网打破了空间和时间的限制,拉近了“人与人”的距离,而物联网则让“物”成为重要的参与者,拉近了“人”与“物”的距离。在可预见的未来,物联网必将成为信息产业的驱动力。
那么,什么是物联网?
物联网很难准确定义,因为它的含义和范围在不断变化。 1995年,比尔·盖茨在其著作《未来之路》中首次提出了物联网的概念。简而言之,物联网使物体能够通过互联网相互交换信息。其最终目标是建立“万物互联”。这是对物联网的早期解读,也是对未来技术的幻想。三十年后,随着经济和科技的飞速发展,幻想正在变成现实。从智能设备、智能家居、智慧城市、车联网、可穿戴设备,到物联网技术支持的“元宇宙”,新概念不断涌现。本章我们将从物联网的架构开始讲解,然后介绍最常见的物联网应用——智能家居,帮助大家对物联网有一个清晰的认识。
1.1 物联网架构
物联网涉及多种技术,在不同行业有不同的应用需求和形式。为了梳理物联网的结构、关键技术和应用特点,需要建立统一的架构和标准的技术体系。本书将物联网的架构简单分为四层:感知控制层、网络层、平台层、应用层。
感知控制层作为物联网架构中最基本的元素,感知控制层是实现物联网综合感知的核心。其主要功能是收集、识别和控制信息。它由多种具有感知能力的设备组成,
3

识别、控制和执行,负责检索和分析材料属性、行为趋势和设备状态等数据。通过这种方式,物联网可以识别真实的物理世界。此外,该层还能够控制设备的状态。
这一层最常见的设备是各种传感器,它们在信息收集和识别方面发挥着重要作用。传感器就像人类的感觉器官,例如光敏传感器相当于视觉,声学传感器相当于听觉,气体传感器相当于嗅觉,压力和温度敏感传感器相当于触摸。有了这些“感觉器官”,物体就变得“有生命”,能够智能地感知、识别和操纵物理世界。
网络层 网络层的主要功能是传输信息,包括从感知控制层获得的数据到指定目标,以及从应用层发回感知控制层的命令。它是连接物联网系统不同层的重要通信桥梁。建立物联网的基本模型,需要将物体集成到网络中两个步骤:接入互联网和通过互联网进行传输。
接入互联网互联网实现了人与人之间的互联,但未能将物纳入大家庭。在物联网出现之前,大多数事物都无法“联网”。随着技术的不断发展,物联网将物联网,实现了“人与物”、“物与物”的互联。实现Internet连接的常见方式有两种:有线网络接入和无线网络接入。
有线网络接入方式包括以太网、串行通信(如RS-232、RS-485)和USB,而无线网络接入则依赖于无线通信,又可分为短距离无线通信和远程无线通信。
短距离无线通信包括 ZigBee、蓝牙、Wi-Fi、近场通信 (NFC) 和射频识别 (RFID)。远距离无线通信包括增强型机器类型通信(eMTC)、LoRa、窄带物联网(NB-IoT)、2G、3G、4G、5G等。
通过互联网传输 不同的互联网接入方式,对应着相应的数据物理传输链路。接下来是决定使用哪种通信协议来传输数据。与互联网终端相比,目前大多数物联网终端的数量较少
4 ESP32-C3 无线冒险:物联网综合指南

可用资源,如处理性能、存储容量、网络速率等,因此在物联网应用中需要选择占用资源较少的通信协议。目前有两种广泛使用的通信协议:消息队列遥测传输 (MQTT) 和约束应用程序协议 (CoAP)。
平台层 平台层主要指物联网云平台。当所有物联网终端联网后,其数据需要汇聚到物联网云平台上进行计算和存储。平台层主要支撑物联网应用,方便海量设备的接入和管理。它将物联网终端连接到云平台,收集终端数据,并向终端下发命令,实现远程控制。平台层作为将设备分配给行业应用的中间服务,在整个物联网架构中起着承上启下的作用,承载着抽象的业务逻辑和标准化的核心数据模型,不仅可以实现设备的快速接入,还可以提供强大的模块化能力满足行业应用场景的各种需求。平台层主要包括设备接入、设备管理、安全管理、消息通信、监控运维、数据应用等功能模块。
· 设备接入,实现终端与物联网云平台的连接和通信。
· 设备管理,包括设备创建、设备维护、数据转换、数据同步、设备分发等功能。
· 安全管理,从安全认证、通信安全等角度保证物联网数据传输的安全。
· 消息通信,包括三个传输方向,即终端向物联网云平台发送数据、物联网云平台向服务器端或其他物联网云平台发送数据、服务器端远程控制物联网设备。
· 监控运维,涉及监控诊断、固件升级、在线调试、日志服务等。
· 数据应用,涉及数据的存储、分析和应用。
应用层 应用层使用来自平台层的数据来管理应用程序,并通过数据库和分析软件等工具对其进行过滤和处理。生成的数据可用于现实世界的物联网应用,例如智能医疗、智能农业、智能家居和智能城市。
当然,物联网的架构可以细分为更多层,但无论由多少层组成,其底层原理本质上都是一样的。学习
第 1 章 IoT 简介 5

了解物联网的架构有助于加深我们对物联网技术的理解并构建功能齐全的物联网项目。
1.2 物联网在智能家居中的应用
物联网已经渗透到各行各业,而与我们关系最密切的物联网应用就是智能家居。许多传统电器现在都配备了一个或多个物联网设备,许多新建的房屋从一开始就采用了物联网技术设计。图 1.1 显示了一些常见的智能家居设备。
图 1.1。常见的智能家居设备 智能家居的发展可以简单分为智能产品tage、场景互联stage和智能stage、如图1.2所示。
图 1.2。发展历程tag智能家居之 e 6 ESP32-C3 无线探险:物联网综合指南

第一个tage是关于智能产品。与传统家居不同,在智能家居中,物联网设备通过传感器接收信号,并通过Wi-Fi、蓝牙LE、ZigBee等无线通信技术联网。用户可以通过多种方式控制智能产品,例如智能手机应用程序、语音助手、智能音箱控制等。tage注重场景互联。在这个tage、开发者不再考虑控制单个智能产品,而是将两个或多个智能产品互联,达到一定程度的自动化,最终形成自定义场景模式。对于前amp例如,当用户按下任意场景模式按钮时,灯光、窗帘和空调将自动适应预设。当然,前提是联动逻辑很容易设置,包括触发条件和执行动作。想象一下,当室内温度降至10℃以下时,触发空调制热模式;早上7点,播放音乐唤醒用户,打开智能窗帘,通过智能插座启动电饭锅或面包机;当用户起床洗漱完毕时,早餐就已经准备好了,这样就不会耽误上班了。我们的生活变得多么方便啊!第三个stage 转到情报 stage.随着越来越多的智能家居设备被访问,生成的数据类型也会随之增加。借助云计算、大数据和人工智能,智能家居就像被植入了一个“更聪明的大脑”,不再需要用户频繁指令。他们从以前的交互中收集数据并了解用户的行为模式和偏好,从而使活动自动化,包括提供决策建议。目前,大部分智能家居都在现场互联tage.随着智能产品渗透率和智能化程度的提高,通信协议之间的障碍正在被消除。未来,智能家居势必变得真正“智能”,就像钢铁侠中的AI系统贾维斯一样,不仅可以帮助用户控制各种设备、处理日常事务,还拥有超强的计算能力和思维能力。在智能时代tage、人类将获得数量和质量上更好的服务。
第 1 章 IoT 简介 7

8 ESP32-C3 无线冒险:物联网综合指南

第二章物联网项目介绍与实践
第一章介绍了物联网的架构,感知控制层、网络层、平台层、应用层的作用和相互关系,以及智能家居的发展。然而,就像我们学习绘画一样,仅仅知道理论知识是远远不够的。我们必须“亲自动手”将物联网项目付诸实践,才能真正掌握这项技术。另外,当项目进入量产阶段时tage、需要考虑更多的网络连接、配置、物联网云平台交互、固件管理和更新、量产管理、安全配置等因素。那么,我们在开发一个完整的物联网项目时需要注意什么呢?在第一章中,我们提到智能家居是最常见的物联网应用场景之一,而智能灯是最基本、最实用的电器之一,可以应用于家庭、酒店、健身房、医院等。因此,在本书中,我们将以构建一个智慧灯项目为切入点,讲解其组成和特点,并为项目开发提供指导。希望您能借鉴此案例,创造出更多的物联网应用。
2.1 典型物联网项目介绍
从开发来看,物联网项目的基本功能模块可分为物联网设备软硬件开发、客户端应用开发、物联网云平台开发。阐明基本功能模块很重要,本节将进一步描述这些模块。
2.1.1 常见物联网设备基本模块
物联网设备软硬件开发包括以下基本模块: 数据采集
感知控制层物联网设备作为物联网架构的底层,通过芯片和外设连接传感器和设备,实现数据采集和运行控制。
9

账号绑定和初始配置对于大多数物联网设备来说,账号绑定和初始配置都是在一个操作流程中完成的,例如amp文件,通过配置 Wi-Fi 网络连接设备与用户。
与物联网云平台交互 为了监控和控制物联网设备,还需要将其连接到物联网云平台,通过相互交互下达命令、报告状态。
设备控制 设备与物联网云平台连接后,可以与云端进行通信,进行注册、绑定或控制。用户可以通过物联网云平台或本地通信协议在智能手机应用程序上查询产品状态并进行其他操作。
固件升级 物联网设备还可以根据厂商需求实现固件升级。通过接收云端发送的命令,实现固件升级和版本管理。通过此固件升级功能,您可以不断增强物联网设备的功能,修复缺陷,改善用户体验。
2.1.2 客户端应用基本模块
客户端应用程序(例如智能手机应用程序)主要包括以下基本模块:
账户体系及授权 支持账户和设备授权。
设备控制 智能手机应用程序通常配备控制功能。用户可以轻松连接物联网设备,并通过智能手机应用程序随时随地管理它们。在现实的智能家居中,设备大多通过智能手机应用程序进行控制,这不仅可以实现设备的智能管理,还可以节省人力成本。因此,设备控制是客户端应用的必备,比如设备功能属性控制、场景控制、调度、远程控制、设备联动等。智能家居用户还可以根据个人需求定制场景,控制灯光、家电、入口等。等,让家居生活更加舒适便捷。他们可以定时空调、远程关闭空调、门解锁后自动打开走廊灯,或者只需一个按钮即可切换到“剧院”模式。
通知客户端应用程序更新物联网设备的实时状态,并在设备出现异常时发送警报。
10 ESP32-C3 无线冒险:物联网综合指南

售后客户服务 智能手机应用程序可以为产品提供售后服务,及时解决物联网设备故障和技术操作相关问题。
特色功能 为了满足不同用户的需求,可能会增加其他功能,例如摇一摇、NFC、GPS等。GPS可以根据位置和距离帮助设置场景操作的准确性,而摇一摇功能则允许用户设置场景操作的准确性。通过摇动针对特定设备或场景执行的命令。
2.1.3 常见物联网云平台介绍
物联网云平台是一个集设备管理、数据安全通信、通知管理等功能为一体的平台。物联网云平台根据其目标群体和可访问性,可分为公共物联网云平台(以下简称“公有云”)和私有物联网云平台(以下简称“私有云”)。
公有云通常是指为企业或个人提供的共享物联网云平台,由平台提供商运营和维护,通过互联网共享。它可以是免费或低成本的,并通过开放的公共网络提供服务,例如阿里云、腾讯云、百度云、AWS IoT、Google IoT等。公共云作为支撑平台,可以整合上游服务提供商和下游终端用户创造新的价值链和生态系统。
私有云仅供企业使用,从而保证对数据、安全性和服务质量的最佳控制。其服务和基础设施由企业单独维护,配套的硬件和软件也专用于特定用户。企业可以定制云服务来满足其业务需求。目前,一些智能家居厂商已经拥有私有的物联网云平台,并基于其开发智能家居应用。
公有云和私有云各有优势tages,稍后会解释。
要实现通信互联,至少需要完成设备侧的嵌入式开发,以及业务服务器、物联网云平台、智能手机APP等。面对如此庞大的项目,公有云通常会为设备端和智能手机应用程序提供软件开发套件,以加快进程。公有云和私有云都提供设备接入、设备管理、设备影子、运维等服务。
设备接入物联网云平台需要提供的不仅仅是使用协议进行设备接入的接口
第 2 章 IoT 项目介绍与实践 11

例如 MQTT、CoAP、HTTPS 和 WebSocket还具有设备安全认证功能,阻止伪造和非法设备,有效降低被攻破的风险。此类认证通常支持不同的机制,因此当设备量产时,需要根据所选的认证机制预先分配设备证书,并将其烧录到设备中。
设备管理物联网云平台提供的设备管理功能不仅可以帮助制造商实时监控设备的激活状态和在线状态,还可以进行添加/删除设备、检索、添加/删除组、固件升级等选项和版本管理。
设备影子物联网云平台可以为每个设备创建一个持久的虚拟版本(设备影子),并且设备影子的状态可以通过互联网传输协议由智能手机应用程序或其他设备同步和获取。设备影子存储了每个设备的最新报告状态和预期状态,即使设备离线,仍然可以通过调用API获取状态。设备影子提供始终在线的 API,这使得构建与设备交互的智能手机应用程序变得更加容易。
运维 运维功能包括三个方面: · 展示物联网设备的统计信息和通知。 · 日志管理允许检索有关设备行为、上行/下行消息流和消息内容的信息。 · 设备调试支持命令下发、配置更新、检查物联网云平台与设备消息交互情况。
2.2 实践:智慧灯项目
在每章的理论介绍之后,您将找到与智能灯项目相关的实践部分,以帮助您获得实践经验。该项目基于乐鑫的 ESP32-C3 芯片和 ESP RainMaker 物联网云平台,涵盖智能灯产品中的无线模块硬件、基于 ESP32C3 的智能设备嵌入式软件、智能手机应用程序和 ESP RainMaker 交互。
源代码 为了更好的学习和开发体验,本书中的项目已经开源。您可以从我们的 GitHub 存储库下载源代码:https://github。 com/espressif/book-esp32c3-iot-projects。
12 ESP32-C3 无线冒险:物联网综合指南

2.2.1 项目结构
智能灯项目由三部分组成:基于ESP32-C3的智能灯设备,负责与物联网云平台交互,控制LED灯的开关、亮度和色温amp 珠子。二.智能手机应用程序(包括Android和iOS上运行的平板电脑应用程序),负责智能灯产品的网络配置以及查询和控制其状态。
三.基于ESP RainMaker的物联网云平台。为了简单起见,我们在本书中将物联网云平台和业务服务器视为一个整体。有关 ESP RainMaker 的详细信息将在第 3 章中提供。
智慧灯项目结构与物联网架构的对应关系如图2.1所示。
图 2.1。智慧灯项目结构
2.2.2 项目功能
按结构划分,各部分的功能如下。智能灯光设备
· 网络配置和连接。 · LED PWM 控制,如开关、亮度、色温等。 · 自动化或场景控制,如定时开关。 · 闪存的加密和安全启动。 · 固件升级和版本管理。
第 2 章 IoT 项目介绍与实践 13

智能手机应用程序 · 网络配置和设备绑定。 · 智能灯产品控制,如开关、亮度、色温等。 · 自动化或场景设置,如定时开关。 · 本地/远程控制。 · 用户注册、登录等
ESP RainMaker IoT 云平台 · 实现 IoT 设备接入。 · 提供智能手机应用程序可访问的设备操作API。 · 固件升级和版本管理。
2.2.3 硬件准备
如果有兴趣将该项目付诸实践,您还需要以下硬件:智能灯、智能手机、Wi-Fi 路由器以及满足开发环境安装要求的计算机。智能灯
智能灯是一种新型灯泡,其形状与一般白炽灯泡相同。智能灯由电容降压稳压电源、无线模块(内置ESP32-C3)、LED控制器和RGB LED矩阵组成。当连接到电源时,15 V DC 电压tag经过电容降压、二极管整流和调节后的输出为 LED 控制器和 LED 矩阵提供能量。 LED控制器可以按一定的时间间隔自动发送高低电平,使RGB LED矩阵在关闭(灯亮)和打开(灯灭)之间切换,从而发出青色、黄色、绿色、紫色、蓝色、红色、白光。无线模块负责连接Wi-Fi路由器,接收并上报智能灯状态,发送控制LED的命令。
图 2.2。模拟智能灯
在发展初期tage, 您可以使用连接 RGB LED 的 ESP32-C3DevKitM-1 板来模拟智能灯amp 珠子(见图 2.2)。但你应该
14 ESP32-C3 无线冒险:物联网综合指南

请注意,这并不是组装智能灯的唯一方法。本书项目的硬件设计仅包含无线模块(内置ESP32-C3),而不是完整的智能灯硬件设计。此外,乐鑫还生产了基于 ESP32-C3 的音频开发板 ESP32C3-Lyra,用于通过音频控制灯光。该板具有麦克风和扬声器接口,并且可以控制 LED 灯条。可用于开发超低成本、高性能的音频广播器和节奏灯带。图 2.3 显示了与 32 个 LED 灯条连接的 ESP3-C40Lyra 板。
图 2.3。 ESP32-C3-Lyra 与 40 个 LED 灯条相连
智能手机 (Android/iOS) 智能灯项目涉及开发用于设置和控制智能灯产品的智能手机应用程序。
Wi-Fi 路由器 Wi-Fi 路由器将有线网络信号和移动网络信号转换为无线网络信号,供电脑、智能手机、平板电脑等无线设备连接网络。对于前amp也就是说,家庭宽带只需连接Wi-Fi路由器即可实现Wi-Fi设备的无线联网。 Wi-Fi路由器支持的主流协议标准是IEEE 802.11n,平均TxRate为300Mbps,最高600Mbps。它们向后兼容 IEEE 802.11b 和 IEEE 802.11g。乐鑫的 ESP32-C3 芯片支持 IEEE 802.11b/g/n,因此您可以选择单频(2.4 GHz)或双频(2.4 GHz 和 5 GHz)Wi-Fi 路由器。
第 4 章将介绍计算机(Linux/macOS/Windows)开发环境。 第 2 章 IoT 项目介绍与实践 15

2.2.4 开发流程
图 2.4。开发智能灯项目的步骤
硬件设计 物联网设备的硬件设计对于物联网项目至关重要。一个完整的智能灯项目旨在生产所有amp 在市电供电下工作。不同厂家生产的lamp无线模块的款式和驱动类型各不相同,但它们的无线模块通常具有相同的功能。为了简化Smart Ligh项目的开发过程,本书仅涵盖无线模块的硬件设计和软件开发。
物联网云平台配置使用物联网云平台,需要在后端进行项目配置,如创建产品、创建设备、设置设备属性等。
IoT 设备的嵌入式软件开发 通过乐鑫的设备端 SDK ESP-IDF 实现预期功能,包括连接 IoT 云平台、开发 LED 驱动、升级固件等。
智能手机APP开发 开发Android、iOS系统的智能手机APP,实现用户注册登录、设备控制等功能。
物联网设备优化 一旦物联网设备功能的基本开发完成,您就可以转向优化任务,例如功耗优化。
量产测试 根据相关标准进行量产测试,如设备功能测试、老化测试、射频测试等。
尽管有上面列出的步骤,但智能灯项目不一定要遵守这样的程序,因为不同的任务也可以同时执行。对于前amp文件、嵌入式软件和智能手机应用程序可以并行开发。有些步骤可能还需要重复,例如物联网设备优化和量产测试。
16 ESP32-C3 无线冒险:物联网综合指南

2.3 总结
本章首先阐述了物联网项目的基本组成和功能模块,然后介绍了智能灯实践案例,介绍了其结构、功能、硬件准备和开发流程。读者可以从实践中举一反三,并有信心在未来以最少的错误开展物联网项目。
第 2 章 IoT 项目介绍与实践 17

18 ESP32-C3 无线冒险:物联网综合指南

第三章

介绍

ESP

雨人

物联网为改变人们的生活方式提供了无限可能,但物联网工程的发展也充满挑战。借助公有云,终端厂商可以通过以下方案实现产品功能:
基于解决方案提供商的云平台 这样,终端制造商只需设计产品硬件,然后使用提供的通信模块将硬件连接到云端,并按照指南配置产品功能。这是一种有效的方法,因为它消除了服务器端和应用程序端的开发和运维(O&M)的需要。让终端厂商可以专注于硬件设计,而无需考虑云端实现。然而,此类解决方案(例如设备固件和App)通常不是开源的,因此产品功能会受到提供商云平台的限制,无法定制。同时,用户和设备数据也属于云平台。
基于云产品 在该方案中,终端厂商完成硬件设计后,不仅需要利用公有云提供的一款或多款云产品来实现云功能,还需要将硬件与云进行链接。对于前ample,连接到亚马逊 Web 服务(AWS),终端厂商需要使用Amazon API Gateway、AWS IoT Core、AWS Lambda等AWS产品来实现设备接入、远程控制、数据存储、用户管理等基本功能。不仅要求终端厂商对云产品有深入的了解和丰富的经验来灵活使用和配置,还需要考虑初期和后期的建设和维护成本。tages 这对公司的精力和资源提出了很大的挑战。
与公有云相比,私有云通常是针对特定项目和产品而构建的。私有云开发人员在协议设计和业务逻辑实现方面拥有最高的自由度。终端厂商可以随意制作产品和设计方案,轻松整合和赋能用户数据。将公有云的高安全性、可扩展性、可靠性与Advan相结合tag私有云的es,乐鑫推出ESP
19

RainMaker,基于亚马逊云深度集成的私有云解决方案。用户只需使用AWS账户即可部署ESP RainMaker并构建私有云。
3.1 什么是 ESP RainMaker?
ESP RainMaker 是一个完整的 AIoT 平台,由多个成熟的 AWS 产品构建。提供设备上云、设备升级、后台管理、第三方登录、语音集成、用户管理等量产所需的各类服务。通过使用 AWS 提供的 Serverless Application Repository (SAR),终端制造商可以快速将 ESP RainMaker 部署到其 AWS 账户中,既省时又易于操作。 ESP RainMaker 使用的 SAR 由乐鑫管理和维护,可帮助开发者降低云端维护成本,加速 AIoT 产品的开发,从而构建安全、稳定、可定制的 AIoT 解决方案。图 3.1 显示了 ESP RainMaker 的架构。
图 3.1。 ESP RainMaker 架构
乐鑫的 ESP RainMaker 公共服务器免费供所有 ESP 爱好者、创客和教育工作者进行解决方案评估。开发者可以使用Apple、Google或GitHub帐户登录,快速构建自己的物联网应用原型。公共服务器集成了Alexa和Google Home,并提供语音控制服务,由Alexa Skill和Google Actions支持。其语义识别功能也由第三方提供支持。 RainMaker IoT 设备仅响应特定操作。有关支持的语音命令的详尽列表,请查看第三方平台。此外,乐鑫还提供公共 RainMaker 应用程序,供用户通过智能手机控制产品。 20 ESP32-C3 无线冒险:物联网综合指南

3.2 ESP RainMaker 的实现
如图 3.2 所示,ESP RainMaker 由四部分组成: · 声明服务,使 RainMaker 设备能够动态获取证书。 · RainMaker Cloud(也称云后端),提供消息过滤、用户管理、数据存储、第三方集成等服务。 · RainMaker Agent,使 RainMaker 设备能够连接到 RainMaker Cloud。 · RainMaker 客户端(RainMaker App 或 CLI 脚本),用于配置、用户创建、设备关联和控制等。
图 3.2。 ESP造雨机的结构
ESP RainMaker 提供了一整套用于产品开发和量产的工具,包括: RainMaker SDK
RainMaker SDK 基于 ESP-IDF,提供设备端代理的源代码和相关 C API 用于固件开发。开发者只需编写应用逻辑,剩下的交给RainMaker框架即可。有关 C API 的更多信息,请访问 https://bookc3.espressif.com/rm/c-api-reference。 RainMaker App RainMaker App的公共版本允许开发者完成设备配置,以及控制和查询设备(例如智能照明产品)的状态。它可在 iOS 和 Android 应用商店中使用。更多详细信息,请参阅第 10 章。 REST API REST API 帮助用户构建自己的应用程序,类似于 RainMaker App。欲了解更多信息,请访问 https://swaggerapis.rainmaker.espressif.com/。
第 3 章 ESP RainMaker 简介 21

Python API RainMaker SDK 附带基于 Python 的 CLI,可实现与智能手机类似的所有功能。有关 Python API 的更多信息,请访问 https://bookc3.espressif.com/rm/python-api-reference。
管理 CLI 为 ESP RainMaker 私有部署提供了具有更高访问级别的管理 CLI,用于批量生成设备证书。
3.2.1 领取服务
RainMaker设备和云端后端之间的所有通信都是通过MQTT+TLS进行的。在 ESP RainMaker 的上下文中,“声明”是设备从声明服务获取证书以连接到云后端的过程。请注意,声明服务仅适用于公共 RainMaker 服务,而对于私有部署,需要通过 Admin CLI 批量生成设备证书。 ESP RainMaker 支持三种类型的声明服务: 自我声明
连接到互联网后,设备本身通过 eFuse 中预编程的密钥获取证书。主机驱动声明 证书是使用 RainMaker 帐户从开发主机获取的。协助索赔 证书是在配置期间通过智能手机应用程序获得的。
3.2.2 造雨者代理
图 3.3。 RainMaker SDK结构 RainMaker Agent的主要功能是提供连接,协助应用层处理上下行云数据。它是通过 RainMaker SDK 22 ESP32-C3 无线冒险构建的:物联网综合指南

基于成熟的 ESP-IDF 框架开发,使用 RTOS、NVS、MQTT 等 ESP-IDF 组件。图 3.3 显示了 RainMaker SDK 的结构。
RainMaker SDK 包括两个主要功能。
联系
我。配合Claiming Service获取设备证书。
二.使用安全的 MQTT 协议连接到云端后端,提供远程连接,实现远程控制、消息上报、用户管理、设备管理等。默认使用 ESP-IDF 中的 MQTT 组件,并提供抽象层与其他接口交互协议栈。
三.提供用于 Wi-Fi 连接和配置的 wifi 配置组件、用于 OTA 升级的 esp https ota 组件以及用于本地设备发现和连接的 esp local ctrl 组件。所有这些目标都可以通过简单的配置来实现。
数据处理
我。存储Claiming Service颁发的设备证书以及运行RainMaker时需要的数据,默认使用nvs flash组件提供的接口,并提供API供开发者直接使用。
二.采用回调机制处理上下行云端数据,并自动将数据解封到应用层,方便开发者处理。对于前ampRainMaker SDK提供了丰富的建立TSL(Thing Specific Language)数据的接口,需要定义TSL模型来描述物联网设备,实现定时、倒计时、语音控制等功能。对于计时等基本交互功能,RainMaker SDK提供了免开发的解决方案,只需在需要时即可启用。然后,RainMaker Agent 会直接处理数据,通过关联的 MQTT 主题发送到云端,并通过回调机制将数据变化反馈到云端后端。
3.2.3 云后端
云后端基于AWS无服务器计算构建,通过AWS Cognito(身份管理系统)、Amazon API Gateway、AWS Lambda(无服务器计算服务)、Amazon DynamoDB(NoSQL数据库)、AWS IoT Core(提供MQTT访问的物联网访问核心)来实现和规则过滤)、Amazon Simple Email Service(SES 简单邮件服务)、Amazon CloudFront(快速交付网络)、Amazon Simple Queue Service(SQS 消息队列)和 Amazon S3(桶存储服务)。其目的是优化可扩展性和安全性。借助 ESP RainMaker,开发人员无需在云端编写代码即可管理设备。设备上报的消息透传至
第 3 章 ESP RainMaker 简介 23

应用程序客户端或其他第三方服务。表3.1展示了云后端使用的AWS云产品和功能,更多产品和功能正在开发中。
表 3.1。云后端使用的AWS云产品和功能

RainMaker 使用的 AWS 云产品

功能

AWS Cognito

管理用户凭据并支持第三方登录

AWS Lambda

实现云后端核心业务逻辑

Amazon Timestream 存储时间序列数据

Amazon DynamoDB 存储客户的私人信息

AWS IoT 核心

支持MQTT通讯

亚马逊 SES

提供电子邮件发送服务

Amazon CloudFront 加速后端管理 web网站访问

亚马逊 SQS

从 AWS IoT Core 转发消息

3.2.4 造雨者客户端
RainMaker 客户端(例如 App 和 CLI)通过 REST API 与云后端通信。有关 REST API 的详细信息和说明可以在 Espressif 提供的 Swagger 文档中找到。 RainMaker 的移动应用程序客户端适用于 iOS 和 Android 系统。它允许设备配置、控制和共享,以及创建和启用倒计时任务以及连接到第三方平台。它可以根据设备上报的配置自动加载UI和图标,并完整显示设备的TSL。
例如ample,如果智能灯是基于RainMaker SDK提供的ex构建的amp配置完成后,灯泡的图标和 UI 将自动加载。用户可以通过界面改变灯光的颜色和亮度,并通过将 Alexa Smart Home Skill 或 Google Smart Home Actions 链接到其 ESP RainMaker 帐户来实现第三方控制。图 3.4 显示图标和 UI examp分别在 Alexa、Google Home 和 ESP RainMaker 应用程序上查看灯泡灯的文件。

24 ESP32-C3 无线冒险:物联网综合指南

(a) 前ample – Alexa

(b) 前amp乐 – Google Home

(c) 前ample – ESP造雨机
图 3.4. 前ampAlexa、Google Home 和 ESP RainMaker 应用程序上灯泡图标和 UI 的文件
3.3 实践:ESP RainMaker 开发要点
设备驱动层完成后,开发人员可以开始使用 RainMaker SDK 提供的 API 创建 TSL 模型并处理下行数据,并根据产品定义和需求启用 ESP RainMaker 基础服务。
第 3 章 ESP RainMaker 简介 25

本书第9.4节将解释LED智能灯在RainMaker中的实现。在调试过程中,开发人员可以使用RainMaker SDK中的CLI工具与智能灯进行通信(或调用Swagger的REST API)。
第 10 章将详细阐述 REST API 在开发智能手机应用程序中的用法。 LED 智能灯的 OTA 升级将在第 11 章中介绍。如果开发人员启用了 ESP Insights 远程监控,ESP RainMaker 管理后端将显示 ESP Insights 数据。详细信息将在第 15 章中介绍。
ESP RainMaker 支持私有部署,与公共 RainMaker 服务器有以下不同:
声明服务 要在私有部署中生成证书,需要使用 RainMaker 管理 CLI 而不是声明。对于公共服务器,开发人员必须获得管理员权限才能实现固件升级,但这在商业部署中是不可取的。因此,既不能为自我声明提供单独的身份验证服务,也不能为主机驱动或辅助声明提供管理权限。
手机应用 在私有部署中,需要单独配置和编译应用程序,以确保帐户系统不互操作。
第 3 方登录和语音集成 开发人员必须通过 Google 和 Apple 开发者帐户单独配置,才能启用第 3 方登录以及 Alexa Skill 和 Google Voice Assistant 集成。
TIPS 有关云部署的详细信息,请访问 https://customer.rainmaker.espressif。 com.固件方面,从公共服务器迁移到私有服务器只需更换设备证书,大大提高了迁移效率,降低了迁移和二次调试的成本。
3.4 ESP RainMaker 的特点
ESP RainMaker 功能主要针对三个方面:用户管理、最终用户和管理员。除非另有说明,所有功能在公共和私有服务器中均受支持。
3.4.1 用户管理
用户管理功能允许最终用户注册、登录、更改密码、检索密码等。
26 ESP32-C3 无线冒险:物联网综合指南

注册和登录 RainMaker 支持的注册和登录方式包括: · 邮箱地址 + 密码 · 电话号码 + 密码 · Google 账户 · Apple 账户 · GitHub 账户(仅限公共服务器) · Amazon 账户(仅限私人服务器)
注意使用 Google/Amazon 注册会与 RainMaker 共享用户的电子邮件地址。使用 Apple 共享一个虚拟地址进行注册,该地址是 Apple 专门为 RainMaker 服务为用户分配的。首次使用 Google、Apple 或 Amazon 帐户登录的用户将自动创建 RainMaker 帐户。
更改密码仅适用于基于电子邮件 ID/电话号码的登录。更改密码后,所有其他活动会话都将被注销。根据 AWS Cognito 行为,注销的会话可以保持活动状态长达 1 小时。
检索密码仅适用于基于电子邮件 ID/电话号码的登录。
3.4.2 最终用户功能
向最终用户开放的功能包括本地和远程控制和监控、调度、设备分组、设备共享、推送通知和第三方集成。
远程控制和监控 · 查询一台或所有设备的配置、参数值和连接状态。 · 设置单个或多个设备的参数。
本地控制和监控 手机和设备需要连接到同一网络才能进行本地控制。
日程安排 · 用户在特定时间预设某些操作。 · 执行计划时设备不需要互联网连接。 · 对单个或多个设备进行一次或重复(通过指定天数)。
设备分组 支持多级抽象分组 组元数据可用于创建主房间结构。
第 3 章 ESP RainMaker 简介 27

设备共享 一台或多台设备可以与一位或多位用户共享。
推送通知 最终用户将收到以下事件的推送通知: · 添加/删除新设备 · 连接到云的设备 · 设备与云断开连接 · 创建/接受/拒绝的设备共享请求 · 设备报告的警报消息
支持第三方集成 Alexa 和 Google Voice Assistant 来控制 RainMaker 设备,包括灯、开关、插座、风扇和温度传感器。
3.4.3 管理功能
管理功能允许管理员实现设备注册、设备分组、OTA升级等 view 统计数据和 ESP Insights 数据。
设备注册 生成设备证书并使用管理 CLI 注册(仅限专用服务器)。
设备分组 根据设备信息创建抽象或结构化组(仅限专用服务器)。
无线 (OTA) 升级 根据版本和型号将固件上传到一台或多台设备或一组 监视、取消或存档 OTA 作业。
View 统计数据 View可用的统计数据包括: · 设备注册(管理员注册的证书) · 设备激活(设备首次连接) · 用户帐户 · 用户设备关联
View ESP 洞察数据 View可用的 ESP Insights 数据包括: · 错误、警告和自定义日志 · 崩溃报告和分析 · 重新启动原因 · 内存使用情况、RSSI 等指标 · 自定义指标和变量
28 ESP32-C3 无线冒险:物联网综合指南

3.5 总结
在本章中,我们介绍了公共 RainMaker 部署和私有部署之间的一些关键区别。乐鑫推出的私有 ESP RainMaker 解决方案具有高可靠性和可扩展性。 ESP32系列芯片全部已对接并适配AWS,大大降低了成本。开发者可以专注于原型验证,无需了解AWS云产品。我们还解释了 ESP RainMaker 的实现和功能,以及使用该平台进行开发的一些要点。
扫描下载 ESP RainMaker for Android 扫描下载 ESP RainMaker for iOS
第 3 章 ESP RainMaker 简介 29

30 ESP32-C3 无线冒险:物联网综合指南

第四章 开发环境搭建
本章重点介绍 ESP-IDF,ESP32-C3 的官方软件开发框架。我们将讲解如何在各种操作系统上搭建环境,并介绍 ESP-IDF 的项目结构和构建系统,以及相关开发工具的使用。然后我们会展示一个ex的编译和运行过程ample 项目,同时提供每个 s 的输出日志的详细说明tage.
4.1 ESP-IDF 结束view
ESP-IDF(Espressif IoT Development Framework)是乐鑫科技提供的一站式物联网开发框架。它采用C/C++作为主要开发语言,支持Linux、Mac、Windows等主流操作系统下的交叉编译。前任amp本书中包含的文件程序是使用 ESP-IDF 开发的,它提供以下功能: · SoC 系统级驱动程序。 ESP-IDF 包括 ESP32、ESP32-S2、ESP32-C3、
和其他芯片。这些驱动程序包括外设低级(LL)库、硬件抽象层(HAL)库、RTOS支持和上层驱动软件等。 · 基本组件。 ESP-IDF 包含物联网开发所需的基本组件。其中包括HTTP、MQTT等多种网络协议栈,动态调频的电源管理框架,Flash加密、安全启动等功能。 · 开发和生产工具。 ESP-IDF 提供了开发和量产过程中常用的构建、烧写和调试工具(见图 4.1),例如基于 CMake 的构建系统、基于 GCC 的交叉编译工具链、JTAG 基于OpenOCD的调试工具等。值得注意的是,ESP-IDF代码主要遵循Apache 2.0开源许可证。用户可以在遵守开源许可条款的情况下不受限制地开发个人或商业软件。此外,用户还可以免费获得永久专利许可,而无需开源对源代码所做的任何修改。
31

图 4.1.

构建、刷新和调试-

用于开发和批量生产的工具

4.1.1 ESP-IDF 版本
ESP-IDF 代码作为开源项目托管在 GitHub 上。目前,有三个主要版本可用:v3、v4 和 v5。每个主要版本通常包含各种子版本,例如v4.2、v4.3等。乐鑫确保为每个发布的子版本提供 30 个月的错误修复和安全补丁支持。因此,也会定期发布颠覆版本,例如 v4.3.1、v4.2.2 等。 表 4.1 显示了不同 ESP-IDF 版本对乐鑫芯片的支持情况,表明是否处于预发布状态。view stage(为预view 版本,可能缺少某些功能或文档)或受到官方支持。

表 4.1。乐鑫芯片不同 ESP-IDF 版本的支持情况

系列 ESP32 ESP32-S2 ESP32-C3 ESP32-S3 ESP32-C2 ESP32-H2

支持v4.1

v4.2 支持 支持

v4.3 支持 支持 支持

v4.4 支持 支持 支持 支持
前view

v5.0 支持 支持 支持 支持 支持 预view

32 ESP32-C3 无线冒险:物联网综合指南

大版本的迭代往往涉及框架结构的调整和编译系统的更新。对于前amp从 v3.* 到 v4.* 的主要变化是构建系统从 Make 逐渐迁移到 CMake。另一方面,次要版本的迭代通常需要添加新功能或支持新芯片。
区分和理解稳定版本和 GitHub 分支之间的关系很重要。标记为 v*.* 或 v*.*.* 的版本代表已通过 Espressif 完整内部测试的稳定版本。一旦修复,同一版本的代码、工具链和发布文档保持不变。然而,GitHub 分支(例如,release/v4.3 分支)会频繁地提交代码,通常每天都会提交。因此,同一分支下的两个代码片段可能会有所不同,需要开发人员及时更新相应的代码。
4.1.2 ESP-IDF Git 工作流程
Espressif 遵循 ESP-IDF 的特定 Git 工作流程,概述如下:
· 作为主要开发分支的 master 分支进行了新的更改。 master 分支上的 ESP-IDF 版本始终带有 -dev tag 表示目前正在开发中,例如v4.3-dev。 master 分支上的更改将首先被重新view在 Espressif 的内部存储库中进行编辑和测试,然后在自动化测试完成后推送到 GitHub。
· 一旦新版本在master分支上完成了功能开发并满足进入beta测试的标准,它就会过渡到新分支,例如release/v4.3。另外,这个新分行是 tagged 作为预发布版本,如 v4.3-beta1。开发者可以参考GitHub平台获取完整的分支列表和 tags 对于 ESP-IDF。需要注意的是,测试版(预发行版)可能仍然存在大量已知问题。随着 Beta 版本的持续测试,错误修复会同时添加到该版本和 master 分支中。与此同时,主分支可能已经开始为下一个版本开发新功能。当测试接近完成时,分支会添加候选版本 (rc) 标签,表明它是正式版本的潜在候选版本,例如 v4.3-rc1。此时此刻tage,该分支仍然是预发布版本。
· 如果没有发现或报告重大错误,预发布版本最终会获得主要版本标签(例如,v5.0)或次要版本标签(例如,v4.3),并成为正式发布版本,并记录在案在发行说明页面中。随后,此版本中发现的任何错误都会在发布分支上修复。手动测试完成后,分支会被分配一个错误修复版本标签(例如,v4.3.2),这也反映在发行说明页面上。
第 4 章 设置开发环境 33

4.1.3 选择合适的版本
由于ESP-IDF从v32版本开始正式支持ESP3-C4.3,而在撰写本书时v4.4尚未正式发布,因此本书使用的版本为v4.3.2,这是一个修订版本v4.3 的。然而,值得注意的是,当您阅读本书时,v4.4 或更新版本可能已经可用。选择版本时,我们建议如下:
· 对于入门级开发者,建议选择稳定的 v4.3 版本或其修订版本,与 ex 保持一致amp本书中使用的版本。
· 量产时,建议使用最新的稳定版本,以获得最新的技术支持。
· 如果您打算尝试新芯片或探索新产品功能,请使用 master 分支。最新版本包含所有最新功能,但请记住,可能存在已知或未知的错误。
· 如果正在使用的稳定版本不包含所需的新功能,并且您希望最大程度地降低与 master 分支相关的风险,请考虑使用相应的发布分支,例如release/v4.4分支。乐鑫的 GitHub 存储库将首先创建 release/v4.4 分支,并在完成所有功能开发和测试后,基于该分支的特定历史快照发布稳定的 v4.4 版本。
4.1.4 结束view ESP-IDF SDK 目录
ESP-IDF SDK 由两个主要目录组成:esp-idf 和 .espressif。前者包含 ESP-IDF 存储库的源代码 files和编译脚本,而后者主要存放编译工具链等软件。熟悉这两个目录将有助于开发人员更好地利用可用资源并加快开发进程。 ESP-IDF的目录结构描述如下:
(1)ESP-IDF存储库代码目录(/esp/esp-idf),如图4.2所示。
A。组件目录组件
该核心目录集成了 ESP-IDF 的众多重要软件组件。如果不依赖此目录中的组件,则无法编译任何项目代码。它包括对各种 Espressif 芯片的驱动程序支持。从外设的LL库和HAL库接口到上层的Driver和Virtual File 系统(VFS)层支持,开发者可以根据自己的开发需求,在不同层面选择合适的组件。 ESP-IDF 还支持多种标准网络协议栈,例如 TCP/IP、HTTP、MQTT、 WebSocket等。开发人员可以利用Socket等熟悉的接口来构建网络应用程序。组件提供全面
34 ESP32-C3 无线冒险:物联网综合指南

图 4.2。 ESP-IDF 存储库代码目录
功能强大,可以轻松集成到应用程序中,使开发人员能够专注于业务逻辑。一些常见的组件包括: · 驱动程序:该组件包含各种乐鑫的外设驱动程序
该组件中的外设驱动程序提供与芯片无关的抽象接口。每个外设都有一个公共头文件 file (例如gpio.h),无需处理不同芯片特定的支持问题。 · esp_wifi:Wi-Fi 作为一种特殊的外设,被视为一个单独的组件。它包括多种API,例如各种Wi-Fi驱动模式的初始化、参数配置和事件处理。该组件的某些功能以静态链接库的形式提供。 ESP-IDF 还提供全面的驱动程序文档以方便使用。
第 4 章 设置开发环境 35

· freertos:该组件包含完整的FreeRTOS代码。除了对该操作系统提供全面的支持外,乐鑫还将支持扩展到双核芯片。对于 ESP32 和 ESP32-S3 等双核芯片,用户可以在特定内核上创建任务。
b.文档目录 docs
该目录包含 ESP-IDF 相关开发文档,包括入门指南、API 参考手册、开发指南等。
注意 通过自动化工具编译后,该目录的内容将部署在 https://docs.espressif.com/projects/esp-idf。请确保将文档目标切换为 ESP32-C3 并选择指定的 ESP-IDF 版本。
C。脚本工具工具
该目录包含常用的编译前端工具如idf.py,监控终端工具idf_monitor.py等,子目录cmake还包含核心脚本 file编译系统的s,作为实现ESP-IDF编译规则的基础。添加环境变量时,会将tools目录下的内容添加到系统环境变量中,从而可以在项目路径下直接执行idf.py。
d.前任ample 程序目录 examp莱斯
该目录包含大量 ESP-IDF examp演示组件 API 用法的文件程序。前任amples 根据其类别被组织到各个子目录中:
· get-started:该子目录包含入门级examp像“hello world”和“blink”这样的文件可以帮助用户掌握基础知识。
· 蓝牙:可以找到蓝牙相关的examp此处的文件,包括蓝牙 LE Mesh、蓝牙 LE HID、BluFi 等。
· wifi:该子目录主要关注Wi-Fi examp文件,包括 Wi-Fi SoftAP、Wi-Fi Station、espnow 等基本程序以及专有通信协议 examp来自乐鑫的文件。它还包括多个应用层examp基于Wi-Fi的文件,如Iperf、Sniffer、Smart Config等。
· 外围设备:这个广泛的子目录根据外围设备名称进一步分为许多子文件夹。主要包含外设驱动exampEspressif 芯片的文件,每个 example有几个子前任amp莱斯。例如,gpio子目录包括两个examples:GPIO 和 GPIO 矩阵键盘。重要的是要注意,并非所有前任amp该目录下的文件适用于ESP32-C3。
36 ESP32-C3 无线冒险:物联网综合指南

例如amp乐,前任ampusb/host 中的文件仅适用于具有 USB Host 硬件的外设(例如 ESP32-S3),而 ESP32-C3 则没有该外设。编译系统通常在设置目标时提供提示。自述文件 file 每个前任的amp文件列出了支持的芯片。 · 协议:该子目录包含examp各种通信协议的文件,包括MQTT、HTTP、HTTP Server、PPPoS、Modbus、mDNS、SNTP,涵盖广泛的通信协议ampIoT 开发所需的文件。 · 配置:在这里,您会找到配置前amp适用于不同方法的文件,例如 Wi-Fi 配置和蓝牙 LE 配置。 · system:该子目录包含系统调试examp文件(例如,堆栈跟踪、运行时跟踪、任务监控)、电源管理 examples(例如,各种睡眠模式、协处理器)和 examp与控制台终端、事件循环和系统计时器等常见系统组件相关的文件。 · storage:在这个子目录中,你会发现examp全部的 file ESP-IDF支持的系统和存储机制(例如Flash、SD卡等存储介质的读写),以及examp非易失性存储 (NVS)、FatFS、SPIFFS 等文件 file 系统操作。 · security:该子目录包含examp与闪存加密相关的文件。 (2)ESP-IDF编译工具链目录(/.espressif),如图4.3所示。
图 4.3。 ESP-IDF编译工具链目录
第 4 章 设置开发环境 37

A。软件分发目录 dist
ESP-IDF工具链和其他软件以压缩包的形式分发。安装过程中,安装工具首先将压缩包下载到dist目录,然后解压到指定目录。安装完成后,可以安全地删除该目录中的内容。
b. Python虚拟环境目录 python env
不同版本的 ESP-IDF 依赖于特定版本的 Python 包。直接在同一主机上安装这些软件包可能会导致软件包版本之间发生冲突。为了解决这个问题,ESP-IDF 利用 Python 虚拟环境来隔离不同的软件包版本。通过这种机制,开发人员可以在同一主机上安装多个版本的 ESP-IDF,并通过导入不同的环境变量轻松切换。
C。 ESP-IDF编译工具链目录tools
该目录主要包含编译 ESP-IDF 项目所需的交叉编译工具,如 CMake 工具、Ninja 构建工具以及生成最终可执行程序的 gcc 工具链。此外,该目录还包含 C/C++ 语言的标准库以及相应的头文件 files。如果程序引用系统头 file 就像#include ,编译工具链会定位到stdio.h file 在此目录中。
4.2 设置 ESP-IDF 开发环境
ESP-IDF 开发环境支持 Windows、Linux、macOS 等主流操作系统。本节将介绍如何在各个系统上搭建开发环境。建议在Linux系统上开发ESP32-C3,这里详细介绍。由于开发工具的相似性,许多指令适用于跨平台。因此,建议仔细阅读本节内容。
注意 您可以参考 https://bookc3.espressif.com/esp32c3 上提供的在线文档,其中提供了本节中提到的命令。
4.2.1 Linux 上搭建 ESP-IDF 开发环境
ESP-IDF 开发环境所需的 GNU 开发和调试工具是 Linux 系统原生的。此外,Linux 中的命令行终端功能强大且用户友好,使其成为 ESP32-C3 开发的理想选择。你可以
38 ESP32-C3 无线冒险:物联网综合指南

选择您喜欢的 Linux 发行版,但我们建议使用 Ubuntu 或其他基于 Debian 的系统。本节提供有关在 Ubuntu 20.04 上设置 ESP-IDF 开发环境的指南。
1.安装需要的包
打开一个新终端并执行以下命令来安装所有必需的软件包。该命令将自动跳过已安装的软件包。
$ sudo apt-get install git wget flex bison gperf python3 python3-pip python3setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
TIPS 上述命令需要使用管理员帐号和密码。默认情况下,输入密码时不会显示任何信息。只需按“Enter”键即可继续该过程。
Git 是 ESP-IDF 中的关键代码管理工具。开发环境搭建成功后,可以使用git log命令 view 自 ESP-IDF 创建以来所做的所有代码更改。此外,ESP-IDF 中还使用 Git 来确认版本信息,这对于安装特定版本对应的正确工具链是必要的。除了 Git 之外,其他重要的系统工具还包括 Python。 ESP-IDF 包含大量用 Python 编写的自动化脚本。 CMake、Ninja-build、Ccache 等工具广泛应用于 C/C++ 项目中,是 ESP-IDF 中默认的代码编译和构建工具。 libusb-1.0-0 和 dfu-util 是用于 USB 串行通信和固件烧录的主要驱动程序。软件包安装完成后,就可以使用 apt show命令获取每个包的详细描述。对于前ample,使用 apt show git 打印 Git 工具的描述信息。
Q:Python版本不支持怎么办?答:ESP-IDF v4.3 需要不低于 v3.6 的 Python 版本。对于旧版本的Ubuntu,请手动下载并安装更高版本的Python,并将Python3设置为默认Python环境。您可以通过搜索关键字 update-alternatives python 找到详细说明。
2.下载ESP-IDF存储库代码
打开终端并使用 mkdir 命令在主目录中创建一个名为 esp 的文件夹。如果您愿意,可以为该文件夹选择不同的名称。使用cd命令进入该文件夹。
第 4 章 设置开发环境 39

$ mkdir -p /esp $ cd /esp
使用 git clone 命令下载 ESP-IDF 存储库代码,如下所示:
$ git clone -b v4.3.2 –递归 https://github.com/espressif/esp-idf.git
在上面的命令中,参数 -b v4.3.2 指定要下载的版本(在本例中为版本 4.3.2)。参数 –recursive 确保递归下载 ESP-IDF 的所有子存储库。有关子存储库的信息可以在 .gitmodules 中找到 file.
3.安装ESP-IDF开发工具链
乐鑫提供了自动化脚本 install.sh 来下载并安装工具链。该脚本会检查当前的 ESP-IDF 版本和操作系统环境,然后下载并安装合适版本的 Python 工具包和编译工具链。工具链默认安装路径为/.espressif。您所需要做的就是导航到 esp-idf 目录并运行 install.sh。
$ cd /esp/esp-idf $ ./install.sh
如果工具链安装成功,终端会显示:
全部完成!
至此,ESP-IDF开发环境已经搭建成功。
4.2.2 Windows 上搭建 ESP-IDF 开发环境
1.下载ESP-IDF工具安装程序
TIPS 建议在 Windows 10 或更高版本上搭建 ESP-IDF 开发环境。您可以从 https://dl.espressif.com/dl/esp-idf/ 下载安装程序。该安装程序也是一个开源软件,其源代码可以在 view编辑于 https://github.com/espressif/idf-installer。
· 在线 ESP-IDF 工具安装程序
这个安装程序比较小,大小在4MB左右,安装过程中还会下载其他包和代码。先进的tag在线安装程序的最大特点是不仅可以在安装过程中按需下载软件包和代码,还允许安装 ESP-IDF 的所有可用版本以及 GitHub 代码的最新分支(例如 master 分支) 。缺点tage是安装过程中需要网络连接,可能会因为网络问题导致安装失败。
40 ESP32-C3 无线冒险:物联网综合指南

· 离线 ESP-IDF 工具安装程序 此安装程序较大,大约 1 GB 大小,包含环境设置所需的所有软件包和代码。主要优点tag离线安装程序的最大特点是可以在没有联网的电脑上使用,一般安装成功率较高。需要注意的是,离线安装程序只能安装 v*.* 或 v*.*.* 标识的 ESP-IDF 稳定版本。
2. 运行 ESP-IDF 工具安装程序 下载合适版本的安装程序后(例如使用 ESP-IDF Tools Offline 4.3.2)ample 此处),双击 exe file 启动 ESP-IDF 安装界面。下面演示如何使用离线安装程序安装 ESP-IDF 稳定版 v4.3.2。
(1) 在图 4.4 所示的“选择安装语言”界面中,从下拉列表中选择要使用的语言。
图 4.4。 “选择安装语言”界面 (2)选择语言后,点击“确定”,弹出“许可协议”界面
(见图 4.5)。仔细阅读安装许可协议后,选择“我接受该协议”,然后单击“下一步”。
图 4.5。 “许可协议”界面 第 4 章 设置开发环境 41

(3) 再view 在“安装前系统检查”界面中进行系统配置(见图4.6)。检查Windows版本和安装的防病毒软件信息。如果所有配置项均正常,则单击“下一步”。否则,您可以单击“完整日志”以获取基于关键项的解决方案。
图 4.6。 “安装前系统检查”界面TIPS
您可以将日志提交到 https://github.com/espressif/idf-installer/issues 寻求帮助。 (4) 选择ESP-IDF安装目录。这里选择D:/.espressif,如图
图4.7,点击“下一步”。请注意,这里的.espressif是一个隐藏目录。安装完成后,您可以 view 通过打开该目录的具体内容 file 管理器并显示隐藏的项目。
图 4.7。选择 ESP-IDF 安装目录 42 ESP32-C3 无线探险:物联网综合指南

(5) 勾选需要安装的组件,如图4.8所示。建议使用默认选项,即完成安装,然后点击“下一步”。
图 4.8。选择要安装的组件 (6) 确认要安装的组件,点击“安装”开始自动安装
失速过程,如图4.9所示。安装过程可能会持续几十分钟,安装过程进度条如图4.10所示。请耐心等待。
图 4.9。安装准备 (7) 安装完成后,建议勾选“Register the ESP-IDF
将可执行文件作为 Windows Defender 排除工具...”以防止防病毒软件删除 files。添加排除项还可以跳过防病毒软件的频繁扫描
第 4 章 设置开发环境 43

图 4.10。安装进度条软件,大大提高Windows系统的代码编译效率。单击“完成”,完成开发环境的安装,如图4.11所示。您可以选择勾选“运行 ESP-IDF PowerShell 环境”或“运行 ESP-IDF 命令提示符”。安装后直接运行编译窗口,确保开发环境正常运行。
图 4.11。安装完成 (8) 在程序列表中打开已安装的开发环境(ESP-IDF 4.3
CMD 或 ESP-IDF 4.3 PowerShell 终端,如图 4.12),在终端运行时会自动添加 ESP-IDF 环境变量。之后就可以使用idf.py命令进行操作了。打开的 ESP-IDF 4.3 CMD 如图 4.13 所示。 44 ESP32-C3 无线冒险:物联网综合指南

图 4.12。开发环境已安装
图 4.13。 ESP-IDF 4.3 命令
4.2.3 Mac 上搭建 ESP-IDF 开发环境
Mac 系统上安装 ESP-IDF 开发环境的过程与 Linux 系统上安装过程相同。下载存储库代码和安装工具链的命令完全相同。只是安装依赖包的命令略有不同。 1. 安装依赖包 打开终端,运行以下命令安装Python包管理工具pip:
% sudo 轻松安装 pip
通过运行以下命令来安装 Homebrew(适用于 macOS 的包管理工具):
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
运行以下命令安装所需的依赖包:
%brew python3安装cmake ninja ccache dfu-util
2. 下载 ESP-IDF 存储库代码 按照 4.2.1 节中提供的说明下载 ESP-IDF 存储库代码。步骤与在Linux系统上下载相同。
第 4 章 设置开发环境 45

3.安装ESP-IDF开发工具链
按照 4.2.1 节中提供的说明安装 ESP-IDF 开发工具链。步骤与在 Linux 系统上安装相同。
4.2.4 安装VS代码
默认情况下,ESP-IDF SDK 不包含代码编辑工具(尽管最新的 Windows ESP-IDF 安装程序提供了安装 ESP-IDF Eclipse 的选项)。您可以使用您选择的任何文本编辑工具来编辑代码,然后使用终端命令进行编译。
VS Code (Visual Studio Code) 是一种流行的代码编辑工具,它是一款免费且功能丰富的代码编辑器,具有用户友好的界面。它提供各种 plugins 提供代码导航、语法突出显示、Git 版本控制和终端集成等功能。此外,乐鑫还为 VS Code 开发了名为 Espressif IDF 的专用插件,可简化项目配置和调试。
您可以在终端中使用 code 命令快速打开 VS Code 中的当前文件夹。或者,您可以使用快捷键 Ctrl+ 在 VS Code 中打开系统的默认终端控制台。
TIPS 推荐使用 VS Code 进行 ESP32-C3 代码开发。从 https://code.visualstudio.com/ 下载并安装最新版本的 VS Code。
4.2.5 第三方开发环境介绍
除了官方的 ESP-IDF 开发环境主要使用 C 语言外,ESP32-C3 还支持其他主流编程语言和广泛的第三方开发环境。一些值得注意的选项包括:
Arduino:硬件和软件的开源平台,支持各种微控制器,包括 ESP32-C3。
它使用C++语言并提供简化且标准化的API,通常称为Arduino语言。 Arduino 广泛应用于原型开发和教育环境。它提供了一个可扩展的软件包和一个IDE,可以轻松编译和刷新。
MicroPython:一种 Python 3 语言解释器,设计用于在嵌入式微控制器平台上运行。
通过简单的脚本语言,可以直接访问 ESP32-C3 的外设资源(如 UART、SPI 和 I2C)和通信功能(如 Wi-Fi 和蓝牙 LE)。
46 ESP32-C3 无线冒险:物联网综合指南

这简化了硬件交互。 MicroPython 结合 Python 丰富的数学运算库,可以在 ESP32-C3 上实现复杂的算法,方便 AI 相关应用的开发。作为脚本语言,无需重复编译;可以进行修改并且可以直接执行脚本。
NodeMCU:针对ESP系列芯片开发的LUA语言解释器。
它支持ESP芯片的几乎所有外围功能,并且比MicroPython更轻量。与MicroPython类似,NodeMCU使用脚本语言,无需重复编译。
此外,ESP32-C3还支持NuttX和Zephyr操作系统。 NuttX是一个实时操作系统,提供POSIX兼容接口,增强应用程序的可移植性。 Zephyr 是一款专为物联网应用设计的小型实时操作系统。它包含了物联网开发所需的众多软件库,逐渐演变成一个全面的软件生态系统。
本书没有提供上述开发环境的详细安装说明。您可以根据自己的需求,按照相应的文档和说明安装开发环境。
4.3 ESP-IDF 编译系统
4.3.1 编译系统基本概念
ESP-IDF 项目是一个带有入口函数的主程序和多个独立功能组件的集合。对于前amp一个控制LED开关的工程,主要由入口程序main和控制GPIO的驱动组件组成。如果要实现LED远程控制,还需要添加Wi-Fi、TCP/IP协议栈等。
编译系统可以编译、链接、生成可执行文件 files (.bin) 通过一组构建规则来获取代码。 ESP-IDF v4.0 及以上版本的编译系统默认基于 CMake,可以使用编译脚本 CMakeLists.txt 来控制代码的编译行为。 ESP-IDF 编译系统除了支持 CMake 的基本语法外,还定义了一套默认的编译规则和 CMake 函数,您可以通过简单的语句编写编译脚本。
4.3.2 项目 File 结构
项目是一个文件夹,包含入口程序main、用户定义的组件和 file构建可执行应用程序所需的,例如编译脚本、配置
第 4 章 设置开发环境 47

files、分区表等项目可以复制传递,同样的可执行文件 file 可以在具有相同版本ESP-IDF开发环境的机器上编译生成。典型的 ESP-IDF 项目 file 结构如图4.14所示。
图 4.14。典型的 ESP-IDF 项目 file 由于 ESP-IDF 支持乐鑫多款 IoT 芯片,包括 ESP32、ESP32-S 系列、ESP32-C 系列、ESP32-H 系列等,因此在编译代码之前需要确定目标。目标既是运行应用程序的硬件设备,也是编译系统的构建目标。根据您的需要,您可以为您的项目指定一个或多个目标。对于前amp文件中,通过命令 idf.py set-target esp32c3 可以将编译目标设置为 ESP32-C3,此时会加载 ESP32C3 的默认参数和编译工具链路径。编译后即可生成ESP32C3的可执行程序。您还可以再次运行命令set-target来设置不同的目标,编译系统将自动清理并重新配置。成分
ESP-IDF 中的组件是在编译系统中管理的模块化且独立的代码单元。它们被组织为文件夹,默认情况下文件夹名称代表组件名称。每个组件都有自己的编译脚本,48 ESP32-C3 无线冒险:物联网综合指南

指定其编译参数和依赖项。在编译过程中,组件被编译成单独的静态库(.a files)并最终与其他组件组合形成应用程序。
ESP-IDF 以组件的形式提供操作系统、外设驱动、网络协议栈等基本功能。这些组件存储在 ESP-IDF 根目录下的 Components 目录中。开发者不需要将这些组件复制到myProject的组件目录中。相反,他们只需要在项目的 CMakeLists.txt 中指定这些组件的依赖关系 file 使用 REQUIRES 或 PRIV_REQUIRES 指令。编译系统会自动定位并编译所需的组件。
因此,myProject 下的组件目录不是必需的。它仅用于包含项目的一些自定义组件,可以是第三方库或用户定义的代码。此外,组件可以来自 ESP-IDF 或当前项目以外的任何目录,例如来自保存在另一个目录中的开源项目。这种情况下,只需要通过设置根目录下的CMakeLists.txt中的EXTRA_COMPONENT_DIRS变量来添加组件的路径即可。该目录将覆盖任何同名的 ESP-IDF 组件,确保使用正确的组件。
入口程序 main 项目内的主目录遵循相同 file 结构与其他组件(例如,组件1)一样。然而,它具有特殊的意义,因为它是每个项目中必须存在的强制性组件。主目录包含项目的源代码和用户程序的入口点,通常名为 app_main。默认情况下,用户程序从该入口点开始执行。主要组件的不同之处还在于它自动依赖于搜索路径中的所有组件。因此,无需在 CMakeLists.txt 中使用 REQUIRES 或 PRIV_REQUIRES 指令显式指示依赖关系 file.
配置 file 项目根目录下有配置 file 名为 sdkconfig,其中包含项目内所有组件的配置参数。 sdk配置 file 由编译系统自动生成,可以通过命令idf.py menuconfig修改重新生成。 menuconfig选项主要来源于项目的Kconfig.projbuild和组件的Kconfig。组件开发者一般会在Kconfig中添加配置项,使组件灵活可配置。
构建目录 默认情况下,项目内的构建目录存储中间结果 files 和 fi-
第 4 章 设置开发环境 49

idf.py build 命令生成的最终可执行程序。一般来说,没有必要直接访问构建目录的内容。 ESP-IDF 提供了预定义的命令与目录交互,例如使用 idf.py flash 命令自动定位编译后的二进制文件 file 并将其刷新到指定的闪存地址,或者使用 idf.py fullclean 命令清理整个构建目录。
分区表(partitions.csv) 每个项目都需要一个分区表来划分Flash的空间,并指定可执行程序和用户数据空间的大小和起始地址。命令 idf.py flash 或 OTA 升级程序会根据此表将固件刷新到相应的地址。 ESP-IDF 在 Components/partition_table 中提供了几个默认的分区表,例如partitions_singleapp.csv 和partitions_two_ota.csv,可以在menuconfig 中选择。
如果系统默认的分区表不能满足项目的要求,可以在项目目录下添加一个自定义的partitions.csv,并在menuconfig中选择。
4.3.3 编译系统默认构建规则
覆盖同名组件的规则 在组件搜索过程中,编译系统遵循特定的顺序。它首先搜索 ESP-IDF 的内部组件,然后查找用户项目的组件,最后搜索 EXTRA_COMPONENT_DIRS 中的组件。如果多个目录包含同名组件,则在最后一个目录中找到的组件将覆盖任何先前的同名组件。此规则允许在用户项目中自定义 ESP-IDF 组件,同时保持原始 ESP-IDF 代码完整。
默认包含公共组件的规则 正如 4.3.2 节中提到的,组件需要在 CMakeLists.txt 中显式指定它们对其他组件的依赖关系。然而,像 freertos 这样的通用组件默认会自动包含在构建系统中,即使它们的依赖关系没有在编译脚本中显式定义。 ESP-IDF 常用组件包括 freertos、Newlib、heap、log、soc、esp_rom、esp_common、xtensa/riscv 和 cxx。使用这些通用组件可以避免编写 CMakeLists.txt 时的重复工作,并使其更加简洁。
覆盖配置项的规则 开发者可以通过添加默认配置来添加默认配置参数 file 命名为 sdkconfig.defaults 到项目中。对于前amp文件,添加 CONFIG_LOG_
50 ESP32-C3 无线冒险:物联网综合指南

DEFAULT_LEVEL_NONE = y 可以配置UART接口默认不打印日志数据。此外,如果需要为特定目标设置特定参数,则需要配置 file 可以添加名为 sdkconfig.defaults.TARGET_NAME,其中 TARGET_NAME 可以是 esp32s2、esp32c3 等。这些配置 file编译时导入sdkconfig,一般默认配置 file 首先导入 sdkconfig.defaults,然后导入特定于目标的配置 file,例如 sdkconfig.defaults.esp32c3。如果存在同名配置项,则采用后一种配置 file 将覆盖前者。
4.3.4 编译脚本简介
使用 ESP-IDF 开发项目时,开发者不仅需要编写源代码,还需要为项目和组件编写 CMakeLists.txt。 CMakeLists.txt 是一个文本 file,也称为编译脚本,它定义了一系列编译对象、编译配置项和命令来指导源代码的编译过程。 ESP-IDF v4.3.2 的编译系统基于 CMake。除了支持原生CMake函数和命令外,它还定义了一系列自定义函数,使编写编译脚本变得更加容易。
ESP-IDF 中的编译脚本主要包括项目编译脚本和组件编译脚本。项目根目录下的CMakeLists.txt称为项目编译脚本,它指导整个项目的编译过程。一个基本的项目编译脚本通常包括以下三行:
1. cmake_minimum_required(版本 3.5) 2. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3. 项目(myProject)
其中,cmake_minimum_required(VERSION 3.5)必须放在第一行,用于表示项目所需的最低CMake版本号。新版本的 CMake 通常向后兼容旧版本,因此在使用较新的 CMake 命令时相应调整版本号以确保兼容性。
include($ENV {IDF_PATH}/tools/cmake/project.cmake) 导入 ESP-IDF 编译系统预定义的配置项和命令,包括 4.3.3 节中描述的编译系统的默认构建规则。 project(myProject) 创建项目本身并指定其名称。该名称将用作最终输出二进制文件 file 名称,即 myProject.elf 和 myProject.bin。
一个项目可以有多个组件,包括主要组件。每个组件的顶级目录都包含一个CMakeLists.txt file,称为组件编译脚本。组件编译脚本主要用于指定组件依赖、配置参数、源码 files,以及包含的标头 file为
第 4 章 设置开发环境 51

汇编。使用 ESP-IDF 的自定义函数 idf_component_register,组件编译脚本所需的最少代码如下:

1. idf_component_register(SRCS“src1.c”

2.

INCLUDE_DIRS“包含”

3.

需要组件1)

SRCS 参数提供了源列表 file组件中的s,如果有多个则用空格分隔 files。 INCLUDE_DIRS 参数提供公共标头列表 file 组件的目录,该目录将添加到依赖于当前组件的其他组件的包含搜索路径中。 REQUIRES 参数标识当前组件的公共组件依赖关系。组件有必要显式地声明它们依赖于哪些组件,例如组件2依赖于组件1。但是,对于默认依赖于所有组件的主组件,可以省略 REQUIRES 参数。

此外,编译脚本中还可以使用原生CMake命令。对于前amp文件中,使用set命令设置变量,如set(VARIABLE “VALUE”)。

4.3.5 常用命令介绍
ESP-IDF 在代码编译过程中使用了 CMake(项目配置工具)、Ninja(项目构建工具)和 esptool(flash 工具)。每个工具在编译、构建和烧录过程中扮演着不同的角色,也支持不同的操作命令。为了方便用户操作,ESP-IDF 增加了统一的前端 idf.py,可以快速调用上述命令。
在使用 idf.py 之前,请确保:
· ESP-IDF 的环境变量 IDF_PATH 已添加到当前终端。 · 命令执行目录为项目根目录,包括
项目编译脚本CMakeLists.txt。
idf.py的常用命令如下:
· idf.py –help:显示命令列表及其使用说明。 · idf.py 设置目标:设置编译taidf.py fullcleanrget,比如
作为替换与 esp32c3。 · idf.py menuconfig:启动menuconfig,终端图形配置
工具,可以选择或修改配置选项,配置结果保存在sdkconfig中 file。 · idf.py build:启动代码编译。中间体 files以及编译生成的最终可执行程序默认会保存在项目的build目录下。编译过程是增量的,这意味着如果只有一个源 file 已修改,仅修改后的 file 下次会编译。

52 ESP32-C3 无线冒险:物联网综合指南

· idf.py clean:清理中间体 file由项目编译生成。整个项目将在下次编译时强制编译。请注意,CMake 配置和 menuconfig 所做的配置修改在清理过程中不会被删除。
· idf.py fullclean:删除整个构建目录,包括所有CMake配置输出 files。再次构建项目时,CMake 将从头开始配置项目。请注意,此命令将递归删除所有 files在build目录下,谨慎使用,项目配置 file 不会被删除。
· idf.py flash:刷新可执行程序二进制文件 file 通过构建目标 ESP32-C3 生成。选项-p和-b分别用于设置串口设备名称和烧录波特率。如果不指定这两个选项,将自动检测串口并使用默认波特率。
· idf.py Monitor:显示目标ESP32-C3的串口输出。选项-p可用于指定主机端串口的设备名。串口打印过程中,按组合键Ctrl+]退出监控。
上述命令也可以根据需要进行组合。对于前amp文件中,命令 idf.py build flash Monitor 会依次执行代码编译、烧录、打开串口监视器。
您可以访问 https://bookc3.espressif.com/build-system 了解有关 ESP-IDF 编译系统的更多信息。
4.4 练习:编译Examp程序“闪烁”
第4.4.1章amp分析
本节将以程序Blink为例amp来分析 file 详细介绍实际项目的结构和编码规则。 Blink程序实现LED闪烁效果,项目位于ex目录amples/get-started/blink,其中包含源代码 file, 配置 files,以及几个编译脚本。
本书介绍的智能灯项目就是基于这个examp勒程序。后面的章节会逐步添加功能,最终完成。
源代码 为了演示整个开发过程,将 Blink 程序复制到 esp32c3-iot-projects/devicefirmware/1blink 中。
Blink项目的目录结构 files如图4.15所示。
Blink 项目只包含一个主目录,这是一个特殊的组件,
第 4 章 设置开发环境 53

图 4.15. File Blink项目的目录结构

必须按照第 4.3.2 节所述包括在内。 main目录主要用来存放app_main()函数的实现,是用户程序的入口点。blink项目中不包含components目录,因为这个examp只需使用 ESP-IDF 自带的组件即可,不需要额外的组件。 Blink项目中包含的CMakeLists.txt用于指导编译过程,而Kconfig.projbuild则用于为该ex添加配置项ampmenuconfig 中的 le 程序。其他不必要的 files不会影响代码的编译,所以这里不讨论。 Blink项目详细介绍 files如下。

1. /*blink.c 包含以下标头 files*/

2.#include

//标准C库头文件 file

3. #include “freertos/freeRTOS.h” //FreeRTOS主头文件 file

4.#include“freertos/task.h”

//FreeRTOS任务头 file

5.#include“sdkconfig.h”

//配置头 file 由 kconfig 生成

6. #include “driver/gpio.h”

//GPIO驱动头 file

来源 file 眨眼.c包含一系列头文件 files 对应于函数声明-

系统蒸发散。 ESP-IDF 一般遵循包含标准库头的顺序 files,FreeR-

TOS 标头 files, 驱动程序头 files、其他组件头 files 和项目标题 files.

标头的顺序 file包含s可能会影响最终的编译结果,所以尽量

遵循默认规则。需要注意的是sdkconfig.h是自动生成的

通过 kconfig 且只能通过命令 idf.py menuconfig 进行配置。

直接修改这个头 file 将被覆盖。

1. /*可以在idf.py menuconfig中选择LED对应的GPIO,menuconfig的修改结果是CONFIG_BLINK的值

_GPIO 将被更改。也可以直接修改宏定义

此处,将CONFIG_BLINK_GPIO修改为固定值*/ 2. #define BLINK_GPIO CONFIG_BLINK_GPIO

3. 无效app_main(无效)

4.{

5.

/*配置IO为GPIO默认功能,使能上拉模式,并

6.

禁用输入和输出模式*/

7.

gpio_reset_pin(BLINK_GPIO);

54 ESP32-C3 无线冒险:物联网综合指南

8.}

/*设置GPIO为输出模式*/ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);而(1){
/*打印日志*/ printf(“关闭LEDn”); /*关闭LED(输出低电平)*/ gpio_set_level(BLINK_GPIO, 0); /*延迟(1000毫秒)*/ vTaskDelay(1000 / portTICK_PERIOD_MS); printf(“打开 LEDn”); /*打开LED(输出高电平)*/ gpio_set_level(BLINK_GPIO, 1); vTaskDelay(1000 / portTICK_PERIOD_MS); }

Blink ex 中的 app_main() 函数amp文件程序充当用户程序的入口点。这是一个简单的函数,没有参数,也没有返回值。该函数在系统完成初始化后调用,初始化包括初始化日志串口、配置单/双核、配置看门狗等任务。

app_main() 函数在名为 main 的任务上下文中运行。该任务的堆栈大小和优先级可以在menuconfig Componentconfig Common ESP相关中调整。

对于像 LED 闪烁这样的简单任务,所有必要的代码都可以直接在 app_main() 函数中实现。这通常涉及初始化与 LED 相对应的 GPIO 并使用 while(1) 循环来打开和关闭 LED。或者,您可以使用 FreeRTOS API 创建一个处理 LED 闪烁的新任务。一旦新任务创建成功,您就可以退出app_main()函数。

main/CMakeLists.txt 的内容 file,它指导主要组件的编译过程,如下:

1. idf_component_register(SRCS“blink.c”INCLUDE_DIRS“.”)

其中main/CMakeLists.txt只调用了一个编译系统函数,即idf_component_register。与大多数其他组件的 CMakeLists.txt 类似,blink.c 被添加到 SRCS,并且源代码 file添加到 SRCS 的内容将被编译。同时在INCLUDE_DIRS中添加“.”,代表CMakeLists.txt所在路径,作为header的搜索目录 files。 CMakeLists.txt内容如下:
1. #指定v3.5为当前项目支持的最旧的CMake版本 2. #低于v3.5的版本必须升级才能继续编译 3. cmake_minimum_required(VERSION 3.5) 4. #包含ESP的默认CMake配置-IDF编译系统

第 4 章 设置开发环境 55

5. include($ENV{IDF_PATH}/tools/cmake/project.cmake) 6. #创建一个名为“blink”的项目 7. project(myProject)
其中根目录下的CMakeLists.txt主要包括$ENV{IDF_PATH}/tools/cmake/project.cmake,这是主要的CMake配置 file 由 ESP-IDF 提供。它用于控制

文件/资源

乐鑫 ESP32-C3 无线探险 [pdf] 用户指南
ESP32-C3 无线探险, ESP32-C3, 无线探险, 探险

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *