esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

对于MCU,无线控制可以使用WiFi,蓝牙,射频,红外甚至声控等等,如果需要实现远程的控制,我们需要设备联网,物联网需要借助云平台,云平台实现了这个功能:接收联网设备的数据,或者将数据下发到联网的设备中,如果我们有多个设备,那么借助云平台,就可以达到远程控制的效果。目前提供这一平台的有阿里云,涂鸦,OneNET 等等,本文以 oneNET 作为示例。

本文使用刷入OneNET固件的方法,你甚至不需要了解MQTT协议,既可以实现远程控制。

硬件清单
除了开发必要的个人计算机意外,只需要:

  • esp8266:esp8266 是一款带Wlan收发器的MCU,它可以通过 WiFi 连接网络
  • USB转串口模块:它将esp8266 模块 与 计算机连接,使得计算机可以发送数据给 esdp8266

一、设备域

1. 硬件

- ESP8266 模块

本文使用的 esp8266 模块型号为:ESP-01 s,它的Flash 大小为 8M ,这是一个重要的参数,它在刷新固件时需要使用。
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

- USB转串口模块

本文使用 CH340 模块,由于PC端只有USB接口,而esp8266模块数据是通过串口(uart)收发的,所以需要使用 USB 转串口模块,你可以使用cp2102 或其它模块,注意需要安装驱动,如果模块接入计算机以后未自动安装驱动,或者提示安装失败等情况,可自行在网上下载安装,注意根据具体的系统特性,选择对应的驱动。
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

2. PC端软件

- 串口助手

PC 端需要安装一个串口助手,用来发送串口数据

- esp8266 固件下载工具

为了快速开发,本文刷入了 OneNET 论坛提供的 固件(MQTT协议),使可通过AT指令的方式来连接 OneNET

3. 硬件连接

ESP-01s CH340
RX TX
TX RX
GND GND

注意模块2个模块需要共地,可将GND连接一起

4. AT 指令测试

硬件连接以后,需要确保AT指令能正常使用:

  • 使用串口助手打开串口:
    esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
    每一次接入,串口号都可能不同,本次为COM24,串口号一般是计算机分配的,你可以通过拔插模块,变动的串口号即是该模块的串口。

  • 发送AT测试指令
    一般的,模块的波特率为115200,停止位1,数据位8,无奇偶校验位,这些参数需要选择正确才可以通讯,参数确保无误,发送“AT”字符串,注意需要勾选发送新行,作为结束标志,若模块返回OK,则说明工作正常,可进行连接WIFi,发射热点等操作、

5. 下载 OneNET 固件

模式的 AT 指令只有一些基本的功能,若要连接 OneNET,需要实现针对OneNET 平台的功能具体编程,包括数据编码(token)生成,身份验证,还需要了解MQTT协议(或是其它)的编码格式等等,但若选择 OneNET 提供的固件,这些细节则不需要我们实现,只需要几个简单的AT指令即可。

压缩包中的子文件固件下的4个bin文件,就是需要下载到 esp8266 的固件。
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

- 烧录固件

双击 flash_download_tool_v3.8.5.exe 打开固件烧写工具:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
选择 [Developer Mode]:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
在选择 [ESP8266 DownloadTool]
注意选择正确的FLASH SIZE,SPI MODE 选择 QIO,注意,IO0接高(悬空测出电压为2.8V)时是FLASH运行模式,需要拉低电平,才可以进入串口下载模式,进行固件的更新,所以,此处将IO0接GND,然后,勾选这个4文件,重新上电,检测到ESP8266模块以后,点击左下角[START]即可烧录:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
flash_download_tool 似乎有时候不太稳定,会一直处于 等待上电检测 状态中,需要尝试多次,建议使用短杜板线。

烧录完成固件以后,就完成了硬件的准备工作。可以通过发送AT指令:AT+CIPSTATUS 来测模块是否正常,该固件测试并不响应 “AT” 指令:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
由于此前已经配置好WiFi,所以返回5表示接入成功并已获取到IP,第一次使用应该返回0

二、平台域

平台界面会不定时的更新,所以操作可能有所不同,这一步主要是创建一个产品,记录其一些连接需要的关键信息,若界面有更新,请查看平台的操作文档。

1. 创建一个 MQTT 协议产品

首先注册并登录 中移 OneNET 平台,在开发者中心中,点击全部产品,选择 多协议截接入:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
选择MQTT协议,这是必须的,本文固件支持该协议:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
填写基本的信息,这里创建了一个 MQTT 产品:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
接着创建第一个设备,产品是设备的总称,一个产品可以拥有多个设备:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
鉴权信息是自定义的,产品连接时候需要使用,本文用创建设备的日期+时间作为鉴权信息:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
点击添加,就可以完成新增产品的操作,这部分操作可以由下位机完成:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

2. 产品ID(PID),设备ID,鉴权信息

在本文使用的固件中,连接云平台需要使用到的信息有,产品ID,设备ID和鉴权信息,本文创建的Lamp-01信息如下:
产品ID:364161
设备ID: 614503521
鉴权信息:202007311919

其中,产品ID在产品概述中可以获取:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
设备ID和鉴权信息在设备详情中可以获取:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
至此完成了平台域的准备工作。

三、 数据的上传与下传

1. 配置 WiFi 信息

首先需要将 ESP8266 模块连接上 WiFi,根据估计的说明文档,接入AP的AT指令为:

  • AT+CWJAP=ssid,password
    若路由器名称为 TP-LINK_4252,密码为:12345678
    则在串口助手中国,输入:
  • AT+CWJAP=TP-LINK_4252,12345678
    esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
    由于本文此前已经连接过,所以上电会自动连接,并打印 WIFI CONNECTED 信息。

2. 设备上线

根据说明文档,设备登陆的AT指令为:

  • AT+IOTCFG=devid,proid,auth_info
    其中:devid 为设备DI,proid 为产品ID,auth_info为鉴权信息,本文设备登陆为:
  • AT+IOTCFG=614503521,364161,202007311919
    成功返回:
    esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
    此时刷新设备页面,可以发现设备已经在线:
    esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

3. 上传数据

可以在平台建立一个数据,数据类似程序中的一个变量,用来存数值,也可以使用固件的上报功能,若这个数据不存在,会自动新建一个,根据手册:

  1. 发送数据
    指令AT+IOTSEND=a,b,c,(d)
    a:0:数据是数值类型
    1:数据是字符串类型
    2:数据是gps
    b:数据流名
    c:数据值
    d:数据值 (只有上传GPS时才会用到)
    如发送一个数值:AT+IOTSEND=0,test,154
    发送一个字符串:AT+IOTSEND=1,str,OneNET
    发送GPS:AT+IOTSEND=2,gps,106.499122,29.628327

发送一个 brightness 数据,值为 100,指令为:
AT+IOTSEND=0,brightness,100
串口返回正常:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
此时可以发现,设备数据流(设备列表->数据流)中新增一个数据:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

3. 下传数据

本文使用平台提供的 APP 配置应用,来实现数据下传:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
创建 APP:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
进入APP图形化设置界面:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
编辑应用:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
将 旋钮 拖拽到设计区中:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
点击旋钮,将该控件与数据 brightness 关联,设置完成后点击预览,运行APP:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
在网页中,可以通过点击控件表盘,来向设备发送数据,下图分别发送了81,61,19
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
至此完成了 MQTT 协议中,数据的发送与接收,你可以下载 设备云(OneNET配套APP) APP,这个APP就可以在手机端被使用:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制
在手机端拖动表盘的值,串口助手任然可以获取数据:
esp8266 接入 OneNET平台(MQTT协议):物联网设备的远程控制

四、注意事项

  • 串口转USB模块必须是正常的,可以将模块的TX和RX短接,发送数据,看串口助手是否能收到发送的数据,这一步是验证Tx和Rx的功能,本文串口助手就Rx正常,Tx异常的情况…
  • IO0 加入正确的电平,在AT指令模式中,需要悬空或接高电平,在Flash下载模式中,需要接低电平
  • 固件有4个,需要写入正确的地址,SPI模式也要正确
  • ESP8266 模块功率较大,可能需要单独供电,在本文使用的模块中,使用串口模块供电会导致工作异常,串口无法正常供电。