ESP8266学习笔记(五)
上次讲了基础的网络开发,已经可以满足基本的调试需求了,但是当我们真正做项目时,我们是不可能把自己的电脑作为一个实时通讯的服务器的,换句话说,我们需要一个远程的云服务器为我们通讯作平台。下面就来讲这一部分内容。
云服务器的概念
云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。它像是一个人的大脑,相当于普通电脑的CPU,里面的资源都是有限的。它可以运行liunx等操作系统,满足你通讯所需的要求,你的各种东西都可以自己定义,但是购买一个完整的云服务器的价格还是比较昂贵的(土豪忽略)。所以对于我们这种只需要云服务器的一小部分功能的开发者,免费云平台就是我们的更佳选择。
云平台的概念和选择
现在由于物联网的发展,各大公司为了鼓励开发者的开发,推出了各种免费的云服务,比较常见的云平台有YeeLink,Gizwits(机智云),OneNet(中国移动物联网开放平台),Hekr(氦氪云)等。这些平台不会提供完整的云服务器供你开发,但是它们会给你提供有限的通讯和存储数据的功能,你可以使用它的API进行快速开发,或者可以用html方式进行数据存取操作。
由于网上的数据实在太杂太乱,笔者作为一个小白,对于很多个云平台的sdk都进行了尝试,例如Gizwits,OneNet等。这些平台大都有兼容ESP8266的SDK,而且这些SDK都大同小异,无非就是将一个将底层通讯协议包装好的demo修改一下device name和token等参数,然后下载进ESP8266中就可以实现基本通讯功能了。当然这期间发生过各种心酸的事,针对一些调试时出现的bug,我还和几个云平台的工程师进行了讨论,然而有一些问题至今无果。经过前前后后花了1个多星期的时间,我最终找到了一种很少人采用但是我觉得很好的办法。我最终选择的平台是Hekr(氦氪云)。
利用Hekr的开发
-
用户注册
由于我前面的教程中使用的都是官方的SDK,所以我也干脆不采用Hekr的SDK,直接使用它非常底层的原始云端接口,不依于SDK,就能使用氦氪云服务。
首先,我们需要访问http://app.hekr.me/demo/API/demo.html
成功访问后会出现如下界面
此时,我们点击C1-1 LOGIN,跳出这个界面
image.png
你可以选择你喜欢的方式进行登陆,然后依次点击C1 CSRF->C1-2 GET Accesskey,你可以在右边的紫色区域里提取下列元素
image.png
其中User Token是app端登录时需要用到的Token,而Device Token是ESP8266登录时需要用到的Token,每个账号都不一样,需要把它记录保存下来,方便以后调用。
-
设备登录
氦氪云的tcp服务地址为 device.hekr.me:9999
(我将device.hekr.me进行解析后的IP地址为:123.59.77.157,大家可以直接使用)
设备登录的API为
(login <tid> <channel> <accessKey> <type>)\n
参数说明
tid : 终端Id,字符串(注意这里当type是USER的时候,tid是对应app的终端tid,apptid绝对不能与设备tid一样)
channel :通信频道,字符串,可选["code"]
accessKey :授权Key,字符串,为此前在紫色区域提取的Token
type :终端类型,字符串,可选["DEVICE", "USER"],分别对应设备终端、用户终端
API调用示例
(login "ESP8266" "code" "xxx" "DEVICE")\n
(login "app" "code" "xxx" "USER")\n
-
服务端对设备端透传
API格式
(@devcall <tid> (uartdata <ud>) <callback>)\n
参数说明
tid :被操作设备终端Id,字符串,API使用说明中指定了该值的设定范围
ud :透传数据
callback :回调代码,SEXP,这个参数不为#nil时,表示希望被控制设备终端能在code执行完毕时,将code执行结果作为callback的参数,再次调用APIucastMsg发送到云端,这个过程是强制的;当这个参数为#nil时,则没有上面过程
API调用示例
(@devcall "ESP8266" (uartdata "123") (lambda x x))\n
-
设备对服务器透传
API格式
(ucastMsg <tid> <msg>)\n
参数说明
tid :终端Id,字符串,API使用说明中指定了该值的设定范围
msg :消息,字符串/数值/SEXP
API调用示例
(ucastMsg "app" 20150904)\n
(ucastMsg "app" "hello world")\n
(ucastMsg "app" ((lambda x x) 100))\n
-
注意事项
这里的设备tid是可以根据自己的喜好命名的,而且一个设备token能对应多个设备tid,但是在进行数据透传时,要记好透传双方所对应的tid,以免出现数据传输对象出错的情况。
总结
今天讲了关于云平台的介绍和选择的内容,并提供给大家一种我认为很简单又实用的平台通讯方法,希望对大家有所帮助。
关于ESP8266开发的后续事宜,我将在下次继续为大家介绍。