1美元即可买到ESP8266芯片,但我建议使用带USB接口的线路板。更新固件需要USB接口。如果没有搭载USB接口,则需要额外的步骤,比如使用USB-TTL转换器。一个带USB接口的ESP8266线路板只需3美元即可买到。嵌入式开发可能既困难又昂贵,但本文展示如何在30分钟内,在一种成本超低的设备上安装好安全的嵌入式Web服务器,以便在WiFi芯片上运行FreeRTOS和lwIP TCP/IP堆栈。同时将解释如何在ESP8266上编译和运行Minnow Server。 Minitow服务器和参考示例在GitHub上可以找到。

嵌入式开发可能既困难又昂贵,但本文展示如何在30分钟内,在一种成本超低的设备上安装好安全的嵌入式Web服务器,以便在WiFi芯片上运行FreeRTOS和lwIP TCP/IP堆栈。

为什么要使用安全(TLS)的服务器?

浏览器已经开始将标准(HTTP)服务器在浏览器栏中标记为“不受信任”(参见下面的图2),而安全服务器对最终用户来说将更加值得信赖。我将在本文下面的安全注意事项部分详细介绍。

WiFi芯片ESP8266和Minnow服务器

1美元即可买到ESP8266芯片,但我建议使用带USB接口的线路板。更新固件需要USB接口。如果没有板载USB,则需要额外的步骤,比如使用USB-TTL转换器。一个现成的带USB接口的ESP8266线路板只需3美元可以购买到。

低成本的ESP8266 WiFi芯片非常适合学习之用,但速度很慢,特别是在执行诸如加密等CPU密集型任务时。在使用慢速芯片来处理CPU密集型任务时,确实需要慎重考虑你的设计。

ESP8266以80 Mhz的频率运行,这对嵌入式芯片来说还算可以,但代码执行速度比较慢,因为代码要通过SPI内存执行。在超过资源受限微控制器的实际限制时,在此设备上运行启用TLS的服务器可提供真正的唤醒呼叫,并提供对可在慢速微控制器上运行的内容的精彩介绍。选择合适的安全Web服务器类型和Web应用程序设计对于速度较慢的设备至关重要。

在本文中,我将解释如何在ESP8266上编译和运行Minnow服务器。 Minitow服务器和参考示例在GitHub上可以找到。

我最近在embedded.com上发表了一篇关于Minnow服务器的文章。该篇文章介绍了如何使用Minnow服务器创建一个基于Web的现代设备管理应用程序。本文还探讨了在使用TLS时将WebSocket服务器与所谓的单页应用程序(SPA)结合使用的好处。我建议读者先阅读一下这篇文章,因为我们将为ESP8266准备和编译相同的示例代码。

入门

我们将使用由esp-open-rtos项目提供的ESP8266 FreeRTOS/lwIP环境,但不用担心,你不需要经历一遍复杂的esp-open-rtos设置过程。相反,我们将利用预先配置好且完全准备好使用的环境,这个环境就是一个易于使用的基于Web的IDE.

下载FreeRTOS/lwIP ESP8266 IDE

导航到Real Time Logic并下载我们已经准备好的ESP8266 IDE。这一IDE专为教育目的而设计,包括一个预先配置好的esp-open-rtos,并绑定好了可简单使用的基于Web的C语言源代码IDE。 IDE需要VmWare或VirtualBox,我本人更喜欢VmWare胜过VirtualBox,因为我发现前者更容易使用。而且,请注意,VmWare对于非商业用途是免费的。

ESP8266 IDE还包括一个嵌入式TLS堆栈(SharkSSL),Minnow服务器在使用SharkSSL编译时会自动使用TLS。

您可以在没有ESP8266线路板的情况下开始使用ESP8266 IDE,但无法上载和运行已编译过的代码。换句话说,您可以下载IDE并按照本教程中的所有步骤完成操作,除了在ESP8266上运行代码。

图1中的屏幕截图显示了虚拟机及与其相连的基于Web的IDE。请注意虚拟机是如何获得ESP8266 USB连接的所有权。基于Web的IDE检测到此情况,便显示ESP8266已连接,并准备使用新固件进行更新。

EETC_1904_DC_S1_F1.png

图1:基于Web的IDE连接到虚拟机的IP地址。 (来源:Real Time Logic)

图1中的屏幕截图显示ESP8266通过一块面包板连接到LED。除非您想要控制本示例应用程序中使用的外部LED,否则不需要额外的LED或面包板。

请注意,你的VM的IP地址很可能与图1中的不同。确保在虚拟机窗口中单击IP地址。如果窗口为空白,请单击窗口,然后按Enter键。您必须在浏览器中输入此IP地址才能打开Web IDE。

安装Minnow Server和示例代码

Minnow Server参考示例不包含在ESP8266 IDE中,必须单独安装。图1显示了已安装在“ESP/ms”目录下的Minnow Server示例。必须从Linux命令行安装Minnow Server,但如果您没有使用Linux,也不要担心。您只需复制并粘贴我们准备好的命令即可。下图显示了粘贴到Linux Web shell中的Minnow Server安装命令的屏幕截图,可从http://vm-ip-address/webshell/获得。

EETC_1904_DC_S1_F2.png

图2:粘贴到Linux Web shell中的Minnow Server安装命令。 (来源:Real Time Logic)

当您在浏览器中输入Web shell的URL时,系统将提示您登录。用户名为sharkssl,密码为SharkSSL。
GitHub上的ESP8266教程解释了如何配置虚拟机、安装所有内容、编译Web服务器示例,以及刷新固件等。以下视频通过逐步解释简化了操作过程。

安全与非安全

Minnow Server可以在安全或非安全模式下使用,而在与ESP8266 IDE和SharkSSL一起使用时自动进入安全模式(TLS)。在设备中使用支持TLS的Web服务器会增加额外的复杂性,最终用户也将要承担处理SSL证书的管理责任。在上面的视频中,我们展示如何通过在浏览器中安装认证机构(CA)证书来去除浏览器中显示的证书错误。CA证书用于在Web服务器示例中对证书进行签名。

嵌入式设备通常安装在受保护的专用网络中,但许多客户仍要求使用TLS进行Web服务器连接。在专用网络上使用支持TLS的服务器会有问题,因为没有众所周知的认证授权机构签署IP地址或非标准(专用网络)名称。一种选择是成为自己的证书颁发机构。如果有兴趣了解更多相关信息,请点击链接地址,查看教程:https://realtimelogic.com/blog/2014/05/How-to-act-as-a-Certificate-Authority-the-Easy-Way

如上所述,ESP8266速度很慢。TLS非常占用CPU,您会注意到需要一些时间才能建立连接。使用WebSockets进行通信的单页应用示例针对CPU资源有限的设备进行了优化,但初始非对称加密(TLS握手)仍然需要时间,特别对于一些不遵循友好设计实践规则且打开许多TCP连接的浏览器,因为需要完整的TLS握手。要了解有关现代Web浏览器和慢速微控制器问题的更多信息,请参阅我们的教程:https://realtimelogic.com/blog/2018/11/Creating-SinglePage-Apps-with-the-Minnow-Server,该教程详细探讨了这一问题。

开发者模式与发布模式

在上面的视频中,我们通过在固件中嵌入单页应用(HTML资源)来编译发布模式。这样,我们可以简单地导航到设备以启动应用,将应用按需加载到浏览器中。

开发Web应用通常需要多次迭代,并且必须为每次迭代刷新新的固件,这就使得开发过程非常耗时。幸运的是,单页应用可以在开发期间驻留在您的PC上,您只需刷新浏览器即可加载新的应用程序。从PC加载应用程序后,其中的JavaScript代码将与ESP8266建立唯一的WebSocket连接。此连接用于所有浏览器与设备的交互。教程【使用Minnow Server创建单页应用程序】:https://realtimelogic.com/blog/2018/11/Creating-SinglePage-Apps-with-the-Minnow-Server,也详细探讨了这一开发过程。

请注意,单页应用的服务器端(设备端)为ESP8266提供了一个端口API。此API与拖放固件上载示例一起使用,但不保存上载的数据。此外,更改凭据也没生效。 esp-open-rtos API包含一个文件系统,您可以使用esp-open-rtos提供的API添加缺失的功能。

IoT启用ESP8266的参考示例

配置有嵌入式Web服务器的设备通常会在公司防火墙和/或路由器后面的专用网络上安装和操作,并且在外部使用时和防火墙滥用时自动受到保护。但是,此类部署也会阻止合法的远程使用。

有时,嵌入式设备需要通过Internet从远程位置进行操作,最安全的方法是利用物联网启用设备并让设备连接到Internet上的服务器。下图描绘了这样的设置。

2019si.jpg

图3:本地或通过Internet远程访问嵌入式设备。(来源:Real Time Logic)

External User:外部用户

Online connection:在线连接

Redirector:重定向器

Private Network:专有网络

Local Intranet user:本地企业内部用户

Direct websocket: 直接Websocket

Connection:连接

Minnow Server参考示例包含一个可在编译时启用的可选IoT组件。请注意,此组件在默认情况下是禁用的,并且需要对代码(或Makefile)进行一些细微的修改才能启用它。上面视频的第二部分显示了如何连接到我们设置的在线测试服务器。

当设备以IoT模式运行时,除了充当本地使用的服务器之外,该设备还作为网络客户端运行。网络客户端通常不需要任何网络配置来连接到Internet上的服务,但必须连接到已知的服务。出于这个原因,我们建立了一个可用于测试目的的在线IoT服务器。您可以使用它进行测试。

在线服务器充当远程用户和设备之间的代理,并允许远程用户安全地访问在防火墙后运行的私有Web服务器。请注意,我们设置的测试服务器不是即用型服务。我们将保持运行一段时间,但如果您计划使用IoT模式,最终您将需要设置自己的私有IoT服务器。

GitHub上的Minnow页面包含有关如何设置自己的私有IoT服务器的说明。私有IoT服务器的好处是不必依赖于任何特定的IoT服务提供商。您会惊讶地发现操作私有IoT服务器是多么容易和合理。

如何启用IoT模式

上面的视频显示了如何IoT启用Minnow Server的参考示例,以下屏幕截图显示了需要在Makefile中启用的宏。

20194.png

图4:宏'USE_SMQ'启用IoT模式,宏''SMQ_DOMAIN'设置服务器名称。 (来源:Real Time Logic)

从图4中可以看出,SMQ_DOMAIN宏必须设置为我们的在线IoT演示服务器“minnow.ml”,或您自己的IoT服务器。

此时,您应该可以单击“Run”按钮,以编译并上载新的固件。运行新固件时,您应该会在Web控制台中看到以下文本。请注意,我删除了一些打印输出结果。

WebSocket服务器监听443

SMQ:连接到https://minnow.ml

协商密码:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
警告:从minnow.ml收到的证书不受信任!

证书警告的原因与充当不信任在线服务器的TLS客户端的设备有关。证书管理很复杂,我会在本文最后讨论这个问题。

所有连接的设备都显示在在线服务器的(minnow.ml)用户界面中。单击其中一个设备将转到该设备的登录屏幕。登录页面的验证凭据由设备提供,而不是在线服务器。默认凭据是root/password。图5显示了单击设备链接之前和之后的在线服务器。

20195.png
图5:单击设备链接之前和之后的在线服务器。 (来源:Real Time Logic)

图5的左侧窗格显示了一个已连接的设备,但是在线服务器可以管理任意数量的设备,并且随着连接设备的增加,列表也会增长。单击链接时,联机服务器的代理功能会将您连接到设备,从这一点开始,在概念上,连接的工作方式与图3中所示的直接WebSocket连接类似。

安全考虑事项

如上所述,Minnow Server可以在安全(HTTPS)或非安全(HTTP)模式下运行。因不必处理证书,使用非安全连接比较容易。在慢速CPU上服务器运行也要快得多。但是,如上图2中的浏览器栏所示,在非安全连接时,Google的Chrome浏览器和其他浏览器现在会显示警告消息。谁知道接下来他们会做什么?谷歌似乎决心想要关闭非安全通信。

使用TLS时,您必须确保使用有效的信任链。如果用户浏览到具有不受信任证书的服务器,所有浏览器都会发出严重警告信息。正如我们在上面的视频中所解释的那样,为私有服务器建立信任链需要您在专用网络上提供信任管理解决方案。如上视频所示,一种解决方案是充当您自己的证书颁发机构。如果您有兴趣建立自己的信任链,我建议您阅读文章:《如何充当自己的证书颁发机构?》
https://realtimelogic.com/blog/2014/05/How-to-act-as-a-Certificate-Authority-the-Easy-Way
当设备在客户端模式下运行,并连接到在线测试服务器minnow.ml时,控制台上将打印出证书警告。您可以在示例源代码文件“main.c”中找到此打印输出结果(参见图3)。不要打印警告,而是应该终止连接,但在修改C代码以终止不受信任连接之前,必须确保设备信任在线服务器minnow.ml。通过将在线服务器的CA证书(根证书)导入设备的C代码,就可以恢复信任。在线服务器的证书由Let's Encrypt签署。

如果您不熟悉“信任链”这一概念,我建议您阅读文章《嵌入式系统的证书管理》:

https://realtimelogic.com/blog/2013/10/Certificate-Management-for-Embedded-Systems

本文同步刊登于2019年电子工程专辑杂志4月刊

  • ESP8266这个在IOT当中是明星方案,现在USB接口化了,那使用起来更加便捷
阅读全文,请先
您可能感兴趣
尽管成本更高,越来越多公司为了与竞争对手区隔,开始选择设计自己的SoC。对于标准化CPU与SoC的制造商来说,这个趋势并不有利,但对于其他产业参与者却大有好处。
瑞萨最近发布了全球首款基于Cortex-M85的MCU,全面提升了MCU的AI能力。现在的MCU为什么需要AI性能?
今年的Arm Tech Symposia技术大会回归线下,将分别在深圳、北京、上海三地举行。Arm高管将与生态伙伴一道共话AI 时代的未来计算、云网融合、软件定义汽车、软硬协同开发等热门话题。
网络中的各个元素必须符合特定的频率、相位和时间要求,以确保网络实现正确的端到端运行。由O-RAN联盟定义的同步架构决定了开放式RAN设备将如何满足这些要求。
鸿蒙4之所以能够成为史上升级速度最快的HarmonyOS版本,主要是由于其在界面交互和电池续航方面的优化改进,以及与AI等技术的结合创新性和特色。
随着半导体技术发展进入3纳米工艺节点,我们正见证摩尔定律逼近其物理界限。然而,全球的芯片工程师们并未停下脚步,他们正从架构、材料、以及封装等多个角度合力推动工艺的进一步微缩,以延续摩尔定律的脚步。
根据TrendForce集邦咨询最新OLED技术及市场发展分析报告统计,在近期发表的摺叠新机中,UTG的市场渗透率已逾九成,随着摺叠手机规模持续成长,预估2023年UTG产值将达3.6亿美元;2024年可望挑战6亿美元。
随着终端及IC客户库存陆续消化至较为健康的水位,及下半年iPhone、Android阵营推出新机等有利因素,带动第三季智能手机、笔电相关零部件急单涌现,但高通胀风险仍在,短期市况依旧不明朗,故此波备货仅以急单方式进行。此外,台积电(TSMC)、三星(Samsung)3nm高价制程贡献营收亦对产值带来正面效益,带动2023年第三季前十大晶圆代工业者产值为282.9亿美元,环比增长7.9%。
治精微推出具过压保护OVP、低功耗、高精度运放ZJA3018
无线技术每天都在拯救生命,有些非常方式是人们意想不到的。在美国加利福尼亚州Scotts Valley,一名路过的慢跑者发现一处住宅冒出火焰后,按响了门铃,试图通知屋主。屋主不在家中,但无线门铃连接到了智能家居中枢,提醒屋主慢跑者试图联系。屋主立即向他提供了安全密码,让他跑进房子,从火场中救出了宠物。
作者:Jackie Gao,AMD工程师;来源:AMD开发者社区前言当FPGA开发者需要做RTL和C/C++联合仿真的时候,一些常用的方法包括使用MicroBlaze软核,或者使用QEMU仿真ZYNQ
相信每个硬件工程师应该都用过DC-DC,那么分压反馈电阻的取值有没有想过呢?实际应用中大抵都是直接抄的手册中推荐的分压电阻阻值,就算没有正好对应输出电压的分压阻值,也一般是选择接近的电阻大小。但是,总
近日,Wi-Fi联盟宣布Wi-Fi 7规范将于第一季度末最终确定,为企业采用标准化硬件打开大门。 “基于 IEEE 802.11be 技术的 Wi-Fi CERTIFIED 7 将于 2024 年第一
广告分割线12月11日,臻鼎科技集团与协成昌集团(Saha Group)达成了战略合作协议。当晚还举办了“2023庆祝战略合作签约暨鹏晟科技动土典礼晚宴”。本次战略合作协议的签订将进一步促进双方的合作
AMD Vitis™ 高层次综合 ( HLS ) 已成为自适应 SoC 及 FPGA 产品设计领域的一项颠覆性技术,可在创建定制硬件设计时实现更高层次的抽象并提高生产力。Vitis HLS 通过将 C
一前言随着信息技术和半导体技术的快速发展,电子产品的类型和功能模块日益多样化,对此要求的传输速率也日益提高,在模块集成度多和传输速率提高的背景下,噪声的耦合问题不可避免的日益增多起来。二整改案例今天分
点击左上角“锂电联盟会长”,即可关注!粉尘、水分和毛刺是锂离子电池生产过程中需要严格控制的关键因素。严格控制电池生产环境的粉尘对锂离子电池的安全和性能至关重要。生产环境粉尘控制不足会导致涂层表面产生大
点击左上角“锂电联盟会长”,即可关注!文 章 信 息干法改性工艺新认识,助力锂离子电池高镍正极材料实现高结构稳定和热稳定性能第一作者:吴锋通讯作者:苏岳锋*,陈来*通讯单位:北京理工大学,北京理工大学
01 项目简介该项目是使用ESP32模块复刻的Nokia1110,可运行NES游戏模拟器和LVGL,主要功能包括彩屏显示,ADC按键,Type-C充电,USB转串口,DAC音乐播放,SD卡读写,WS2
巨头动向腾讯今年回购金额已超过去10年总额12月11日,腾讯公告称,当日耗资约4.03亿港元,回购133万股股份。年初至今,腾讯已经出手113次,累计回购数量约1.28亿股,累计回购金额超过422亿港