【物联网(IoT)开发】物联网及NodeRed 技术讲解及动手实践活动分享
微wx笑 2020-04-27【物联网】 9 0关键字: 物联网 IoT
在上篇文章“IBM Bluemix 中文公众版初体验”中提到昨天又参加了“物联网及NodeRed 技术讲解及动手实践 ”活动,这里把活动学习的内容分享给大家。通过昨天的学习,对MQTT有了
在上篇文章“IBM Bluemix 中文公众版初体验”中提到昨天又参加了“物联网及NodeRed 技术讲解及动手实践 ”活动,这里把活动学习的内容分享给大家。通过昨天的学习,对MQTT有了更深的了解,学会如何使用Nodejs将数据发送到物联网平台上,学会如何使用NodeRed像拼积木一样查看传上来的设备数据。为大家做分享的是IBMGCG 的技术“旗帜”詹海萍总经理。早些年,詹总主管大中华区的软件技术团队很多年,后来又去国外实验室10多年,有雄厚的技术背景和丰富的应用经验。
需要了解或学习的技术
1、IBM Bluemix 账号
中国版: https://console.chinabluemix.net/
国际版:https://console.ng.bluemix.net/
2、物联网(IoT)
我有一些相关的文章大家可以了解一下:http://blog.csdn.net/testcs_dn/article/category/6420588
3、Node.js
关于环境的配置请参考:http://blog.csdn.net/testcs_dn/article/category/6072291
4、MQTT
MQTT 已经快20年了,可靠、不需要那么长的Header,省电省带宽。
相关资料下载:MQTT协议说明书
5、Node-RED
Node-RED是一个独立应用,适合做可视化的流程控制,只要有Node环境就可以了。
Github:https://github.com/node-red/node-red
相关资料下载:由于版权原因CSDN停止提供下载,还好有老本,已经合并转存到百度网盘,提取码:ifj8
本实例源码下载:http://download.csdn.net/detail/testcs_dn/9701705
创建Node-RED应用程序
基于样板创建就可以了。
输入应用程序名称,其它保持默认,点击“创建”按钮。
稍等一会你将看到下面的页面,显示您的应用程序正在运行,点击查看应用程序
点击“Go to your Node-RED flow editor”打开一个在线的编辑器
会看到下面的界面:
这一步就到这里就可以了,后面再来介绍它的使用。
创建 Internet of Things Platform 服务
点击目录,然后在左侧选择Internet of Things,点击 Internet of Things Platform 服务
服务名称可以保持默认的,你也可以输入一个
拖动滚动条到下面,套餐选择免费,然后点击创建
创建完成后,点击启动仪表板
鼠标移动到左侧菜单,选择设备
点击添加设备按钮
首次应用需要先创建设备类型
输入设备名称,然后点击下一步
现在很多使用默认项就可以,以后管理自己真实的设备时,最好都填上。
下一步
创建
设备类型添加完成之后,选择设备类型,下一步
输入设备标识,最好英文半角字符,不要超过23个字符,下一步
保持默认,下一步
保持默认,下一步
点击添加按钮
创建完成之后会看到下图的信息
注意:一定要将红框中的信息复制出来保存到其它位置,一会儿还要用到,关闭对话框之后就找不到了。
点击右上角的关闭按钮
选择左侧的应用程序菜单,然后点击右侧的生成API密钥
点击生成按钮,同样要把红框中的信息保存下来,一会儿要用到。
编程:发布和订阅设备数据
下载本示例程序包:[源码]物联网及NodeRed 技术讲解及动手实践活动分享
1、使用Nodejs将数据发送到物联网平台上,程序文件:mqtt-device-pub-china.js
var mqtt = require('mqtt');// 这里是非常重要的,填写错误了就不通;0ct4vz是组织标识var client = mqtt.connect("tcp://" + "0ct4vz" + ".messaging.internetofthings.chinabluemix.net:1883",{// d 代表设备,0ct4vz组织标识,设备类型,设备标识"clientId" : "d:0ct4vz:type1:devcie1", //dev1 must be less than 23 characters"keepalive" : 30,"username" : "use-token-auth", // 这里是配置认证的方式,而不是通常认为的用户名"password" : "wf8fP(pld7UlcQ(9Q*" // 设备 devcie1 的认证令牌});client.on('connect', function() {console.log('MQTT mqtt dev client connected to IBM IoT Cloud. Publish side');});client.on('error', function(err) {console.log('client error' + err);process.exit(1);});client.on('close', function() {console.log('client closed');process.exit(1);});var stdin = process.openStdin();console.log("Type some text and press <ENTER>:\t");stdin.on('data', function(inputStr) {//console.log("Your input: " + inputStr);if (inputStr.toString() == "end") { process.exit(1)};// iot-2/evt/事件标识/数据格式/数据类型client.publish('iot-2/evt/XY/fmt/string', inputStr, function() {console.log("push " + inputStr+ " to IOT");});});
这里用到的就是创建设备时保存下来的信息,需要修改的位置都添加了注释。
2、使用Nodejs订阅发送到物联网平台上的数据,程序文件:mqtt-application-sub-china.js
var mqtt = require('mqtt');// 组织标识var client = mqtt.connect("tcp://" + "0ct4vz" + ".messaging.internetofthings.chinabluemix.net:1883",{// a代表应用,组织标识,test 是应用名称,自己随便起"clientId" : "a:0ct4vz:test","keepalive" : 30,"username" : "a-0ct4vz-igsow2ncjn", // API 密钥"password" : "3c&1_i)VgPCnolB(hx" // 认证令牌});client.on('connect', function() {console.log('MQTT app client connected to IBM IoT Cloud. Subscribe side');// iot-2/type/设备类型/id/设备标识/evt/事件标识/数据格式/数据类型client.subscribe('iot-2/type/type1/id/devcie1/evt/XY/fmt/string');});client.on('error', function(err) {console.log('client error' + err);process.exit(1);});client.on('close', function() {console.log('client closed');process.exit(1);});client.on('message', function(topic, message) {console.log("message received: " + message);//console.log(JSON.parse(message)); });
这个文件中用到的就是生成 API 密钥时保存的信息,组织标识要保持一致。
3、关于两个文件中的“clientId”说明:
我们注意到一个是以“a:”开头代表APP(应用),一个是以“d:”开头代表Device(设备);
为什么这样设计呢?
因为只有应用可以订阅,应用需要等待就是Looping,耗电较大,通常运行在服务器端;
设备要接收指令,不需要等什么;所以Command的只能给设备,不能给应用;
4、运行发布和订阅端测试
两端的启动顺序不分先后,启动后在发布端输入信息,在订阅端就会看到了。
注意:这个数据是经过IBM Bluemix 上的物联网平台的。
5、原理示意图
使用NodeRed,拼积木
一开始我们就创建了Node-RED应用程序,打开了一个在线的流程编辑器却没有使用,现在它被派上用场了。
1、首先,我们通过按下拖动鼠标来选中Flow1中的图形,然后按Delete键将其删除。
2、在左侧的 input 中选择 mqtt 拖动添加到 Flow 1 中,双击它
3、然后点击Server 后面的编辑按钮
4、输入Server信息,就是上面js文件中的:组织标识+.messaging.internetofthings.chinabluemix.net
例如:0ct4vz.messaging.internetofthings.chinabluemix.net
Client ID,可以和上面订阅程序文件中的一样。
5、然后选择Security标签:
这里就是你生成的API 密钥和认证令牌,然后点击Update按钮。
6、在左侧的 output 中选择 debug 拖动添加到 Flow 1 中
7、在 mqtt 的右侧按下鼠标拖动到 debug 的左侧,这样两个组件就建立了连接,也就是 mqtt 的输出作为 debug 的输入。
然后点击 Deploy
8、注意左侧的连接状态
9、右侧切换到 debug 标签
10、再回到我们刚刚运行的发布端程序,输入信息发布吧,然后在上图的 debug 信息中就可以看到发布的信息了。
是不是很有意思呢?Node-Red的功能远不止于此。
结束语
之前一直想尝试Bluemx上的物联网和Node-Red,但限于能力一直也没搞清楚怎么用。
非常感谢詹总的分享,让我们吃着零食,喝着饮料,边听边动手实践,非常容易的就掌握了使用方法。
希望以后能多组织一些这样的活动,提供一些最佳实践;这里面有一些需要注意的地方,
如果不是有人指导,自己就要去看文档,可能会有很多弯路要走。
这样让我们大大的节省了探索的时间,直接走上捷径。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/iot/2020-04-27/412.html