这是我的物联网开发系列文章,将介绍如何从嵌入式开发、云平台开发、Android端开发来实现一个简单的物联网应用开发,体验物联网全栈开发的过程,积累开发的经验。
本篇文章为系列文章第二篇,主要介绍阿里云物联网平台的配置,以及使用串口助手向ESP-12S发送AT指令进行初步的连接云端测试。
系列文章第一篇:物联网介绍和系统初步设计
注意:由于云平台的更新换代可能比较快,配置云平台相关的具体操作请以阿里云的官方通知以及开发文档为准。点击这里访问阿里云物联网平台开发文档
使用手机号、支付宝、淘宝、钉钉等都可以注册阿里云的账号。注册之后请到控制台或者主页找到阿里云物联网平台并开通服务,开通个人免费服务即可获得公共实例。公共实例有免费的消息量、设备量等,这些对于我们这些只做个小实验的是非常足够的了。
按照下面图片的流程,点击 产品→创建产品。
在创建产品页面中输入产品名称,选择“自定义品类”,节点类型为“直连设备”,其他的选项不用修改,使用默认的就行。
创建完产品之后,点击 前往添加。
在对话框中输入DeviceName,这是用来识别设备的三元组信息之一,所以要尽量简洁一点。然后点击 确定,就完成了创建产品和设备的操作。
物模型是阿里云物联网平台中非常重要的内容,设备端和云端的互动大多都是采用物模型来实现的。关于物模型的概念介绍可以查看阿里云的开发文档。
点击产品页面,进入产品的功能定义界面,点击 编辑草稿。
进入编辑草稿页面之后,点击 添加自定义功能。在这里我只是示例性地添加一个温度属性,具体整个物模型详见本节后面的截图。在对话框中填写功能名称、标识符、数据类型等内容,注意标识符也要简洁容易记,因为通信中采用的就是标识符来识别对应的属性、服务或事件。
接着添加一个故障事件,用于设备上报故障给云端。
当我们完成草稿编辑之后,就可以发布物模型上线使用了。点击左下角的发布,然后填写版本号和备注,在“确认已查看当前版本与线上版本的比对结果”打勾,然后就可以点击确定发布了。
至此,云端的配置就基本完成了。物模型的配置在开发的时候也可以根据情况进行版本迭代。
由于安信可官方旗舰店的ESP-12S模组和转接板是没有焊接排针的,所以首先要把排针和模组焊接到转接板上面。以下图片就是焊接之后的样子,我的焊接技术不怎么样,所以就不多介绍了。
接下来就是硬件的接线了。由于只是测试,所以没有将ESP-12S接到MCU上面,而是接到USB转TTL上连接电脑串口。不过连到MCU和连到USB转TTL是一样的电路连线。
以下图片就是ESP-12S的典型连线图(图片来自安信可的ESP8266的入门指导),其中RST和EN(CH_PD)那里的电阻是可以不用接入的。按照典型接线图接线,模组是工作在运行模式,也就是我们平常要使用AT指令进行通信的模式。但是我们要将MQTT的AT指令固件烧入其中,需要进入下载模式。进入下载模式只需要在上面的典型接线图的基础上,将GPIO0也接地就行。
由于模组上面有多个引脚要接地和VCC,而USB转TTL的VCC和GND都只有一个,所以中间使用了一个面包板来拓展了一下,以下图片就是接线之后大概的样子。如果有小白不懂面包板的使用,可以看这篇博客。
刷写固件需要使用到我们在第一篇文章中提到的安信可串口调试助手、ESP Flash下载工具以及MQTT的指令固件文件。
MQTT的AT指令固件文件下载:链接
在刷写之前,需要检查是否成功进入下载模式,我们可以在串口助手中调整波特率为74880并打开串口,然后将模组的VCC拔掉重新接上。模组重新上电之后会返回系统的上电信息(如下图)。
系统的上电信息的一些参数解释如下,我们可以通过boot mode的第一个参数来看是否成功进入下载模式(以上图片中的状态是运行模式)。
确认已经成功进入下载模式之后,就不要动硬件的连线了。然后关闭串口调试助手。注意:电脑的一个串口不能同时被多个软件占用,后续我们的Flash下载工具要使用该串口,所以这里必须关闭串口调试助手。
打开ESP Flash下载工具flash_download_tool_v3.8.5.exe,选择developer mode,接着选择esp8266 download tool。
首先将下载的固件文件(.bin文件)路径添加进去,然后在@的后面填上0x00。
其他参数的选择如下表:
参数 | 值 |
---|---|
CrystalFreq | 26M |
SPI SPEED | 40MHz |
SPI MODE | DOUT |
FLASH SIZE | 8Mbit |
最后在左下角选择好串口和波特率,点击START就可以了。
如果点击下载之后显示“等待上电同步”,就把模组的VCC拔掉重新接上使其重新上电就可以了。在下载过程中,模组上面的蓝色LED会不断的闪。
等到显示“完成”的时候,就说明固件已经下载完成了。这个时候可以将模组的GPIO0接地的线拔掉了,使模组进入正常的运行状态。
设备连接阿里云是采用MQTT的方式通信的。阿里云提供了SDK开发、MQTT.fx、MQTT-TCP等多种方式实现MQTT通信,我们这里采用的是MQTT-TCP通信的方式。
关于阿里云物联网平台MQTT-TCP连接通信的开发文档
在开发文档中,有介绍了连接MQTT所需要的clientId、username等参数的计算方式,可以根据文档去一些网页版的hmac计算器计算器。当然,这样还是不太方便,这里比较推荐使用以下的两种方式:
最后就可以来进行连接阿里云的测试了。具体的AT指令的信息可以查看MQTT的AT指令手册。
MQTT的AT指令手册:链接
AT
查看ESP模组是否正常,或者发送AT+TST
使其重启一下;AT+CWMODE=1
,将模组调为STA模式;AT+CWJAP="WiFi名字","WiFi密码"
,使模组连接WiFi接入网络,模组回复WIFI CONNECTED和WIFI GOT IP就是成功;AT+MQTTUSERCFG=0,1,"填写clientID","填写UserName","填写密码",0,0,""
,设置MQTT客户端的信息;AT+MQTTCONN=0,"连接域名",1883,0
,连接阿里云MQTT服务器,连接成功会返回+MQTTCONNECTED:0,1,"连接域名","1883","",0。
这个时候就可以在阿里云上面看到设备已经上线了,接着可以进行通信测试。在这里,我选择使用NTP服务进行通信测试,因为这个功能我们后续要开发,而且NTP时钟同步的端云通信比较简单,只需要分别订阅和发布一个topic就可以了。不了解NTP服务的朋友可以查看以下的开发文档。
关于阿里云物联网平台NTP服务的开发文档
AT+MQTTSUB=0,"/ext/ntp/产品key/设备名称/response",0
,订阅云端的响应Topic;AT+MQTTPUB=0,"/ext/ntp/产品key/设备名称/request","{\"deviceSendTime\":\"1571724098000\"}",0,0
,向云端发送NTP请求,其中的deviceSendTime是设备本地的毫秒时间戳(这里的时间戳只是随便弄的)。成功的话云端会回复+MQTTSUBRECV:0,"/ext/ntp/产品key/设备名称/response",100,{"deviceSendTime":"1571724098000","serverSendTime":"1596080122364","serverRecvTime":"1596080122364"}