一文叫你搞懂乐鑫物联网ESP芯片及开发
ESP是什么
说到物联网行业,不得不提大名鼎鼎的乐鑫公司,旗下的ESP8266和ESP32系列芯片更是火得一塌糊涂。如果你还不知道这两个名字,那么请回去面壁三分钟。2015年和2016年乐鑫分别发布了ESP8266和ESP32两款芯片,市场大热,物联网行业为之震动。为什么呢,功能够的情况下成本低啊,重要的事情说三遍:便宜、便宜、便宜。物联网的控制模块成本直接拉到了10元左右,如今你上淘宝看esp8266的开发板也就10多块钱,esp32的开发板也就20块钱左右。那么这10多20块钱你买到的是什么呢?看看对ESP芯片的定义:超低功耗32位微MCU,具有16位缩减模式,支持RTOS,集成了Wi-FiMAC/BB/RF/PA/LNA,板载天线,采用gagent固件编程,可快速实现设备M2M接入、数据统计分析、远程控制、OTA升级、第三方接口等功能服务。该固件支持SoC解决方案和二次开发,大大降低了开发成本,缩短了开发周期。这对于企业生产和个人DIY都是巨大的利好,整个生态也逐渐完善。我想这就是作为一个科技公司重要的功绩,他能搅动整个行业生态的变化,推动整个行业的进步。
ESP的分类
-
ESP芯片及其封装
以ESP8266为例,我们来介绍一下ESP的系列知识,ESP产品可分为芯片、模块和开发板三个产品形式,芯片为乐鑫生产,而模块则是厂家把芯片和外围电路封装好,然后生产出来给用户直接使用,开发板则是将模块再一次进行封装底板,引出usb口给开发者直接进行开发使用。目前乐鑫的模块有很大一部分是安可信代工生产的。对于设计者来说可以使用开发板完成功能设计开发,然后根据实际需要是选择模块或者直接使用芯片,最后自己设计电路进行实际产品的生产。
芯片 模块 开发板 ESP8266EX ESP-WROOM-02D
ESP-WROOM-02U
ESP-WROOM-02
ESP-WROOM-S2ESP8266-DevKitC
ESP-Launcher
ESP-WROOM-5V2L -
ESP系列
ESP根据功能和年代可分为ESP8266、ESP32、ESP32-S、ESP-C系列;
ESP8266系列 ESP32系列 ESP-C系列 ESP32-S系列 32-bit MCU & 2.4 GHz Wi-Fi 32-bit MCU & 2.4 GHz Wi-Fi & Bluetooth/Bluetooth LE 32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE) 32-bit MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE) 单核 CPU 时钟频率高达 160 MHz
+19.5 dBm 天线端输出功率,确保良好的覆盖范围
睡眠电流小于 20 μA,适用于电池供电的可穿戴电子设备
外设包括 UART,GPIO,I2S,I2C,SDIO,PWM,ADC 和 SPI两个或一个可以单独控制的 CPU 内核,时钟频率可调,范围从 80 MHz 到 240 MHz
+19.5 dBm 天线端输出功率,确保良好的覆盖范围
传统蓝牙支持 L2CAP,SDP,GAP,SMP,AVDTP,AVCTP,A2DP (SNK) 和 AVRCP (CT) 协议
低功耗蓝牙 (Bluetooth LE) 支持 L2CAP, GAP, GATT, SMP, 和 GATT 之上的 BluFi, SPP-like 协议等
低功耗蓝牙连接智能手机,发送低功耗信标,方便检测
睡眠电流小于 5 μA,适用于电池供电的可穿戴电子设备
外设包括电容式触摸传感器,霍尔传感器,SD 卡接口,以太网,高速 SPI,UART,I2S 和 I2C单核 CPU 时钟频率高达 240 MHz
支持多种低功耗工作状态:精细时钟门控、动态电压时钟频率调节
安全机制:eFuse 存储、安全启动、Flash 加密、数字签名,支持 AES、SHA 和 RSA 算法
外设包括 43 个 GPIO 口,1 个全速 USB OTG 接口,SPI,I2S,UART,I2C,LED PWM,LCD 接口,Camera 接口,ADC,DAC,触摸传感器
可对接丰富的网络云平台、拥有通用的产品特性,极大缩短产品构建与上市时间Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz
内置 512 KB SRAM、384 KB ROM 存储空间,并支持多个外部 SPI、Dual SPI、 Quad SPI、Octal SPI、QPI、OPI flash 和片外 RAM
额外增加用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions) 44 个可编程 GPIO,支持常用外设接口如 SPI、I2S、I2C、PWM、RMT、ADC、DAC、UART、SD/MMC 主机控制器和 TWAITM 控制器等
基于 AES-XTS 算法的 Flash 加密和基于 RSA 算法的安全启动,数字签名和 HMAC 模块,“世界控制器 (World Controller)”模块 -
ESP方案
ESP的开发
-
开发板
开发板其实没必要选择乐鑫官网的开发板,如ESP8266-DevKitC的价格通常在40元左右, 对于用户小白来说,市面上性价比最高的两款开发板分别是ESP12F NodeMCU(esp8266)和 ESP32-D0WDQ6(esp32),两块板子都是采用NodeMcu的开源方案,如果选用CH340的串口芯片,价格分别可以低到10块和20块钱,对于练手来说非常划算,个人建议如果不是专门指定了esp8266,那么建议还是直接上esp32,对于后续学习来说更方便。
-
开发环境
ESP除了C/C++语言之外可以运行 Lua (nodemcu)、JavaScript (Espruino)、Python (Micropython),可以说是非常的多种多样了。今天主要介绍的开发环境是针对C++的,我们介绍开发环境先来说一下可用于开发IDE工具,大致有arduino、vscode、platformio、esclipes、shell、vs等,选择这些工具需从sdk支持、个人习惯还有开发系统来选择,我这里主要介绍windows下的开发;
-
ESP8266开发
ESP8266的核心SDK主要分为ESP NonOS SDK 和 ESP RTOS SDK,顾名思义,一个是没有系统的SDK,一个是基于FREE RTOS系统的SDK;有了SDK,那么配置编译环境,这就需要工具链了,乐鑫也提供了官方的工具链包,可以直接下载。
介绍完这些,接下来我们来说一下整个开发环境的搭建方案。
最简单的,选择 arduino,直接通过arduino ide来进行sdk工具包的下载和配置,不需要自己下载和配置,对于新手来说是最方便的,而且arduino继承了丰富的第三方库,可以直接下载使用。可参考Arduino IDE 搭建 ESP8266 开发环境及项目演示 - 简书 (jianshu.com)。当然vscode也集成了arduino插件,大家也可以试试,毕竟vscode的ide比arduino好用多了。
第二个方案是选择使用官方的SDK和工具链来进行开发,配置和开发。可参考官方的开发,官网选用的是esclipes开发工具,当然也可以选用vscode进行配置开发,这个请自行搜索。
Windows 平台工具链的标准设置(传统 GNU Make) - ESP32 - — ESP-IDF 编程指南 v4.2.1 文档 (espressif.com)
第三个方案是选择vscode+platformio来进行开发,基本上也可以做到像arduino一样自动进行开发环境搭建,其可以灵活的配置board (什么开发板eg. nodemcuv2)、framework(什么框架eg. arduino)、platform(什么平台eg. espressif8266)可参考NodeMCU开发环境搭建之PlatformIO (ESP8266)_神迹降临的博客-CSDN博客_platformio,其实platformio也只是一个开发的管理工具,内部的实现也离不开原生sdk和arduino套件,可以自己研究一下framework和package里的东西。
对于ESP8266以上三种方法我都进行了尝试,但是每种都有一些缺陷,其实我最想用的是IDE使用vscode+platformio,然后framework使用arduino+freertos,因为arduino是因为旗下有丰富的开发资源,但是arduino的esp8266开发包又是基于NonOs的SDK的封装,鱼和熊掌不可兼得,可能是我太强迫症了。如果我理解错了,大家也可以指出来在arduino下使用freertos进行开发的方法。
-
ESP32开发
从esp32开始官网统一了开发环境,都是用esp-idf作为了开发工具,包含 ESP32 的 API 和用于操作 工具链 的脚本等。我觉得对于其最大的突出优点是其内部使用了宏来控制是否使用freertos系统,这样在arduino下就可以使用freertos进行开发了,当然官网其实也说要统一把esp8266也一起做到系统里,但是现在还没有实现,所以我还是建议开发者直接上esp32,这样选择性更多。
最简单,还是使用arduino,跟esp8266的流程基本一致,只是把开发库的地址换成esp32的就行,可参考 玩转 ESP32 + Arduino (一) 开发环境搭建_finedayforu的博客-CSDN博客
第二方案是vscode + esp-idf 插件方式,可参考 espressif/vscode-esp-idf-extension: Visual Studio Code extension for ESP-IDF projects (github.com)
第三种方案是vscode + platformio插件方式,安装方式与esp8266一致,选择平台不同而已,这里不再放参考了。
第四种方案是visual studio+visualGDB插件方式,可参考 esp32在vs2017+visualGDB平台搭建esp32开发环境。
-
通用开发
当然不要忘了还有python和js开发,官网也给出了开发方法,对于python和js个人觉得对于物联网的上层web开发是非常便捷的,可以使用python进行web方面的开发使用,而c++来说更适合与对于驱动和传感器控制的方面。
MicroPython ESP32教程 — MicroPython 1.9.2 文档 (singtown.com)
对于lua的开发,个人来说体验不是很好,有兴趣可以自己搜一下,建议还是python为上。