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

栏目: Node.js · 发布时间: 5年前

阿里云物联网平台体验 ( 树莓派 +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 命令进行安装会出现如下错误:
我们必须要这样执行命令才行:
  1. 先运行:sudo chmod -R 777 /var/root
  2. 后运行: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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

GWT in Action

GWT in Action

Robert Hanson、Adam Tacy / Manning Publications / 2007-06-05 / USD 49.99

This book will show Java developers how to use the Google Web Toolkit (GWT) to rapidly create rich web-based applications using their existing skills. It will cover the full development cycle, from ......一起来看看 《GWT in Action》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试