1.物联网云平台
为了先树立物联网平台通信过程的意识,为之后自己编写物联网云平台提供借鉴,我们该篇教程中使用的物联网云平台是阿里云的物联网套件(现已更名物联网平台)。阿里云收费规则是每月前100万条消息数免费赠送
,所以这对于我们个人使用已绰绰有余。
如何开启阿里云物联网平台服务以及基础配置可参见产品手册。
这里我们使用的协议为MQTT,关于MQTT协议,可参见博主的另一篇科普文MQTT初探。阿里云在MQTT消息发送接收的基本流程如下:
在设备上报发布数据时,需要在阿里云开启MNS(消息中间件服务),上报的数据将暂存在消息队列中,用户需要自己去取出数据,或添加规则引擎,触发消息转发;
在控制端发布数据到设备端时,控制端不需要运行MQTT客户端,可以通过云端API请求到阿里云MQTT服务器代理,由代理将消息下发至设备端。
如果控制端在发送数据后希望得到设备端的返回消息,整个流程只需要在设备接收到消息后发布一则消息即可(阿里云已封装该topic,不需用户自己去消息队列中取设备返回的数据)。
2.实战
准备:这里设备端就是我们前几篇文章中的树莓派红外遥控系统
,控制端是我们的手机安卓客户端
,我们需要实现由安卓手机远程控制红外发射。
注意:本以为安卓客户端直接使用物联网云平台的云端API java库,直接调用就可以实现消息发布,但是too naive了,这个java库中的HttpClient
版本与安卓系统的HttpClient
版本冲突,无法运行或者编译(貌似Android Studio可以配置使用哪个库,博主使用的是eclipse就不便尝试了)。所以下文中博主将通过自己的VPS运行PHP做代理,来调用云端API。
(1)树莓派运行阿里云平台SDK
首先,我们需要对mqtt运行的示例代码进行修改,文件为:iotkit-embedded-master/sample/mqtt/mqtt-example.c
,修改两处。
订阅的主题,先在阿里云管理平台处新增主题
air_condition
;再在代码中修改主题为
"/"PRODUCT_KEY"/"DEVICE_NAME"/air_condition"
,如下:
32 /* These are pre-defined topics */
33