ESP32物联网项目开发1-ESP32简介
0简介
本书的内容
第1章,ESP32入门,向你介绍一般的物联网技术、ESP32硬件和开发环境选项。
第2章,与地球对话--传感器和执行器,讨论了不同类型的传感器和执行器,以及如何将它们与ESP32连接。
第3章,令人印象深刻的显示输出,解释了如何在ESP32项目中选择和使用不同的显示类型。FreeRTOS也被详细讨论。
第4章,深入研究高级功能,包括ESP32的音频/视频应用,以及满足低功耗要求的电源管理子系统。
第5章,实践--你的房间的多传感器,是本书的第一个参考项目,其中几个传感器被集成到ESP32设备。
第6章,好朋友--Wi-Fi,展示了如何在Wi-Fi的站点和接入点模式下使用ESP32。在ESP32的背景下讨论了一些TCP/IP协议。
第7章,安全第一!探讨了ESP32的安全特性,并提供了安全固件更新和安全通信技术的例子。
第8章,介绍了BLE的基本知识,并展示了如何开发BLE信标、GATT服务器和BLE网状节点。
第9章,实践--让你的家变聪明,用BLE网状网络中的网关、光线传感器和中继开关构建了完整的智能家居解决方案。
第10章,无云不物联网--云平台和服务,讨论了重要的物联网协议,并以AWS物联网集成为例介绍了不同供应商的物联网平台。
第11章,连接永远不够--第三方集成,重点介绍与语音助手和IFTTT等流行服务的集成。
第12章,实践--语音控制的智能风扇,作为本书的最后一个项目,将一个普通的风扇转换成支持Alexa的智能设备。
要从本书中获得最大的收获
物联网技术需要许多不同的学科和技能来开发物联网产品。从根本上说,除了具备C和Python的编程能力外,你还需要阅读图来设置实例中的硬件原型。我们还假定你熟悉TCP/IP协议和密码学基础知识,以便轻松掌握这些例子。在某些章节中,如果你对该主题的基础知识感到不适应,建议阅读一些参考书。
每个例子前都列出了必要的硬件组件。然而,你应该准备好面包板、跳线和万用表,以便能够构建电路。最好还能有焊接设备,因为许多新模块需要焊接头,以便将它们连接到面包板上。
作为开发环境,你应该在你的电脑上安装VS Code。本书中的例子是在Linux机器上开发和测试的,但不管是哪种操作系统平台,都应该可以工作。在必要的情况下,为不同的平台推荐了外部工具的替代品。
需要一个移动设备来处理这些例子。这些移动应用程序在安卓和iOS平台上都可以使用。
你可以从GitHub上下载本书的示例代码文件,网址是https://github.com/PacktPublishing/Internet-of-Things-with-ESP32。
1-ESP32简介
什么是物联网?
尽管不同的观点对物联网的定义可能略有不同,但在物联网世界中,有一些关键概念将其与其他类型的技术区分开来:
- 连接性: 物联网设备是连接的,要么连接到互联网,要么连接到本地网络。墙上的老式恒温器等待手动操作的基本编程功能不能算作物联网设备。
- 识别: 物联网设备在网络中被唯一地识别,设备本身可用于远程更新、远程管理和诊断。
- 自主操作: 物联网系统的设计是为了最小化或没有人类的干预。每个设备从其安装的环境中收集数据,然后它可以与其他设备沟通数据,以检测系统的当前状态,并按照配置做出响应。如果需要,这种响应可以是行动、日志或警报的形式。
- 互操作性: 物联网解决方案中的设备相互交谈,但它们不一定属于一个供应商。当不同供应商设计的设备共享共同的应用级协议时,在异质网络中添加新设备就像点击设备或管理软件上的几个按钮一样容易。
- 可扩展性: 物联网系统能够进行横向扩展,以应对不断增加的工作量。在必要时增加新的设备来增加容量,而不是用更好的设备来替换现有的设备(垂直扩展性)。
- 安全性: 我希望我可以说,每个物联网解决方案都至少实施了一套最低限度的强制性安全措施,但不幸的是,情况并非如此,尽管有一些不好的经验,包括臭名昭著的Mirai僵尸网络攻击。从积极的方面看,我可以说,物联网设备大多具有安全启动、安全更新和安全通信功能,以确保保密性、完整性和可用性(CIA三要素)。
Gartner在2011年的炒作周期中加入了物联网,预计超过10年后将成为主流应用。然而,许多相关技术,如RFID、网状网络和蓝牙,以及移动和云技术等推动因素,在2011年之前就已经在名单上了。从那时起,Gartner在其名单上增加了其他一些物联网技术和应用,包括以下内容:
- 物联网平台
- 互联家庭
- 智能灰尘
- 边缘计算
- 边缘的低成本、单板计算机
5G和嵌入式人工智能是Gartner名单上的其他革命性技术,支持物联网并扩大其应用领域。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
我们在哪里应用物联网?
应用范围很广,但从概念上讲,我们可以将其分为两个基本类别:
- 在消费者物联网类别中,我们可以看到主要是智能家居和安全系统、个人医疗保健产品、可穿戴技术和资产跟踪应用。
- 工业物联网类别有更多的应用领域,正如你所期望的那样。每年,IoT Analytics都会通过审查数以千计的新项目来发布工业应用的十大趋势清单,2020年的清单依次包含了制造业、交通、能源、零售、城市、医疗保健、供应链、农业和建筑应用(https://iot-analytics.com/top-10-iot-applications-in-2020)。
边缘的AI/ML
人工智能已经存在了很长时间,有许多机器视觉、自然语言处理(NLP)、语音识别和ML项目的成功案例。然而,它们都需要耗能的强大硬件,以便能够应对CPU和内存密集型的计算,而这一点在内存和处理能力低得多的简陋的传感器设备上是不可能的。TensorFlow Lite解决了这个问题。它的转换器可以输出一个模型,一组通过运行数据进行预测的规则,其大小低至14KB,适合任何现代微控制器,如ARM Cortex-M3设备,功耗非常低,这使你能够拥有具有ML能力的电池操作的传感器设备。一个有趣的项目来自Benjamin Cabé(在Twitter上:@kartben)。在他的项目中,他成功地训练了模型来辨别不同类型的烈酒,准确率达到92%。他用SeeedStudio的Wio终端作为计算板,它有一个ARM Cortex-M4F内核,运行频率为120MHz。
意义是巨大的。现在我们有能力开发一个真正的智能设备,而不是假的传感器设备,这样它可以为它收集的数据添加意义,不仅可以根据数据,而且可以根据意义做出反应。本杰明采用了一个简单的气体传感器来检测各种气体,如一氧化碳(CO)、二氧化氮(NO2)、乙醇(C2H5CH)和其他一些类型。但该设备本身可以理解它实际闻到的气味,这要归功于它在固件中使用的ML模型。如果没有这样的能力,该设备将不得不把它的数据发送到另一台更强大的机器或云端来进行分析,然后等待回复,以决定下一步该怎么做。此外,如果它以某种方式失去了网络连接,那么在恢复连接之前,就不能再做任何事情了。
你可以在以下链接中查看TensorFlow Lite的支持平台:https://www.tensorflow.org/lite/microcontrollers。
能量采集
无线传感器网络(WSNs Wireless Sensor Networks)的一个重要讨论和研究课题一直是传感器节点的能量消耗。很明显,越少越好。如果你有一些开发电池操作的无线设备的经验,你知道运行到睡眠的概念,这意味着做完工作后尽快进入睡眠模式,以保存最宝贵的资源--能源。尽管如此,无论你做什么,传感器节点必须消耗能量,用户在一段时间后必须更换电池。在这一点上,一项有趣的技术为你提供了帮助--能量采集,自尼古拉-特斯拉的时代就已经存在。能量可以从各种环境来源中获取,包括光、振动和无线能源。要做到这一点,采集解决方案首先需要通过各种组件来获取环境能量,这取决于能源类型。
如果能量来自射频源,它就是射频天线;如果是光,它就是一个光伏电池。然后,这种原始电能必须在集成电路的帮助下进行转换,以便将其储存在电容器或电池中。但你知道,这说起来容易,做起来难。尽管市场上有几个来自不同硅供应商的电源管理集成电路(PMIC Power Management Integrated Circuits ),但很难说它们是否有效地解决了这个问题。主要的挑战是要采集非常低的能量水平,需要将非常低的电压提升到更高的逻辑水平,需要多个外部元件来操作,以及在PCB上有很大的芯片足迹。因此,这些挑战阻碍了供应商生产高性能的能量收集芯片。不过,有一种产品听起来确实很有希望。
Nowi Energy宣传其NH2D0245 PMIC是与市场上其他半导体巨头相比效率最高、占地面积最小的电源管理IC。为了证明他们的论点,他们与模块公司MMT一起推出了一个混合智能手表模块,这样,装有该模块的手表在其生命周期内不需要充电就可以运行。能量收集是一个热门话题,所以当然也有竞争对手,如来自比利时的e-peas半导体。你可能想在你的下一个WSN项目中尝试这些PMIC之一。
纳米机器人
来自康奈尔大学的研究项目。这项研究的结果已于2020年8月发表在《自然》杂志上,文章名为《电子集成、大规模制造的微型机器人》。他们发明了纳米级的执行器,你简直无法用眼睛看到。这个超级微小的结构上有两个太阳能电池来移动腿部,当激光束落在这些太阳能电池上时,它们产生足够的电压来激活腿部。
物联网解决方案的基本结构
物联网解决方案将许多不同的技术结合到一个产品中,从物理设备开始,涵盖所有层级,直到最终用户的应用。解决方案的每一层都旨在实现企业设定的相同愿景,但在设计和开发时需要采用不同的方法。我们肯定不能在物联网项目中谈论一刀切的解决方案,但我们仍然可以应用有组织的方法来开发产品。让我们看看在一个典型的物联网产品中,解决方案有哪些层次:
-
设备硬件: 每个物联网项目都需要带有系统芯片(SoC)或微控制器单元(MCU)和传感器/执行器的硬件来与物理世界互动。除此之外,每个物联网设备都是连接的,所以我们需要选择最佳的通信媒介,如有线或无线。电源管理也是这个类别下的另一个考虑因素。
-
设备固件: 我们需要开发设备固件,在SoC上运行,以满足项目的要求。这是我们收集数据并将其传输到解决方案中的其他组件的地方。
-
通信: 连接问题在解决方案架构的这个类别中处理。物理介质的选择对应于解决方案的一个部分,但我们仍然需要决定设备之间的协议,作为共享数据的共同语言。一些协议可能通过定义物理介质到应用层来提供整个通信堆栈。如果是这种情况,你不需要担心其他事情,但如果你的堆栈将应用层的上下文管理留给了你,那么是时候决定使用什么物联网协议了。
-
后台系统: 这是解决方案的骨干。所有数据都在后端系统上收集,并提供产品的管理、监测和集成能力。后台系统可以在企业内部硬件或云供应商上实施,同样取决于项目要求。此外,这也是物联网遇到其他颠覆性技术的地方。你可以应用大数据分析,从来自传感器的数据中提取更深层次的信息,或者你可以使用人工智能算法,为你的系统提供更多的智能功能,如异常检测或预测性维护。
-
终端用户应用: 你很可能需要为你的终端用户提供接口,让他们访问功能。10年前,我们只谈论桌面、网络或移动应用程序。但今天我们有了语音助手。你可以把它们看作是一种现代的人际互动界面,把语音助手集成作为一项功能添加进去可能是一个好主意,特别是在消费者领域。
下图描述了物联网解决方案的一般结构:
物联网安全
剩下的一个重要考虑因素是安全。实际上,这都是关于安全的。无论我写什么,都不能过分强调其重要性。物联网设备与现实世界相连,任何安全事故都有可能对直接环境造成严重损害,更不用说其他网络安全犯罪。因此,在设计解决方案的任何硬件或软件组件时,它应该始终在你的检查清单中。虽然安全,作为一个主题,绝对值得单独写一本书,但我可以为现场的设备列出一些黄金规则:
- 始终寻求减少硬件和固件的攻击面。
- 尽可能地防止物理篡改。如果没有必要,任何物理端口都不应该被打开。
- 将秘密密钥保存在安全介质上。
- 实施安全启动、安全固件更新和加密通信。
- 不要使用默认密码;TCP/IP端口不应不必要地开放。
- 在可能的情况下,将健康检查机制与异常检测结合起来。
作为物联网开发者,我们应该普遍接受安全设计原则。由于物联网产品有许多不同的组件,在设计产品时,端到端的安全性成为关键点。应该对每个组件进行风险影响分析,以决定传输中的数据和休息中的数据的安全级别。有许多国家/国际机构和组织提供有关网络安全的标准、准则和最佳做法。其中一个专门从事物联网技术的机构是物联网安全基金会。他们正在积极开发有关该主题的准则和框架,并公布了许多这些准则,这些准则可以免费获得。
如果你想查看这些指南,你可以访问物联网安全基金会网站,查看他们的出版物:https://www.iotsecurityfoundation.org/best-practice-guidelines/。
ESP32平台和模块介绍
第一个ESP32芯片是在2016年推出的。ESP32使我们能够将网关的价格削减到原来的四分之一。有了ESP32作为主计算单元,我们将Z-wave模块作为网络协处理器连接到它上面。另一端是Wi-Fi,这是ESP32的内置功能,用于连接后端系统。我们不担心安全要求,因为ESP32芯片中有用于加密/解密的加密硬件加速器。这就是我们所需要的一切。然而,像往常一样,生活并不那么容易。我们从市场上采购的Z-wave库的目标是基于Linux的板子,而不是像ESP32这样资源有限的SoC。所以我们开始为ESP32移植整个Z-wave库,并获得了成功。最后,我们拥有了市场上最紧凑、最实惠的Z-wave网关。
为什么采用ESP32?
- 价格便宜和可用性
- Wi-Fi和蓝牙在单一的SoC中
- 强大的硬件功能,有许多外围接口,不同的电源模式,以及加密硬件加速
- 在芯片和模块方面,有不同的要求的变体
- 先进的开发平台和框架
- 巨大的社区
- 最后,与顶级云基础设施的原生集成
ESP32的特点
自从市场上推出第一款ESP32以来,Espressif推出了ESP32的几个变体,最近,在2020年,他们推出了ESP32-S2系列芯片。ESP32系列是通用的、功能丰富的、多功能的SoC解决方案,你可以在需要Wi-Fi连接的许多不同类型的物联网项目中使用。让我们快速了解一下其主要功能:
- CPU和内存: 32位Xtensa® LX6微处理器,时钟频率/MIPS高达240 MHz/600 MIPS。单核或双核的变种。448 KB ROM, 520 KB SRAM, 和16 KB RTC存储器。支持外部SPI闪存和SPI RAM的模块变体。外围设备的DMA。
- 连接性: Wi-Fi 802.11 n (2.4 GHz) 高达150 Mbps (STA和softAP模式)和符合Bluetooth v4.2 BR/EDR和BLE规范的蓝牙。
- 周边接口: GPIO、ADC、DAC、SPI、I2C、I2S、UART、eMMC/SD(芯片变体)、CAN、IR、PWM、触摸传感器和霍尔传感器。
- 安全性: 加密硬件加速(随机数、散列、AES、RSA和ECC)、1024位OTP、安全启动和闪存加密。
- 电源模式: 在超低功耗(ULP)协处理器和实时时钟(RTC)的帮助下有不同的电源模式。深度睡眠模式(ULP激活)下的功耗为100μA。
新的ESP32-S2系列有点不同,一些明显的区别包括以下几点:
- 单核。
- 没有蓝牙。
- 不支持SD/eMMC,但增加了USB OTG。
- 增强了安全功能。
为了使硬件设计更容易,Espressif提供了不同配置的ESP32模块。模块的可变参数是ESP32芯片的变体、外部闪存(4、8或16MB)、外部SRAM和天线类型。我们可以选择带有PCB天线的模块,或者在U.FL/IPEX连接器的帮助下实现外部天线选项。在ESP32-S2方面,截至本书编写时,我们只有一个模块选项。大多数时候,在你的项目中选择其中一个模块就足够了。但是,如果你需要特定的ESP32芯片,例如具有高温操作的芯片,那么你需要使用一个相应的芯片变体,例如ESP32-U4WDH,并相应地设计你的PCB。你可以在Espressif的网站上找到可用的模块:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/hw-reference/index.html。
下面的照片显示了一个集成有板载天线的ESP32-WROOM-32D模块:
可以在市场上找到许多来自不同供应商的板子。我们可以很容易地用这样的套件开始开发,而不需要进行实际的硬件设计和最终产品的原型。所有的模型都集成了USB-UART桥接芯片和USB端口,所以我们只需要将套件插入我们的开发PC,就可以闪现和测试固件:
开发平台和框架
ESP32是相当流行的。因此,有很多选择,你可以选择作为你的开发平台和框架。
当然,第一个是直接来自Espressif本身。他们称之为Espressif物联网开发框架(ESP-IDF)。它支持所有三个主要的操作系统环境--Windows、macOS和Linux。在安装了一些先决条件的软件包后,你可以从GitHub仓库下载ESP-IDF,并将其安装在你的开发电脑上。他们已经将所有必要的功能收集到一个名为idf.py的Python脚本中,供开发人员使用。你可以通过使用这个命令行工具来配置项目参数和最终的二进制图像。你也可以在项目的每一步中使用它,从构建阶段开始,到从计算机的串行端口连接和监控你的ESP32板。但正如我所说,这是一个命令行工具,所以如果你是一个更喜欢图形用户界面的人,那么你需要安装Visual Studio Code并在其中安装一个ESP-IDF扩展。这里是ESP-IDF的链接:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html。
第二个选择是Arduino IDE。正如你所期望的那样。Arduino提供了它自己的库来与ESP32板一起工作。如果你有使用Arduino IDE的经验,你就知道它是多么容易使用。然而,与ESP-IDF相比,它是以开发灵活性为代价的。你在Arduino允许你做的事情方面受到限制,你需要遵守它的规则。
你可以选择的第三个选择是PlatformIO。这不是独立的IDE或工具,而是作为Visual Studio Code中的扩展,作为开源的嵌入式开发环境。它支持许多不同的嵌入式板、平台和框架,包括ESP32板和ESP-IDF。安装之后,它将自己与VSCode UI集成,在这里你可以找到ESP-IDF的idf.py提供的所有功能。除了VSCode IDE的功能外,PlatformIO还有集成的调试器,支持单元测试,静态代码分析,以及嵌入式编程的远程开发工具。PlatformIO是平衡易用性和开发灵活性的好选择。
这三个框架的编程语言是C/C++,所以你需要了解C/C++才能在这些框架内开发。然而,C/C++不是ESP32的唯一编程语言。你可以使用MicroPython进行Python编程,或者使用Espruino进行JavaScript编程。它们都支持ESP32板子,但说实话,我不会用它们来开发任何将在市场上推出的产品。尽管由于你对编程语言的偏好,你可能对它们感到更舒服,但你在它们中都找不到ESP-IDF的功能。
实时操作系统选项
基本上,RTOS提供了确定性的任务调度器。尽管调度规则根据调度算法的不同而变化,但我们知道我们创建的任务将在这些规则的一定时间内完成。使用实时操作系统的主要优点是降低了复杂性,改进了软件结构,便于维护。
ESP-IDF支持的主要实时操作系统是FreeRTOS。ESP-IDF使用自己的Xtensa版本的FreeRTOS。与普通的FreeRTOS相比,其根本区别在于对双核的支持。在ESP-IDF FreeRTOS中,你可以从两个核心中选择一个来分配任务,也可以让FreeRTOS选择。与原来的FreeRTOS相比,其他的区别主要来自于对双核的支持。FreeRTOS是在MIT许可下发布的:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html。
如果你想把你的ESP32连接到亚马逊网络服务(AWS)物联网基础设施,你可以通过使用亚马逊FreeRTOS作为你的RTOS选择来实现。ESP32在AWS的合作伙伴设备目录中,并得到官方支持。亚马逊FreeRTOS有必要的库来连接到AWS物联网和其他与安全有关的功能,如TLS、OTA更新、与HTTPS、WebSockets和MQTT的安全通信,几乎是开发安全连接设备的一切:https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html。
Zephyr是另一个RTOS的选择,它有一个宽松的自由软件许可,Apache 2.0。Zephyr需要在开发机器上安装ESP32工具链和ESP-IDF。然后,你需要用它们来配置Zephyr。当配置准备好后,我们使用命令行Zephyr工具 "west",用于构建、闪光、监控和调试目的:https://docs.zephyrproject.org/latest/boards/xtensa/esp32/doc/index.html。
我想在这里分享的最后一个RTOS是Mongoose OS。它通过其网络UI工具mos提供了一个完整的开发环境。它与几个云物联网平台,即AWS物联网、谷歌物联网、微软Azure和IBM Watson,以及任何其他支持MQTT或REST端点的物联网平台(如果你需要一个自定义平台)进行了原生集成。Mongoose OS有两种不同的许可证,一种是Apache 2.0社区版,另一种是有商业许可证的企业版:https://mongoose-os.com/mos.html。
热门相关:冉冉心动 监禁 O型西瓜胸部的家政妇 梦回大明春 朕是红颜祸水