01-ESP8266 NodeMCU 物联网开发初识

Author:teacherXue

一、认识ESP8266 NodeMCU

ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。

  1. 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)

  1. 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 的重新实现。

  1. ESP8266芯片版本

ESP8266模块有多个不同版本,以满足不同的使用场景和成本,如下图所示。ESP-01 和 ESP-12E 是最为普及的版本。市面上有非常多的各种带有 ESP-12E 或 ESP-12F 芯片的开发板。

  1. 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,调试时非常实用。

  1. 其他流行的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

ESP8266 Wemos D1 mini

  1. 常用开发板对比

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 毫米

价格

$

$$

$$

二、ESP8266 NodeMCU引出线

  1. 开发板引脚类型

  • 电源引脚

通常,所有电路板都带有电源引脚: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具有特定的功能,必须明智地为您的项目选择管脚。否则最终可能会得到意想不到的结果。

  1. ESP-12E NodeMCU 套件引出线

  1. WeMos D1 mini引出线

  1. ESP8266-01 引出线

三、对 ESP8266 进行编程

  1. 使用 ArduinoIDE 对 ESP8266 进行编程

要对电路板进行编程,您需要一个 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 尚不支持的一些功能。

  1. 安装 Arduino集成开发环境

运行 Arduino IDE,您需要在计算机上安装 JAVA环境。请参阅相关教程完成java环境配置。

1)下载 Arduino IDE

通过官方地址https://www.arduino.cc/en/Main/Software下载,该软件为免费软件,你可以放心的使用。向下滚动页面找到1.8版本下载。

2)运行 Arduino IDE

解压缩后运行名为arduino.exe的可执行文件即可

3)软件运行界面
4)在 Arduino IDE 中安装 ESP8266 NodeMCU

为了能够使用 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芯片类型。

  1. 使用 ArduinoIDE 将代码上传到ESP8266 NodeMCU

1) 示例代码

确保在 工具 > 开发板中选择了 ESP8266 。如果使用的是 ESP8266-12E NodeMCU 套件,如前图所示,请选择NodeMCU 1.0(ESP-12E 模块)选项。如果不知道您的电路板是什么,您可以随时选择通用 ESP8266 模块。

在界面中通过文件 > 示例 > ESP8266WiFi > WiFiScan。你将可以在新窗口打开包含wifi热点扫描的示例代码。

2) 连接设备

使用 USB 数据线将 ESP8266 开发板连接到计算机,注意一定是具备数据传输能力的MicroUSB接线。

3) 选择端口

界面中转到工具 > 端口 并选择一个可用的 COM 端口。如果 COM 端口显示为灰色,则表示没有所需的 USB 驱动程序大多数 ESP8266 开发板使用 CP2101 或 CH340 驱动程序,请根据相关资料安装对应USB转串口驱动程序。

4) 上传代码

可以先点击对勾按钮对代码进行编译检查,此时代码不会烧录到芯片。可以及时发现问题并修正错误。向右箭头则编译代码并烧录到芯片。这里是标准示例不存在错误,我们选择直接烧录。

烧录过程中,会出现进度,如果有错误也会在消息窗口显示。

编译完成会烧录到开发板,并重启开发板芯片,看到如下信息代表烧录正确完成。

5) 查看结果

通过工具菜单打开串口监视器

串口监视器是通过串口和芯片通信的界面,顶行输入框可以向串口发送消息,下面的列表为接收到串口的信息。在这里我们看到滚动显示的信息为能扫描到的WIFI热点信息。这就是ESP芯片的强大指出,它本身就可以充当一个智能无线网关,我们将在后续章节详细了解。需要注意的是在,串口监视器界面中的波特率需要和芯片保持一致,才能保证信息的正确显示,ESP8266-12E芯片默认波特率是115200,可以在芯片代码中修改。

四、来自于板载LED的Hello world

在程序员的第一个程序中,总是喜欢通过hellow world!这样的简单信息输出程序作为学习开始的代表。第三节中,我们确实可以通过串口监视器来获得文字信息,但物联网设备多数情况下是不会连着开发环境运行的。下面我们将使用开发板自己带的LED灯光来和世界打个招呼。

  1. 新建项目

IDE界面中文件选择新建,会打开一个新的窗口,但在没有保存时,不会在本机留下项目文件,在编译时要求项目必须被保存。要注意,arduino项目保存时,单个文件也需要成项目目录。这里我们新建并保存,输入light_hellow_world并确定。

  1. 编辑代码

空白项目里面的两个方法就是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毫秒

最终代码如下:

3. 编译烧录代码

点击编译上传,需要注意的是,arodionIDE环境中,串口属于独占资源,如果你正在运行之前的串口监视器,请将其关闭。看到正确的烧录结束信息后,观察开发板的蓝色LED指示灯以一秒为间隔闪烁,尝试修改参数,获得不同结果。

这时,你可以使用电池、或者充电宝供电的方式,让开发板脱离IDE开发环境,独立运行程序。

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
配送一个自己写的串口驱动程序 用DMA接收数据 接收完会产生一个空闲中断 由此可判断接收完一个包的数据 再配送一个我自己写的动态内存管理 跟ESP8266的驱动 在项目中测试460800的波特率 30kb一秒的数据接收 一包1024个字节 每包需要应答15字节的情况下 AT指令处理是使用多个缓冲级来处理模块发送过来的数据 分别有模块应答缓冲级 跟等待应答的缓冲级、被忽略的AT指令集的缓冲级(例如注册一个SEND OK\r\n则模块应答此条指令立刻清除缓冲级释放内存无需等待超时直接忽略)还有需要回调的缓冲级(则出现此指令调用回调函数)都是通过注册的方式来实现 如果出现一包跟指令被分到一个包内 AT处理函数一样可以搜索到AT指令 使用strstr函数来实现 函数的缓冲级都是指针不占用内存 使用动态内存管理的方式 有数据则创建内存放入数据作为一个缓冲级 如果模块应答的数据在规定的时间内没有响应则删除此缓冲级 函数前都有注释介绍 下面介绍一些常用的函数: at_init初始化一些变量已经串口 at_time_task使用定时器回调 1毫秒回调一次 用来计数超时的指令缓冲&等待超时的计数 at_clear_all 在模块开机的时候可能会有很多乱数据 可以在初始化完毕后使用此函数清除所有缓冲级 释放所有内存 at_processing处理AT的应答超时的指令(做删除释放内存的动作),还有处理等待的AT指令 此函数一定要不断循环处理 可以加入到定时器 目前我实验是在UCOS上的 所以直接创建个任务来执行此函数 当程序在等待某个AT指令的时候此函数会寻找接收的缓冲级是否有等待的AT指令 at_cmd_cb_hand回调处理函数 如果接收缓冲级出现某个已经注册的指令则回调注册时所填写的函数地址 at_send_cmd 发送一个AT指令 可以用跟printf一样使用 %d等等 at_send_data 发送数据的时候所使用 需要填写长度 at_cmd_ignore_register 注册一个被忽略的AT指令 带入参数 *s (例如填写一个"SEND OK" 则模块应答的此条指令直接被忽略 释放内存 被忽略之前会检查此缓冲级会不会带有别的AT指令需要回调的) at_cmd_ignore_cancel 取消被忽略的指令 则取消已经注册的被忽略的AT指令 at_cmd_cb_register AT指令的回调注册 例如参数填写"+IPD",函数名a 则出现+IPD的时候回调a函数 a函数有类型 在at.h文件里面有 at_cmd_cb_cancel注销回调你懂得 at_wait_cmd 等待一个AT指令集或者超时则立刻返回 等待途中会不断调用OS的延迟程序 让系统能有时间去执行其他任务 使用方法例如{ at_send_cmd("AT+UART=%u,%u,%u,%u,%u\r\n",baudrate,databit,stopbit,parity,flow_control); return (esp_error)at_wait_cmd("\r\nOK\r\n",2000,NULL); } at_error at_wait2_cmd(char *s,char *s2,u16 timeout,u8 *index) 此函数是等待两个AT指令集 如果出现一个则立刻返回 返回值h文件有介绍 AT_DONE则出现此条指令 index参数则提取应答的缓冲首地址 使用at_buf_get函数获取首地址 使用完后要调用at_free_buf来清除并释放这个缓冲级 at_buf_len_get查询此应答的缓冲级长度 如果在index填写NULL则不需要缓冲级首地址 直接清除释放缓冲级

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盐池虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值