Author:teacherXue
ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。
ESP8266芯片的技术特性
处理器:L106 32 位 RISC 微处理器内核,基于以 80 或 160 MHz 运行的Tensilica Diamond Standard 106Micro。
记忆:
32 KiB 指令 RAM
32 KiB 指令缓存RAM
80 KiB 用户数据RAM
16 KiB ETS 系统数据 RAM
外部 QSPI 闪存:支持高达 16 MiB(通常包括 512 KiB 至 4 MiB)
IEEE 802.11 b/g/n Wi-Fi
集成 TR 开关、巴伦、LNA、功率放大器和匹配网络
WEP 或 WPA/WPA2 身份验证,或开放网络
17 个 GPIO 引脚
串行外设接口总线 (SPI)
I²C(软件实现)
I²S 与 DMA 接口(与 GPIO 共享引脚)
专用引脚上的 UART,以及可在 GPIO2 上启用的仅传输 UART
10位ADC(逐次逼近型ADC)
ESP8266芯片具有如下优点
低成本:您可以获得 ESP8266 板,起价为 3 美元(或更低),具体取决于型号。
低功耗:与其他微控制器相比,ESP8266 功耗非常低,甚至可以进入深度睡眠模式以降低功耗;
Wi-Fi:ESP8266 可以生成自己的 Wi-Fi 网络(接入点)或连接到其他 Wi-Fi 网络(站点)以访问互联网。这意味着 ESP8266 可以访问在线服务以发出 HTTP 请求或将数据保存到云端等。它还可以充当 Web 服务器,以便您可以使用 Web 浏览器访问它,并能够远程控制和监视您的电路板。
与 Arduino“编程语言”兼容:那些已经熟悉 Arduino 板编程的人很高兴知道他们可以用 Arduino 风格对 ESP8266 进行编程。
与 MicroPython 兼容:您可以使用 MicroPython 固件对 ESP8266 进行编程,MicroPython 固件是针对微控制器和嵌入式系统的 Python 3 的重新实现。
ESP8266芯片版本
ESP8266模块有多个不同版本,以满足不同的使用场景和成本,如下图所示。ESP-01 和 ESP-12E 是最为普及的版本。市面上有非常多的各种带有 ESP-12E 或 ESP-12F 芯片的开发板。
ESP8266开发板
使用裸芯片或者模块直接进行学习不太现实,NodeMCU开发板是一个开源的物联网平台,配备了所有需要的电路来供电、可以便捷的上传代码、轻松访问 GPIO 以连接传感器和执行器、用于 Wi-Fi 信号的天线以及其他有用的功能。
ESP8266 开发板种类繁多,尺寸各异。一些电路板受益于小尺寸,这可能非常实用,具体取决于您的项目功能。通常,较小的电路板具有少量可用的 GPIO,例如 ESP-01。最适合的ESP8266 开发板将取决于打算做什么。如果刚开始使用 ESP8266 开发板,建议使用ESP8266-12E NodeMCU 套件。
ESP12-E NodeMCU 套件是最常用的 ESP8266 开发板之一。它具有 4MB 闪存、 可访问 11 个 GPIO 引脚和一个 具有 10 位分辨率的模数转换器 (ADC)引脚。此外,该开发板具有内置稳压器,您可以使用迷你 USB 插座或 Vin 引脚为模块供电。
将代码上传到电路板就像将代码上传到 Arduino 一样简单。不需要 FTDI 编程器或额外的电路,因为它有一个内置的 USB 转串口转换器。大多数开发板都带有 CP2101 或 CH340 芯片。
它带有一个用于 Wi-Fi 信号的板载天线,并带有 RST 和 FLASH 按钮以重置电路板并将其置于闪烁模式。GPIO 2 内部连接了一个蓝色 LED,调试时非常实用。
其他流行的ESP8266开发板
ESP-01和ESP8266 Wemos D1 mini。ESP-01 体积超小,可以容易的装入很多外壳之中,但其引脚数量很少,没有内置稳压器,需要额外的3.3v稳压供电,没有USB接口意味着需要串口上传代码,不是很友好。
WeMos D1 Mini 在最小的小型设置中提供 4MB 闪存、11 个 GPIO 和 1 个 ADC 引脚。社区为 D1 迷你板开发了各种各样的 扩展板,允许您构建小型和简单的设置,几乎不需要布线。您只需堆叠屏蔽层即可连接多个外围设备。它带有内置稳压器和 USB 转 UART 转换器,可以轻松上传代码。对于初学者来说也是一个非常好的选择。
常用开发板对比
|
ESP-01 |
ESP-12E NodeMCU |
WeMos D1 mini |
通用IO引脚 |
4(包括 TX 和 RX) |
11 |
11 |
模数转换器引脚 |
1个 |
1个 |
1个 |
闪存 |
1MB(升级版) |
4MB |
4MB |
面包板支持性 |
X |
✓ |
✓ |
USB转串口 |
X |
✓ |
✓ |
尺寸 |
24.75 毫米 x 14.5 毫米 |
48.55 毫米 x 25.6 毫米 |
34.2 毫米 x 25.6 毫米
|
价格 |
$ |
$$ |
$$ |
开发板引脚类型
电源引脚
通常,所有电路板都带有电源引脚:3V3、GND 和 VIN。可以使用这些引脚为电路板供电(如果不通过 USB 端口供电),或为其他外围设备供电(如果使用 USB 端口为电路板供电)。
通用输入输出引脚 (GPIO)
需要注意的是 GPIO 编号与板上丝印上的标签不匹配。例如,D0对应GPIO16,D1对应GPIO5。使用 Arduino IDE 对电路板进行编程时,必须使用 GPIO 编号而不是丝印上的编号。这适用于大多数 ESP8266 开发板。
ESP8266 外围设备包括:
17个GPIO(ESP8266开发板上通常不是所有的GPIO都可以访问)
接口接口
I2C(在软件上实现)
I2S 与 DMA 接口
串口
10 位模数转换器
不同的 ESP8266 GPIO具有特定的功能,必须明智地为您的项目选择管脚。否则最终可能会得到意想不到的结果。
ESP-12E NodeMCU 套件引出线
WeMos D1 mini引出线
ESP8266-01 引出线
要对电路板进行编程,您需要一个 IDE 来编写代码。对于初学者,可以使用 Arduino IDE。它运行良好并且对于初学者来说简单直观。在熟悉 Arduino IDE 并开始创建更复杂的项目后,使用VS Code 与 PlatformIO 扩展一起使用会很有用,ESP8266和ESP32支持类C的arduino脚本编程,最终执行的是编译好的机器指令,也可以通过micro python以脚本解释的方式进行。但需要注意的是micro python具有较好的交互编程和维护能力,但执行效率远低于c,在需要稳定运行的产品之上,建议运行编译成机器指令的程序。
我们将从Arduino IDE开始最简单的示例,然后向VS Code进阶。使用版本建议ESP8266 的旧版本 (1.8.19) 。虽然版本 2 与Arduino 配合良好,但仍然存在一些错误和 ESP8266 尚不支持的一些功能。
运行 Arduino IDE,您需要在计算机上安装 JAVA环境。请参阅相关教程完成java环境配置。
通过官方地址https://www.arduino.cc/en/Main/Software下载,该软件为免费软件,你可以放心的使用。向下滚动页面找到1.8版本下载。
解压缩后运行名为arduino.exe的可执行文件即可
为了能够使用 ArduinoIDE 对 ESP8266 NodeMCU 进行编程,您需要添加对 ESP8266 开发板的支持。按照以下步骤操作:
转到文件>首选项。
在“ 附加开发板管理地址 ”字段中输入如下地址并确认。
注意:国内开发者可能并不能够直接访问该地址,需采用离线安装包的方式。
离线安装包方式
国内用户适用于离线方式安装,arduino中文社区有封装好的离线安装程序,https://arduino.me/a/esp8266可以浏览下载,以及配置方式(https://arduino.me/a/esp32则可以下载ESP32开发支持)。开发板管理地址按如下填写为https://arduino.me/packages/esp8266.json
双击运行下载好的安装程序
设置开发板类型
搜索ESP8266并安装“ ESP8266 by ESP8266 Community ”,本列中该插件已安装,否则将看到安装按钮,点击安装即可,已安装插件也可以在这里删除。
工具、开发板选项中可以看到ESP8266选项,下面有可供选择的8266芯片类型。
确保在 工具 > 开发板中选择了 ESP8266 。如果使用的是 ESP8266-12E NodeMCU 套件,如前图所示,请选择NodeMCU 1.0(ESP-12E 模块)选项。如果不知道您的电路板是什么,您可以随时选择通用 ESP8266 模块。
在界面中通过文件 > 示例 > ESP8266WiFi > WiFiScan。你将可以在新窗口打开包含wifi热点扫描的示例代码。
使用 USB 数据线将 ESP8266 开发板连接到计算机,注意一定是具备数据传输能力的MicroUSB接线。
界面中转到工具 > 端口 并选择一个可用的 COM 端口。如果 COM 端口显示为灰色,则表示没有所需的 USB 驱动程序,大多数 ESP8266 开发板使用 CP2101 或 CH340 驱动程序,请根据相关资料安装对应USB转串口驱动程序。
可以先点击对勾按钮对代码进行编译检查,此时代码不会烧录到芯片。可以及时发现问题并修正错误。向右箭头则编译代码并烧录到芯片。这里是标准示例不存在错误,我们选择直接烧录。
烧录过程中,会出现进度,如果有错误也会在消息窗口显示。
编译完成会烧录到开发板,并重启开发板芯片,看到如下信息代表烧录正确完成。
通过工具菜单打开串口监视器
串口监视器是通过串口和芯片通信的界面,顶行输入框可以向串口发送消息,下面的列表为接收到串口的信息。在这里我们看到滚动显示的信息为能扫描到的WIFI热点信息。这就是ESP芯片的强大指出,它本身就可以充当一个智能无线网关,我们将在后续章节详细了解。需要注意的是在,串口监视器界面中的波特率需要和芯片保持一致,才能保证信息的正确显示,ESP8266-12E芯片默认波特率是115200,可以在芯片代码中修改。
在程序员的第一个程序中,总是喜欢通过hellow world!这样的简单信息输出程序作为学习开始的代表。第三节中,我们确实可以通过串口监视器来获得文字信息,但物联网设备多数情况下是不会连着开发环境运行的。下面我们将使用开发板自己带的LED灯光来和世界打个招呼。
IDE界面中文件选择新建,会打开一个新的窗口,但在没有保存时,不会在本机留下项目文件,在编译时要求项目必须被保存。要注意,arduino项目保存时,单个文件也需要成项目目录。这里我们新建并保存,输入light_hellow_world并确定。
空白项目里面的两个方法就是arduino程序的基本结构。void setup()方法相当于程序的主方法、入口点,只在程序开始时运行一次。void loop()方法和其名称一样,是不断重复执行的方法,arduino框架编译时自动实现其循环机制,我们不用关心loop方法的调用,arduino代码属于类c脚本,在C语言的基础上封装了很多工具函数,其基本语法和C是一样,有C基础的同学们可以快速上手。
在文件的开头加上 int pin = 2;声明编号2引脚的变量,ESP8266-12开发板的板载LED信号控制连接的是其2号数字引脚,数字引脚只传输高低电平状态。
在setup方法里调用pinMode方法,定义2号引脚的控制方式为电平输出模式,如果是采集数据用的引脚,则是输入。
pinMode(pin, OUTPUT); |
在loop方法里,通过digitalWrite方法,完成数字信号的写入,让2号引脚获得高低电平的输出控制。
digitalWrite(pin, HIGH); //打开LED (HIGH为电压等级高电平) delay(1000); // 等待1000毫秒 digitalWrite(pin, LOW); //关闭LED (LOW为电压等级低电平) delay(1000); // 等待1000毫秒 |
最终代码如下:
点击编译上传,需要注意的是,arodionIDE环境中,串口属于独占资源,如果你正在运行之前的串口监视器,请将其关闭。看到正确的烧录结束信息后,观察开发板的蓝色LED指示灯以一秒为间隔闪烁,尝试修改参数,获得不同结果。
这时,你可以使用电池、或者充电宝供电的方式,让开发板脱离IDE开发环境,独立运行程序。