赞
踩
AWS IOT 基于是的mqtt协议,关于关于mqtt协议更详细内容可参见:
https://blog.csdn.net/m0_37263637/article/details/81087831
关于设备接入及创建请参考:
本文主要介绍如何通过mqtt协议进行点对点模式进行通信,并熟悉相关概念及node SDK。
关于设备的控制,可以采用直接发布控制命令的方式。但AWS更为推荐使用shadow(阴影)进行控制,关于这部分会后面文章中介绍:
MQTT是基于二进制消息的发布/订阅编程模式的消息协议。
运用MQTT协议,设备可以很方便地连接到物联网云服务,管理设备并处理数据,最后应用到各种业务场景。
这里我们重点关注MQTT中主题(topic)的概念。MQTT是通过主题对消息进行分类的,本质上就是一个UTF-8的字符串。设备直接发布/订阅相同主题的消息即可实现通信,详见可参考1.3中图。
AWS IOT提供了一个支持mqtt协议具有特定功能的server作为设备网关。并具有以下特性:
mqtt通信示意图:
(1) 通信两端均接入同一个IOT网络
(2) 订阅者订阅某主题消息
(3) 发布者发布该主题消息
(4) 订阅者收到消息
下面的代码功能是,发布者和订阅者均接入同一IOT网络, 发布者发布topic的消息CMD_test_device_tokyo,并订阅topic为RES_test_device_tokyo的消息。订阅端订阅该消息,收到发布端push后。订阅端发布RES_test_device_tokyo消息将想要返回的内容发回给发布端。
aws-iot-device-sdk API 文档:https://github.com/aws/aws-iot-device-sdk-js
C SDK及C++ SDK 请参考本博客其他文章
过程图为:
var awsIot = require('aws-iot-device-sdk'); var device = awsIot.device({ keyPath: `xxxxxx-private.pem.key`,//device 私匙 caPath: 'root-CA.crt',//CA证书 certPath: `xxxxxx-certificate.pem.crt`,//证书 host: `xxxxxxxxx.iot.ap-northeast-1.amazonaws.com`//IOT 终端节点 }); var thingName = 'test_device_tokyo';// aws 后台创建的事物名称 device.on('connect', function(err) {// // if(err) console.error(err); console.log('connect'); device.subscribe(`CMD_${thingName}`);//设备接入iot网络后订阅CMD_事物名的消息 }); device.on('message', function(topic, payload) {//收到消息触发的回调 console.log('message', topic, payload.toString()); if(topic.substring(0, 3) === "CMD"){ topic = topic.replace("CMD_","RES_") console.info(topic); device.publish(topic, `device say hello to server ${thingName}`);//push消息回发布者 } });
var awsIot = require('aws-iot-device-sdk'); const EventEmitter = require('events'); class MyEmitter extends EventEmitter {}; const myEmitter = new MyEmitter();//使用node event接收到返回值后触发send函数返回,表示发送成功 var thingName = "test_device_tokyo";//我们均为test_device_tokyo 作为消息topic,仅作为消息名称,并不是真正的事物名 var device = awsIot.device({//可以通过sdk直接连入aws iot server protocol:'wss', accessKeyId:"xxxxx", secretKey:"xxxxxx", host: `xxxxxxxxxxx.iot.us-east-1.amazonaws.com` }); device.on('connect', function() { console.log('Connect AWS IOT server Success'); Send(thingName, "hello devices", function() {//连接成功我们尝试向订阅者发送消息 console.info("test ok") }); }); device.on('message', function(topic, payload) { console.log('message', topic, payload.toString()); if(topic.substring(0, 3) === "RES"){//当收到订阅者 返回的topic为RES_test_device_tokyo的消息时,通过event通知send函数 myEmitter.emit(topic, payload); }else{ //dealwith code } }); var Send = function(thingName, data, callback) { device.publish(`CMD_${thingName}`, data);//push topic为CMD_test_device_tokyo的消息 device.subscribe(`RES_${thingName}`); //subscribe topic为RES_test_device_tokyo的消息 myEmitter.once(`RES_${thingName}`, (payload) => { console.info(payload.toString()); return callback(null, payload.toString()); }); };
发布端打印:
Connect AWS IOT server Success
message RES_test_device_tokyo device say hello to server test_device_tokyo
device say hello to server test_device_tokyo
test ok
订阅端打印
connect
message CMD_test_device_tokyo hello devices
RES_test_device_tokyo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。