未加星标

阿里云物联网平台体验(树莓派+Nodejs篇)

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二03 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

阿里云物联网平台体验 ( 树莓派 +Nodejs 篇 )

我们在《阿里云物联网平台体验(树莓派 +python 篇)》里,写了通过 Python 语言开发云到端的物联网程序,本篇文章将介绍通过 nodejs 来实现类似功能。

同样在阿里云官方文档里已经有了一个 Nodejs 设备接入说明: https://www.yuque.com/cloud-dev/iot-tech/gvttbm

文中的代码也是把模拟的温湿度数据上传到物联网云平台的,我们依然对这个代码进行扩展,实现接入实际的温湿度传感器,把数据上传到云端,同时云端下发控制指令,控制 LED 的开和闭。

相关硬件平台的搭建由于在 python 篇里已有描述,我们这里就不在赘言了。

目前用 nodejs 直接操作 GPIO ,根据网上的资源,有两种常见方式,一种是采用是操作 rpio 库(目前最新版本是 rpio2 0.4.1 ),一种是 quick2wire-gpio-admin 。(其他更好的方案,也希望网友推荐)。根据使用习惯,我这次选用的是 rpio2 。

需要注意的是, rpio2 里面的 pin 和 python 操作的有些不一样,它指定的 pin 是物理排针的 pin 脚位置。比如我们的 LED 模块控制脚接入的是 GPIO4 ,在 python 中我们定义 pin=4 ,在 rpio2 中,我们需要定义 pin=7 了。


阿里云物联网平台体验(树莓派+Nodejs篇)

使用 rpio2 库之前需要安装一下,输入如下命令:

npm install rpio2 production

操作 GPIO 的代码也比较简单,如下面的示例代码:

const Gpio = require('/home/pi/node_modules/rpio2/lib/index.js').Gpio; var led = new Gpio(7); //创建 Pin7 引脚 led.open(Gpio.OUTPUT, Gpio.LOW); //设置为 OUTPUT、默认低电平 for(var i = 0; i < 20; i++){ led.toggle(); //切换 led 的电平状态 led.sleep(300); //等待 500ms } led.close(); 获取DHT11的值相对麻烦一些,参考国外一篇文章:https://www.instructables.com/id/Raspberry-Pi-Nodejs-Blynk-App-DHT11DHT22AM2302/ 安装bcm2835-1.46没有出现什么问题,不过安装node-dht-sensor,如果直接输入 sudo npm install -g node-dht-sensor 命令进行安装会出现如下错误: 我们必须要这样执行命令才行: 先运行:sudo chmod -R 777 /var/root 后运行:sudo npm install -g --unsafe-perm node-dht-sensor则可以正确安装,如下图所示: 获取温湿度的代码比较简单,如下: var sensorLib = require('node-dht-sensor'); // Setup sensor, exit if failed var sensorType = 11; // 11 for DHT11, 22 for DHT22 and AM2302 var sensorPin = 16; // The GPIO pin number for sensor signal if (!sensorLib.initialize(sensorType, sensorPin)) { console.warn('Failed to initialize sensor'); process.exit(1); } // Automatically update sensor value every 2 seconds setInterval(function() { var readout = sensorLib.read(); console.log('Temperature:', readout.temperature.toFixed(1) + 'C'); console.log('Humidity: ', readout.humidity.toFixed(1) + '%'); }, 2000); 执行sudo NODE_PATH=/usr/local/lib/node_modules node ./nodejs_dht11.js 命令,则运行结果如下:

有了以上的操作,那么我们把上面的代码糅合进阿里云官方的示例,实现阿里云的双向通信。

增加 message 函数,获取云端发送的数据:

client.on( 'message' , function (topic, message) {

var json = JSON.parse(message.toString());

console.log( "LED=" + json.params.LED.toString());

led.write( json.params.LED);

});

getPostData 函数需要改造一下,把温湿度函数增加进去:

function getPostData(){

var readout = sensorLib.read();

const payloadJson = {

id: Date.now(),

params: {

temperature: readout.temperature.toFixed(1),

humidity: readout.humidity.toFixed(1)

},

method: "thing.event.property.post"

}

阿里云物联网平台上我们所创建的设备保持不变(参见 Python 篇),我们去对接云端的这个设备。

执行代码需要前面加 sudo ,否则会出错。执行结果如下:


阿里云物联网平台体验(树莓派+Nodejs篇)

本文相关的代码文件: nodejs_dht11_led.js

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

代码区博客精选文章
分页:12
转载请注明
本文标题:阿里云物联网平台体验(树莓派+Nodejs篇)
本站链接:https://www.codesec.net/view/621240.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(34)