对于MCU,无线控制可以使用WiFi,蓝牙,射频,红外甚至声控等,如果需要实现远程的控制,就需要设备联网,物联网需要借助云平台,云平台实现了这个功能:接收联网设备的数据,或者将数据下发到联网的设备中,如果我们有多个设备,那么借助云平台,就可以达到远程控制的效果。目前提供这一平台的有阿里云,涂鸦,OneNET 等等,本文以 OneNET 作为示例。
本文使用刷入 OneNET 提供的 ESP8266 固件的方法,你甚至不需要了解MQTT协议,既可实现远程控制。
本文其实使用 PC+ESP8266 来模拟设备接入云,如果需要 MCU 接入,只需要处理串口处理AT指令和发送AT指令即可。
硬件清单
除了开发必要的个人计算机,只需要:
本文使用的 esp8266 模块型号为:ESP-01s,它的Flash 大小为 8M ,这是一个重要的参数,它在刷新固件时需要使用。
本文使用 CH340 模块,由于PC端只有USB接口,而esp8266模块数据是通过串口(uart)收发的,所以需要使用 USB 转串口模块,你可以使用cp2102 或其它模块,注意需要安装驱动,如果模块接入计算机以后未自动安装驱动,或者提示安装失败等情况,可自行在网上下载安装,注意根据具体的系统特性,选择对应的驱动。
PC 端需要安装一个串口助手,用来发送串口数据
为了快速开发,本文刷入了 OneNET 论坛提供的 固件(MQTT协议),使可通过AT指令的方式来连接 OneNET
ESP-01s | CH340 |
---|---|
RX | TX |
TX | RX |
GND | GND |
注意模块2个模块需要共地,可将GND连接一起
硬件连接以后,需要确保AT指令能正常使用:
使用串口助手打开串口:
每一次接入,串口号都可能不同,本次为COM24,串口号一般是计算机分配的,你可以通过拔插模块,变动的串口号即是该模块的串口。
发送AT测试指令
一般的,模块的波特率为115200,停止位1,数据位8,无奇偶校验位,这些参数需要选择正确才可以通讯,参数确保无误,发送“AT”字符串,注意需要勾选发送新行,作为结束标志,若模块返回OK,则说明工作正常,可进行连接WIFi,发射热点等操作、
模式的 AT 指令只有一些基本的功能,若要连接 OneNET,需要实现针对OneNET 平台的功能具体编程,包括数据编码(token)生成,身份验证,还需要了解MQTT协议(或是其它)的编码格式等等,但若选择 OneNET 提供的固件,这些细节则不需要我们实现,只需要几个简单的AT指令即可。
压缩包中的子文件固件下的4个bin文件,就是需要下载到 esp8266 的固件。
双击 flash_download_tool_v3.8.5.exe 打开固件烧写工具:
选择 [Developer Mode]:
再选择 [ESP8266 DownloadTool]
注意选择正确的FLASH SIZE,SPI MODE 选择 QIO,注意,IO0接高(悬空测出电压为2.8V)时是FLASH运行模式,需要拉低电平,才可以进入串口下载模式,进行固件的更新,所以,此处将IO0接GND,然后,勾选这个4文件,重新上电,检测到ESP8266模块以后,点击左下角[START]即可烧录:
flash_download_tool 若一直处于 等待上电检测 状态中,建议使用短杜板线,并检查IO0的电平是否为低,同时,也要保证串口模块工作正常。
烧录成功后,就完成了硬件的准备工作。可以通过发送AT指令:AT+CIPSTATUS
来测模块是否正常,该固件测试并不响应AT
指令:
由于本文此前已经配置好WiFi,所以返回5
表示接入成功并已获取到IP,第一次使用应该返回0
;
平台界面会不定时的更新,所以操作可能有所不同,这一步主要是创建一个产品,记录其一些连接需要的关键信息,若界面有更新,请查看平台的操作文档。
首先注册并登录 中移 OneNET 平台,在开发者中心
中,点击全部产品,选择 多协议截接入:
选择MQTT协议,这是必须的,本文固件支持该协议:
填写基本的信息,这里创建了一个 MQTT 产品:
接着创建第一个设备,产品是设备的总称,一个产品可以拥有多个设备:
鉴权信息是自定义的,产品连接时候需要使用,本文用创建设备的日期+时间作为鉴权信息:
点击添加,就可以完成新增产品的操作,这部分操作可以由下位机完成:
在本文使用的固件中,连接云平台需要使用到的信息有,产品ID,设备ID和鉴权信息,本文创建的Lamp-01信息如下:
其中,产品ID在产品概述中可以获取:
设备ID和鉴权信息在设备详情中可以获取:
至此完成了平台域的准备工作。
首先需要将 ESP8266 模块连接上 WiFi,根据估计的说明文档,接入AP的AT指令为:
AT+CWJAP=ssid,password
AT+CWJAP=TP-LINK_4252,12345678
根据说明文档,设备登陆的AT指令为:
AT+IOTCFG=devid,proid,auth_info
AT+IOTCFG=614503521,364161,202007311919
可以在平台建立一个数据,数据类似程序中的一个变量,用来存数值,也可以使用固件的上报功能,若这个数据不存在,会自动新建一个,根据手册:
- 发送数据
指令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
查看串口返回:
此时可以发现,设备数据流(设备列表->数据流)中新增一个数据:
本文使用平台提供的 APP 配置应用,来实现数据下传:
创建 APP:
进入APP图形化设置界面:
编辑应用:
将 旋钮 拖拽到设计区中:
点击旋钮,将该控件与数据 brightness 关联,设置完成后点击预览,运行APP:
在网页中,可以通过点击控件表盘,来向设备发送数据,下图分别发送了81,61,19
至此完成了 MQTT 协议中,数据的发送与接收,你可以下载 设备云(OneNET配套APP) APP,这个APP就可以在手机端被使用:
在手机端拖动表盘的值,串口助手同样可以获取数据: