
ESP32-C3是搭载了开源指令集RISC-V的32位低功耗、低成本、安全的物联网芯片,本书也是该芯片原厂乐鑫科技的官方作品。本书从物联网工程开发的必备知识入手,循序渐进地介绍了硬件设计、外设驱动、ESP-IDF开发环境搭建、Wi-Fi网络配置、本地和云端控制、OTA升级原理、电源管理、低功耗优化、设备安全功能、固件版本管理和量产测试等方面的内容。物联网工程开发涉及的知识点很多,本书根据所涉及的知识点将全书分为4篇,分别是准备篇(第1~4章)、硬件与驱动开发篇(第5~6章)、无线通信与控制篇(第7~11章)、优化与量产篇(第12~15章),可帮助读者更好地掌握相关的知识点。
序 言 写在前面 世界信息化的进程正在迅猛发展。 继互联网之后,物联网的浪潮已然到来。作为数字经济时代的新型基础设施,物联网得到了我国政府的高度重视和政策支持。乐鑫信息科技(上海)股份有限公司(简称乐鑫科技或乐鑫)自2008年创立以来,一直肩负着“科技民主化”的重要使命,致力于构建“万物智联”的世界,让“连接”成为开发者触手可得的技术。 自研芯片的道路就像一场马拉松,需要不断突破科技边界。乐鑫科技深耕物联网领域的软硬件产品研发,先后发布了ESP32、ESP32-C、ESP32-S、ESP32-H等系列芯片。从早期被认为“改变物联网游戏规则”的ESP8266芯片,到ESP32系列芯片开始增加Bluetooth? LE和AI算法功能并实现了最高240 MHz的双核处理,再到ESP32-S3系列芯片增加的AI硬件加速器,乐鑫科技不断在软件技术上进行投入,围绕AIoT的核心,覆盖工具链、编译器、操作系统、应用框架、AI算法、云产品、App等,实现了AIoT领域的软硬件一体化解决方案闭环。 截至2022年7月,乐鑫科技的IoT芯片累计出货量已超过8亿颗,在Wi-Fi MCU领域遥遥领先,赋能了全球数亿的智能产品。正是这种精益求精的精神,才使得乐鑫科技每次发布的新产品,总能以高集成度和低成本引爆物联网市场。ESP32-C3芯片的发布,是乐鑫科技底层自研技术积累的结晶,也是一个新里程碑式的事件。ESP32-C3芯片搭载了自研的基于开源指令集RISC-V的32位单核处理器,时钟频率高达160 MHz,内置400 KB的SRAM,集成了2.4 GHz的Wi-Fi和支持长距离的Bluetooth 5(LE),具有行业领先的射频性能和低功耗特性,可满足常见的物联网产品功能需求,同时安全性能也大幅度提升。本书以成熟的ESP32-C3为硬件基础,阐述物联网项目开发等技术知识。 聚焦平台能力,回馈生态社区 乐鑫科技不仅仅是一家半导体公司,更是一家物联网平台型公司,始终坚持在技术领域寻求突破和创新。与此同时,乐鑫科技以开放的心态,将自研的操作系统和软件框架开源分享到社区,形成了独树一帜的生态环境。众多的工程师、创客及技术爱好者,积极开发新的软件应用,自由交流并分享使用心得。每时每刻都可以在各类平台看到开发者的奇思妙想,如Youtube、Bilibili视频平台,以及GitHub、Gitee等代码托管平台。有的开发者还自发编写了关于乐鑫科技产品的图书,已逾100本,涉及的语种有中文、英文、德文、法文、日文等十多种。 正是来自社区伙伴的支持和信任,鼓励着乐鑫科技不断创新。乐鑫科技的创始人兼CEO张瑞安先生曾说:“我们在寻找答案,去解决人们目前生活中需要解决的问题。我们致力向社会贡献商业实践、工具、文档、写作以及想法。”乐鑫科技是一家非常重视阅读和想法的公司,而物联网技术的不断升级,对工程师综合素质的要求越来越高,如何才能帮助更多人快速掌握物联网芯片、操作系统、软件框架、应用方案以及云服务产品呢?授人以鱼不如授人以渔,于是在一次头脑风暴会议中,我们在想是否能写一本书,将知识点系统性地梳理出来呢?想法一拍即合,我们迅速在公司聚集了资深工程师们,并整合了技术团队关于嵌入式编程、物联网硬件和软件开发的相关经验,撰写了本书。在写作过程中,我们尽量客观公正、抽丝剥茧,用轻松简明的语言讲述物联网的纷繁和魅力。我们认真总结了常见的问题,倾听了社区的反馈和建议,希望能清晰地回答在开发过程中遇到的诸多疑问,为相关技术人员和决策者提供实用的物联网开发指南。 本书的结构 本书以工程师为中心视角,循序渐进地阐述了物联网工程开发的必备知识,全书分为4篇,具体如下: 准备篇(第1~4章)、硬件与驱动开发篇(第5~6章)、无线通信与控制篇(第7~11章)、优化与量产篇(第12~15章),可帮助读者更好地掌握相关的知识点。 准备篇:包括第1~4章,本篇主要介绍物联网体系结构、典型的物联网工程项目框架、ESP RainMaker? 物联网云平台和ESP-IDF开发环境的搭建,为物联网工程开发夯实基础。 硬件与驱动开发篇:包括第5~6章,本篇以ESP32-C3芯片为基础,论述了如何设计最小硬件系统和驱动开发,实现了调光、调色的控制以及无线通信功能。 无线通信与控制篇:包括第7~11章,本篇主要阐述基于ESP32-C3芯片的智能化Wi-Fi网络配置方案、本地控制协议和云端控制协议、设备的本地控制和远程控制,并给出了智能手机App的开发、固件更新、版本管理等方案。 优化与量产篇:包括第12~15章,本篇为提高篇,主要从电源管理、低功耗优化、增强安全等角度介绍物联网产品的优化,并介绍了量产的固件烧录和测试、如何通过ESP Insights远程监察平台来诊断设备固件的运行状态和日志。 关于源代码的使用 读者可以实践本书中的程序示例,既可手工输入代码,也可使用本书配套的源代码。本书注重理论和实践的结合,几乎每章都在最后给出了智能照明工程实战,并已开源。欢迎读者前往esp32.com、GitHub和Gitee中与本书相关的版块下载源码并进行讨论。本书的开源代码遵循Apache 2.0 许可证的条款。 写在最后 本书为乐鑫科技的官方出品,主要编写人员是公司的资深工程师。本书适合计算机相关行业的管理者、研发人员,高等院校相关专业的师生以及物联网领域的爱好者阅读,希望本书成为大家如良师益友般的工作手册、工具书和床头书。 本书在编写过程中,借鉴和参考了国内外专家、学者、技术人员的相关研究成果,我们尽可能按学术规范予以说明,但难免会有疏漏之处,在此谨向有关作者表示深深的敬意和谢意。此外,书中引用了互联网上的资讯,在此向原作者和刊发机构致谢,对于不能一一注明引用来源的资讯作者深表歉意。 本书的顺利出版,经过了很多轮的内部讨论,听取了试读者和出版社编辑的建议反馈,再次感谢各位的帮助,使本书得以尽早与读者见面。 最后,也是最重要的,感谢乐鑫科技每一位为产品的诞生和普及而付出心血的同仁。 物联网工程开发涉及的知识面非常广泛,限于本书篇幅,以及笔者的水平和经验,疏漏之处在所难免,恳请广大专家和读者批评指正。若您对本书有任何建议,请及时联系我们,联系邮箱为book@espressif.com。我们期待您的反馈。 乐鑫科技团队 2022年8月8日
目 录 第1篇 准备篇 第1章 浅谈物联网 2 1.1 物联网的体系结构 2 1.2 物联网应用之智能家居 4 第2章 物联网工程项目的介绍和实战 6 2.1 典型的物联网工程项目介绍 6 2.1.1 常见物联网设备的基本模块 6 2.1.2 用户端应用程序基本模块 7 2.1.3 常见的物联网云平台简介 7 2.2 实战:智能照明工程 8 2.2.1 工程框架 9 2.2.2 工程功能 9 2.2.3 硬件准备 10 2.2.4 开发步骤 11 2.3 本章总结 11 第3章 ESP RainMaker介绍 12 3.1 什么是ESP RainMaker 12 3.2 ESP RainMaker的实现原理 13 3.2.1 Claiming服务 14 3.2.2 RainMaker设备侧代理程序 15 3.2.3 云后端 16 3.2.4 客户端 16 3.3 实战:ESP RainMaker开发要点 18 3.4 ESP RainMaker功能摘要 19 3.4.1 账户管理功能 19 3.4.2 对终端用户开放的功能 19 3.4.3 对管理员用户开放的功能 20 3.5 本章总结 20 第4章 开发环境的搭建与详解 21 4.1 ESP-IDF概述 21 4.1.1 ESP-IDF版本介绍 21 4.1.2 ESP-IDF Git工作流程 22 4.1.3 选择一个合适的版本 23 4.1.4 ESP-IDF SDK目录总览 23 4.2 ESP-IDF开发环境安装详解 26 4.2.1 在Linux系统下安装ESP-IDF开发环境 27 4.2.2 在Windows系统下安装ESP-IDF开发环境 29 4.2.3 在Mac系统下安装ESP-IDF开发环境 34 4.2.4 VS Code代码编辑工具的安装 35 4.2.5 第三方开发环境简介 35 4.3 ESP-IDF编译系统详解 36 4.3.1 编译系统基本概念 36 4.3.2 工程文件结构 36 4.3.3 编译系统默认的构建规范 38 4.3.4 编译脚本详解 38 4.3.5 常用命令详解 39 4.4 实战:Blink示例程序编译 40 4.4.1 Blink示例程序分析 40 4.4.2 Blink示例程序的编译过程 42 4.4.3 Blink示例程序的烧录过程 46 4.4.4 Blink示例程序的串口Log分析 46 4.5 本章总结 49 第2篇 硬件与驱动开发篇 第5章 ESP32-C3的智能照明产品的硬件设计 52 5.1 智能照明产品的功能及组成 52 5.2 ESP32-C3最小硬件系统设计 55 5.2.1 电源 58 5.2.2 上电时序与复位 58 5.2.3 SPI Flash 59 5.2.4 时钟源 59 5.2.5 射频及天线 60 5.2.6 Strapping引脚 62 5.2.7 GPIO和PWM功能 62 5.3 实战:使用ESP32-C3构建智能照明系统 63 5.3.1 模组选用 63 5.3.2 PWM信号的GPIO配置 63 5.3.3 固件烧录和调试接口 65 5.3.4 射频设计要求 67 5.3.5 供电电源设计要求 68 5.4 本章总结 68 第6章 驱动开发 70 6.1 驱动开发过程 70 6.2 ESP32-C3外设应用 71 6.3 LED驱动基础 72 6.3.1 色彩空间 72 6.3.2 LED驱动器 76 6.3.3 LED调光 76 6.3.4 PWM介绍 77 6.4 LED调光驱动开发 78 6.4.1 非易失性存储 78 6.4.2 LED PWM控制器 79 6.4.3 LED PWM编程 81 6.5 实战:智能照明工程中的驱动开发 84 6.5.1 按键驱动 84 6.5.2 LED调光驱动 85 6.6 本章总结 89 第3篇 无线通信与控制篇 第7章 Wi-Fi网络配置和连接 92 7.1 Wi-Fi基础知识 92 7.1.1 什么是Wi-Fi 92 7.1.2 IEEE 802.11的发展历程 92 7.1.3 Wi-Fi相关术语 93 7.1.4 Wi-Fi连接的过程 95 7.2 蓝牙基础知识 102 7.2.1 什么是蓝牙 102 7.2.2 蓝牙相关术语 103 7.2.3 蓝牙连接的过程 105 7.3 Wi-Fi配网 108 7.3.1 Wi-Fi配网导读 109 7.3.2 SoftAP配网 109 7.3.3 一键配网 111 7.3.4 蓝牙配网 112 7.3.5 其他配网方式 114 7.4 Wi-Fi编程 116 7.4.1 ESP-IDF中的Wi-Fi组件 116 7.4.2 牛刀小试:Wi-Fi连接初体验 117 7.4.3 大显身手:Wi-Fi连接智能化 121 7.5 实战:智能照明工程中实现Wi-Fi配置 131 7.5.1 智能照明工程Wi-Fi连接实例 132 7.5.2 Wi-Fi智能化配置实例 133 7.6 本章总结 134 第8章 设备的本地控制 135 8.1 本地控制的介绍 135 8.1.1 本地控制的使用条件 136 8.1.2 本地控制的适用场景 137 8.1.3 本地控制的优势 137 8.1.4 通过智能手机发现被控设备 137 8.1.5 智能手机与被控设备的数据通信 138 8.2 常见的本地发现方法 138 8.2.1 广播 139 8.2.2 组播 144 8.2.3 广播与组播对比 150 8.2.4 本地发现之组播应用协议mDNS 150 8.3 常见的本地数据通信协议 153 8.3.1 TCP协议 153 8.3.2 HTTP协议 158 8.3.3 UDP协议 162 8.3.4 CoAP协议 165 8.3.5 蓝牙通信协议 170 8.3.6 数据通信协议总结 175 8.4 数据安全性的保证 176 8.4.1 TLS协议介绍 178 8.4.2 DTLS协议介绍 183 8.5 实战:基于ESP-IDF组件快速实现智能灯本地控制模块 186 8.5.1 创建基于Wi-Fi的本地控制服务器端 186 8.5.2 使用脚本验证本地控制功能 190 8.5.3 创建基于蓝牙的本地控制服务器端 191 8.6 本章总结 193 第9章 设备的云端控制 194 9.1 远程控制的介绍 194 9.2 常见的云端数据通信协议 195 9.2.1 MQTT协议介绍 195 9.2.2 MQTT协议原理 195 9.2.3 MQTT消息格式 197 9.2.4 协议对比 200 9.2.5 基于Windows或Linux搭建MQTT Broker 201 9.2.6 基于ESP-IDF创建MQTT客户端 202 9.3 保证MQTT数据安全性 204 9.3.1 证书的含义与作用 205 9.3.2 本地生成证书 206 9.3.3 配置MQTT Broker 209 9.3.4 配置MQTT客户端 209 9.4 实战:通过ESP RainMaker实现智能照明工程的远程控制 211 9.4.1 ESP RainMaker的基本概念 211 9.4.2 节点与云后端通信协议 212 9.4.3 客户端与云后端通信方法 216 9.4.4 用户体系 219 9.4.5 基础服务介绍 220 9.4.6 智能灯示例 222 9.4.7 RainMaker App与第三方集成 228 9.5 本章总结 233 第10章 智能手机App开发 234 10.1 智能手机App开发技术介绍 234 10.1.1 智能手机App开发概述 234 10.1.2 Android项目的结构 235 10.1.3 iOS项目的结构 236 10.1.4 Android Activity的生命周期 237 10.1.5 iOS ViewController的生命周期 238 10.2 新建智能手机App项目 239 10.2.1 Android开发的准备 239 10.2.2 新建Android项目 239 10.2.3 添加MyRainmaker项目所需的依赖 241 10.2.4 Android权限申请 241 10.2.5 iOS开发的准备 242 10.2.6 新建iOS项目 242 10.2.7 添加RainMaker所需的依赖 243 10.2.8 iOS权限的申请 245 10.3 App功能需求分析 245 10.3.1 项目功能需求分析 245 10.3.2 用户登录注册需求分析 245 10.3.3 设备配网和绑定需求分析 247 10.3.4 远程控制需求分析 248 10.3.5 定时需求分析 248 10.3.6 用户中心需求分析 249 10.4 用户登录注册功能的开发 249 10.4.1 RainMaker项目接口说明 250 10.4.2 智能手机如何发起通信请求 250 10.4.3 账号注册 250 10.4.4 账号登录 253 10.5 设备配网功能的开发 256 10.5.1 扫描设备 257 10.5.2 连接设备 258 10.5.3 生成私钥 261 10.5.4 获取设备的节点ID 261 10.5.5 设备配网 264 10.6 设备控制功能的开发 266 10.6.1 云端绑定账号与设备 266 10.6.2 获取用户的所有设备 268 10.6.3 获取设备当前状态 271 10.6.4 修改设备状态 273 10.7 定时功能和用户中心功能的开发 275 10.7.1 实现定时功能 275 10.7.2 实现用户中心功能 278 10.7.3 更多云端接口 280 10.8 本章总结 282 第11章 固件更新与版本管理 283 11.1 固件更新 283 11.1.1 分区表概述 284 11.1.2 固件启动流程 285 11.1.3 OTA升级原理概述 287 11.2 固件版本管理 290 11.2.1 固件标记 290 11.2.2 回滚与防回滚功能 291 11.3 实战:OTA升级使用示例 292 11.3.1 利用本地主机完成固件更新 292 11.3.2 利用ESP RainMaker完成固件更新 295 11.4 本章总结 302 第4篇 优化与量产篇 第12章 电源管理和低功耗优化 304 12.1 ESP32-C3电源管理 304 12.1.1 动态调频 305 12.1.2 电源管理配置 306 12.2 ESP32-C3低功耗模式 306 12.2.1 Modem-sleep模式 307 12.2.2 Light-sleep模式 309 12.2.3 Deep-sleep模式 314 12.2.4 不同功耗模式下的功耗 315 12.3 电源管理和低功耗调试 316 12.3.1 日志调试 316 12.3.2 GPIO调试 318 12.4 实战:在智能照明工程中添加电源管理 319 12.4.1 配置电源管理功能 320 12.4.2 使用电源管理锁 321 12.4.3 验证功耗表现 322 12.5 本章总结 322 第13章 增强设备的安全功能 323 13.1 物联网设备数据安全概述 323 13.1.1 为什么要保护物联网设备数据的安全 324 13.1.2 保护物联网设备数据安全的基本要求 325 13.2 数据完整性保护 325 13.2.1 完整性校验方法简介 325 13.2.2 固件数据的完整性校验 326 13.2.3 示例 327 13.3 数据机密性保护 327 13.3.1 数据加密简介 327 13.3.2 Flash加密方案概述 329 13.3.3 存储Flash加密方案的密钥 331 13.3.4 Flash加密的工作模式 332 13.3.5 Flash加密的一般工作流程 333 13.3.6 NVS加密方案简介 334 13.3.7 Flash加密方案和NVS加密方案的示例 335 13.4 数据合法性的保护 338 13.4.1 数字签名简介 338 13.4.2 Secure Boot方案概述 339 13.4.3 软Secure Boot介绍 339 13.4.4 硬Secure Boot介绍 341 13.4.5 示例 344 13.5 实战:在量产中批量使用安全功能 346 13.5.1 Flash加密方案与Secure Boot方案的关系 346 13.5.2 使用量产工具批量使用Flash加密方案与Secure Boot方案 347 13.5.3 在智能照明系统中使用Flash加密方案与Secure Boot方案 348 13.6 本章总结 348 第14章 量产的固件烧录和测试 349 14.1 量产固件烧录 349 14.1.1 定义数据区 349 14.1.2 固件烧录 351 14.2 量产测试 352 14.3 实战:智能照明工程中的量产数据 353 14.4 本章总结 354 第15章 ESP Insights远程监察平台 355 15.1 ESP Insights组件的简介 355 15.2 ESP Insights组件的使用 358 15.2.1 在esp-insights工程中使用ESP Insights组件 358 15.2.2 在esp-insights工程中运行示例diagnostics_smoke_test 360 15.2.3 上报Coredump信息 361 15.2.4 定制感兴趣的日志 361 15.2.5 上报设备重启原因 362 15.2.6 上报自定义的指标值 362 15.3 实战:基于智能灯示例使用ESP Insights组件 365 15.4 本章总结 366 参考文献 367