LWN:A look at the ESP8266 for IoT

ESP8266芯片因其低成本和内置WiFi功能,在物联网领域受到欢迎。尽管其SDK闭源,但开源社区提供了丰富的资源,如ArduinoCoreforESP8266,支持webserver、文件系统和网络通讯。开源项目如ESPOpenSDK和rBoot进一步增强了firmware的定制能力和安全性。

关注了就能看到更多这么棒的文章哦~

A look at the ESP8266 for IoT

By John Coggeshall
June 15, 2020

原文来自:https://lwn.net/Articles/822516/

Internet of Things (IoT,物联网) 领域有无数种微处理器。我们之前多次介绍 过Arduino这个生态系统。我们再来介绍一下在Arduino社区中另一个人们感兴趣的平台:支持WiFi的Espressif ESP8266 芯片.

ESP8266芯片对于家用IoT领域是一个非常理想的芯片。它非常便宜,内置2.4GHz WiFi能力,支持17个独立的GPIO pin,可以利用Arduino社区中的扩展库。有许多商用IoT设备都使用了ESP8266芯片,其中部分厂商的设备(例如Sonoff的),大家已知是可以重刷firmware的,也还有其他一些不知名品牌的设备本身就是unlock状态的。不过ESP8266有个缺点是SDK是闭源的,发布包中只有头文件以及一些二进制库文件,发布采用的不是自由软件协议,从而禁止用在非ESP8266的设备上。

SDK没有附带源代码是件很可惜的事情,不过其实有一个围绕着这个芯片建立的开源社区,能提供不少帮助。为了让那些不太熟悉ESP8266的读者方便阅读,我们先来讲讲它在Arduino生态系统中的地位。

Understanding the layers

开始进行ESP8266开发之前,有必要先来了解一下使用这颗芯片有哪些方式,以及它在Arduino项目中的开发前景。

大多数ESP8266芯片都配备了Espressif AT firmware,通过串口提供了AT命令接口,来进行各种TCP/IP请求处理(可以在这里看到一些可用的AT命令 https://nurdspace.nl/ESP8266#AT_Commands )。其实,很常见的一种用法是把Arduino设备和ESP8266芯片配合在一起使用。比如用Arduino来控制传感器和各种马达,而通过串口使用ESP8266来跟网络进行通讯。在这种情况下,主要的firmware是运行在Arduino设备中的,ESP8266只是提供网络功能,那么就不太需要重新烧写ESP8266自己的firmware。

其实,很多时候可以把Arduino彻底拿掉,只留下ESP8266芯片,利用它的I/O接口来接管其他外设。这种情况下,需要把出厂时的ESP8266 firmware替换成定制版本,从而能把之前Arduino做得工作也承担下来。首先要有Espressif ESP8266 SDK,之前提到过这是一个闭源开发包。它的C API在官网上有文档介绍,可以用来修改firmware实现定制功能。

只要这一个SDK就可以完成编写代码调用底层API以及部署到ESP8266的工作。不过多数开发者不会直接使用这个SDK,而是喜欢使用Arduino Core for ESP8266,这是一个LGPL license的代码,将Espressif SDK采用了一种跟Arduino生态兼容的方式提供了出来。这样开发者可以直接在ESP8266设备上写Arduino风格的代码。在这种情况下,开发者需要先把ESP8266的board定义文件加入Arduino IDE,接下来就可以跟正常开发Arduino开发板一样了。它还是会利用一些闭源SDK的内容,比如TCP/IP和WiFi协议栈,不过多数代码都是开源的,跟其他Arduino生态的代码是同步的。

What you get with the Arduino Core for ESP8266

大家花了许多功夫,让ESP8266 Arduino Core可以比起原生SDK有更多的好处,而不仅仅局限在是一个开源替代品而已。Arduino Core包括用来支持web server (包括SSL/TLS)的C++类,也支持文件系统,还有DNS和mDNS服务器。还拥有通过TCP/IP进行通讯的工具,例如发起HTTP请求。

Arduino Core可以使用绝大多数Arduino project的module了。根据它的文档,绝大多数Arduino库应该可以直接使用,都不需要修改。包括VNC客户端,REST API支持库,MQTT客户端等等。因为ESP8266有好几个GPIO pin,所以那些需要跟外接硬件配合工作的温度传感器和LED等都可以直接使用。这些库函数对外都会暴露一个bit操作接口,这样开发者就可以使用一个简单API来访问比如温度传感器的数值。

Other open-source efforts around ESP8266

ESP8266价格便宜,并且购买很方便,因此尽管它的SDK不太友好,但是Arduino社区中需要网络连接功能的地方都很喜欢它。同时,人们也就很有动力来对这个闭源的SDK进行反向工程,希望能替代掉原本的SDK。

ESP Open SDK就是针对ESP8266的一个非常全面的开源SDK。它把原有的闭源SDK和许多开源项目结合在一起,提供了一个完全独立的SDK,包括开发工具。此项目近年来看起来有点停滞了,不过对于那些希望尽量使用开源方案的人来说,还是一个很好的开发firmware的选择。同时,因为开发进度暂缓了下来,它需要一来旧版本的闭源SDK才能工作。

另一个有用的开源项目是一个open-source bootloader,名为rBoot。这是由Richard Burton开发的。此bootloader在ESP8266上会是上电之后最先执行的代码,负责完成一些application执行之前需要完成的工作,比如在OTA升级之后切换成新的firmware版本。

rBoot通过linker(链接器)的一些技巧来在SDK编译时替换掉某个函数,之后rBoot就能骗过SDK,让它先加载rBoot而不是eBoot。跟其他类似的工作一样,rBoot除了通过开源来让我们对芯片上执行的代码更放心之外,比起原生的eBoot也提供了更多的功能。比较重要的功能包括支持多个firmware image,可以通过GPIO选择firmware,如果firmware损坏的话可以无缝回退,并且有更强的firmware教研功能。为了使用rBoot的校验功能,Burton还重写了一个ESP8266 ROM打包工具,命名为esptool2。这个工具会用ROM里的 .irom0.text p来进行校验计算。Burton的博客有对这个项目很详细的介绍。

由于rBoot使用了linker的一些技巧,因此它有点难于使用。主要的困难在于,通常人们便衣ESP8266 firmware是用Arduino IDE的,它就没法支持rBoot。要用rBoot的话,就需要使用以前传统的 ld 和 make 等工具了。编译完成后也需要会用 esptool2 来打包并更新ESP8266的ROM。

在社区中,其实挺多人都很喜欢这些脱离Arduino IDE的做法,因为Arduino IDE自己的一些固有的缺点,让有经验的开发者其实挺喜欢脱离Arduino IDE来进行ESP8266开发的,这样的话,可以看一下makeEspArduino项目。这个项目的目标是能彻底脱离Arduino IDE,可以直接进行ESP8266开发,同时又仍然可以使用绝大多数的Arduino库。本质上来说,这个项目是一个很复杂的makefile系统,负责确保所有东西都会被正确编译生成出来。它会分析Arduino IDE的board定义文件,因为这些文件会经常更新。如果对编译工具和makefile有一些了解的话,很适合使用makeEspArduino来进行rBoot编译,并替代原生的SDK bootloader。

同样还有一个Arduino CLI项目也是脱离Arduino IDE使用的。这是用Go语言开发的命令行工具,替代了Arduino IDE中的许多重要功能,例如library and board manager,这样开发者完全可以使用shell来安装Arduino library并管理库函数的一来关系。在跟makeEspArduino这类项目配合使用的时候,在编译ESP8266时就完全不需要使用Arduino IDE了。

Other considerations and wrapping up

对于那些希望在Arduio中使用一些不是C++的开发环境的开发者,还有其他一些语言的替代选择。比如MicroPython,NodeMcu提供了Lua支持,甚至还有Espruino项目提供了JavaScript。所有这些项目肯定都需要依赖官方SDK里面的那些binary,不过无论如何对于那些希望用到C++之外的语言的开发者来说,还是很有用的。

支持了这么多种预言,并且也有不少GPIO可用,也就难怪我们可以看到这么多使用了ESP8266的项目了。对于Home Assistant智能网关的使用者来说,esphomelib就可以跟Home Assistant配合得很好,号称可以让开发者能为自己的智能hub加入传感器和IoT设备并且不需要写哪怕一行代码。还有Tasmota这样的项目用来方便人们利用ESP8266 firmware来开发许多种通用设备。

对于要在ESP8266芯片来说,开发网络相关设备的时候有那么多种方式可供选择。从直接使用官方SDK,到Arduino Core,再有支持Python和JavaScript等语言,这个芯片已经非常好用了,尤其是考虑到这一切的最开始都是从一个闭源SDK而来的。此外,这个芯片还有各种形式的变种,分别有不同的价位以及功能,这样它几乎可以用在各种不同级别的项目上。这些特点,使得这款芯片成为了黑客们感兴趣的一个主要目标,都想用它来制作自己的IoT设备。再配上开源的智能网关例如Home Assistant,这使得构建一个大范围open-source的智能家居的目标更加可行了。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注LWN深度文章以及开源社区的各种新近言论~

内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
内容概要:本文研究了基于Benders分解与输电网运营商(TSO)和配电网运营商(DSO)协调机制的不确定环境下输配电网双层优化模型,旨在提升高比例可再生能源接入背景下电网系统的协调性与鲁棒性。模型上层以系统整体经济性为目标进行优化调度,下层采用Benders分解实现TSO与DSO之间的信息交互与协同决策,通过引入割平面迭代机制保障求解的收敛性与全局最优性。研究充分考虑新能源出力与负荷需求的不确定性,构建了具有强适应性的双层优化框架,并基于Matlab完成了模型的编程实现与仿真验证,有效解决了多主体、多层级、多不确定性因素耦合下的电力系统优化调度难题。; 适合人群:具备电力系统分析、运筹学与优化理论基础,熟悉Matlab编程环境,从事智能电网、能源互联网、分布式能源集成、电力市场等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究高渗透率可再生能源条件下输配电网协同优化调度策略;②掌握Benders分解在电力系统双层优化建模中的应用方法与实现技巧;③构建TSO-DSO多主体协调机制,实现跨层级电网资源的高效互动与决策解耦;④提升对不确定性建模、分解算法设计及大规模优化问题求解能力。; 阅读建议:建议读者结合Matlab代码逐模块剖析模型构建流程,重点理解Benders割的生成逻辑、主从问题的信息传递机制及收敛判据设定,推荐在标准IEEE测试系统上复现实验以深入掌握模型特性与算法性能。
内容概要:本文系统研究了基于灰狼优化算法(GWO)优化Elman神经网络的方法,并提供了完整的Matlab代码实现。研究重点在于利用灰狼优化算法强大的全局搜索能力,对Elman神经网络的关键参数进行智能优化,从而克服传统训练方法易陷入局部最优的缺陷,显著提升模型在时序预测与非线性系统建模任务中的精度与稳定性。文章详细阐述了Elman网络的动态反馈机制及其在处理时间序列数据方面的优势,构建了GWO与Elman相结合的混合预测框架,涵盖了从模型搭建、参数寻优、仿真测试到结果分析的全流程,特别适用于风电功率预测、电力负荷预测等具有强时变性和不确定性的工程应用场景。; 适合人群:具备一定Matlab编程能力和神经网络基础知识,从事智能优化算法、时间序列预测、电力系统分析或新能源出力预测等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握灰狼优化算法在神经网络超参数优化中的具体实施路径与技术细节;②深入理解Elman递归神经网络与群体智能优化算法融合的建模范式;③将其应用于风电、光伏等新能源发电功率预测及复杂动态系统的建模与仿真,提升预测性能。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,重点关注GWO算法与Elman网络的接口设计、适应度函数构建及参数优化迭代过程,可通过调整数据集或迁移至其他预测场景以深化理解和验证模型泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值