2019世界开始进入万物互联的5G时代,今天把两年多前写的一个物联网开发笔记分享出来给大家。觉得有用的可以收藏认真看看。
IoT
资料准备ESP8266 SDK 入门指南ESP8266 Non-OS SDK AT 指令集ESP8266 Non-OS SDK IoT_Demo 指南ESP8266_NONOS_SDK_V2.0.0
硬件准备:ESP8266 Wifi模块主控制MCU(与ESP8266 Wifi模块通过Uart连接,也可以不用主控MCU,直接用ESP8266的SDK进行二次开发)云平台:iot.espressif.cn如果有自己的云平台也可以,但需要根据云平台的协议进行数据通讯下面将做一个网络温度计,每隔30秒把温度数据传送至云平台,同时云平台可以通过RPC请求把消息发送至设备,设备接收到云平台发来的RPC请求消息后把消息显示在LCD上并且回应指定消息给云平台ESP8266Wifi模块配置编译ESP8266 NONOS SDK V2.0.0,这次测试使用AT指令进行开发,把SDK中AT指令例程编译好下载到ESP8266 Wifi模块中,如果你手上的ESP8266Wifi模块已经设置好,可以跳过这一步了。请先仔细阅读ESP8266 Non-OS SDK IoT_Demo 指南 和 ESP8266 Non-OS SDK AT 指令集 会教你怎么使用、修改、编译、下载SDK到ESP8266 Wifi模块,同时可以增加自己的AT 指令或者基于SDK进行二次开发。使用USB转Uart线与ESP8266 Wifi模块连接,使用串口调试助手发送AT指令给ESP8266测试Wifi模块是否正常工作。请先仔细阅读 ESP8266 Non-OS SDK AT 指令集云平台设置1、在云平台iot.espressif.cn注册一个帐号,同时仔细阅读怎么使用,因为使用这个云平台,所以必须知道它的API怎么使用。
a、在云平台上创建一个my-temperature公开设备,产品名称定为Temperature,产品类型选择为温度计
b、创建一个temperature一维数据模型
创建一个temperature一维数据模型
c、找到密钥Master Key,这是设备与云平台进行认证的代码
密钥Master Key
设备开发下面是思路和过程,至于软件怎么写,怎么实现就要看自己了
说明:
a、设备通过TCP Socket与云平台进行连接通讯, ESP8266的所有AT指令及数据包都是以换行符和回车符\r\n结束的,发送"AT+CWMODE=3",其实发送的是"AT+CWMODE=3\r\n"
b、云平台的域名为:iot.espressif.cn 端口为:8000
c、发送给云平台的数据包为Json 格式的字符串,同时云平台发送的数据包也是Json格式的字符串
使用下面的AT 指令把ESP8266模块设为softAP+station模式, AT+CWMODE=3
通过下面AT指令让模块通过Wifi连网,SSID和Password按实际连接的Wifi设置 AT+CWJAP="SSID","Password"
通过下面AT指令,查询连网状态: AT+CIPSTATUS
如果ESP8266回应已经建立连接并取得IP就可以连接云平台了,通过下面AT指令与云平台建立TCP socket连接,iot.espressif.cn为云服务器域名,也可以用IP,8000为端口 AT+CIPSTART="TCP","iot.espressif.cn",8000
再次用AT+CIPSTATUS查询网络状态,如ESP8266回应已经建立TCP连接,就可以向云服务器发数据包了,发送给云平台的数据包为Json 格式的字符串,同时云平台发来的信息也是Json格式的字符串。通过下面指令,设为普通传输模式 AT+CIPMODE=0
通过下面指令,向云服务器发送指定长度的数据包, length为准备发送数据的长度 AT+CIPSEND=length
等ESP8266返回 ">",就可以开始发送数据包了
设备第一次连接云平台必须先激活,发送下面的数据包到云平台即可激活设备,其中Master_Key是在云平台上创建设备的Master Key,设备只需要激活一次,激活成功后,以后无需再次发送此数据包,至于为么发送这样的数据包,请仔细阅读云平台的API {"path": "/v1/device/activate/", "method": "POST", "meta": {"Authorization": "Master_Key"}, "body": {"encrypt_method": "PLAIN"}}
首先计算数据包的长度(记得包括\r\n),如数据包长度为129,发送AT 指令"AT+CIPSEND=129"给ESP8266,待ESP8266返回 ">"后就可以接着发送数据包了
激活成功,服务器会回应status为200的数据包:
{"status": 200,...................................................................}
激活成功后,设备每次连接云平台都需要进行认证,发送下面数据包到云平台进行认证,同样在发送数包前,先要计算数据包的长度,然后使用AT+CIPSEND=length指令告知ES8266将要发送的数据包的长度 {"path": "/v1/device/identify/", "method": "POST", "meta": {"Authorization": "token Master_Key "}}
认证成功后,服务器回应status为200的数据包,数据包内包含了时间,可以把数据包的时间设为设备的时间哦,这样设备就可以自动获得时间了。
{"datetime": "2017-03-17 15:39:15…………………………………………."status": 200}
连接云平台并且认证成功后,设备每隔30秒把温度数据按下面格式Post 给云服务器即可,下面的23.6就是温度数据,每次Post记得更新哦,temperature为在云服务器创建的数据模型,x为第一维数据,如果建立多维的就会是y、z等 {"path": "/v1/datastreams/temperature/datapoint/", "method": "POST", "body": {"datapoint": {"x": 23.6}}, "meta": {"Authorization": "token Master_Key "}}
温度数据
云端收到正确的数据包并处理成功后会返回status为200的数据包给设备:
{"status": 200,………………………………………..}
反向控制,在云端,可以发送RPC请求给设备,比如发一个action=go的RPC请求给设备
PRC请求
云端发送RPC请求后,ESP8266会收到下面的数据包,加粗部份为Owner Key {"deliver_to_device": true, "get": {"action": "go"}, "meta": {"Authorization": "token dcf1e294c36a61f1f9e55ad5bb0ab9932b3f2c43", "Time-Zone": "PRC"}, "method": "GET", "nonce": 823933285, "path": "/v1/device/rpc/"}
设备与云服务器保持连接才能收到云端发来的RPC请求,这次做的温度计每隔30 秒Post一次数据给服务器的,所以会一直与服务器保持心跳,也可以用每隔50 秒Ping服务器一次的方法,让设备与服务器保持心跳。可以使用下面数据包进行Ping服务器。 {"path": "/v1/ping/", "method": "POST", "meta": {"Authorization": "token Master_Key"}}
PING服务器成功后会返回status为200的数据包给ESP8266
{"status": 200, "message": "ping success", "datetime": "2017-03-17 09:32:28", "nonce": 977346588}
云端发出action=go的RPC请求后,ESP8266会收到下面的数据包,其中nonce的随机生成的 {"deliver_to_device": true, "get": {"action": "go"}, "meta": {"Authorization": "token dcf1e294c36a61f1f9e55ad5bb0ab9932b3f2c43", "Time-Zone": "PRC"}, "method": "GET", "nonce": 823933285, "path": "/v1/device/rpc/"}
收到指令
ESP8266收到云端的RPC请求后,需要回应服务器status为200的数据包,其中nonce必须与收到的nonce一样,服务器才认可 {"status": 200, "nonce": 823933285, "deliver_to_device": true}
PRC请求
手机上的App可以用请求,这样就可以随时随地控制你的设备了。当然也可以自己搭建一个云平台,这样就可以按照自己的需求开发物联网设备了一个简单的物联网设备就开发完成了,是不是很有趣呢?大家可以关注我的头条号@电子产品设计方案 ,我会定时分享经验和方案哦,谢谢大家的点赞和关注。