目录

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

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

我们在《阿里云物联网平台体验(树莓派

+python

篇)》里,写了通过

Python

语言开发云到端的物联网程序,本篇文章将介绍通过

nodejs

来实现类似功能。

同样在阿里云官方文档里已经有了一个

Nodejs

设备接入说明:

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

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

了。

https://i-blog.csdnimg.cn/blog_migrate/b0781192cc2bc8d4e4e2602e56a19206.jpeg

标题

使用

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 命令进行安装会出现如下错误:

https://i-blog.csdnimg.cn/blog_migrate/90d3a1bc04c84b5e51746ccebcce0811.jpeg

标题

我们必须要这样执行命令才行:
  1. 先运行:sudo chmod -R 777 /var/root
  2. 后运行:sudo npm install -g –unsafe-perm node-dht-sensor则可以正确安装,如下图所示:

https://i-blog.csdnimg.cn/blog_migrate/8b6bf96fe0e3018b3f33cb11ab0985d8.jpeg

标题

获取温湿度的代码比较简单,如下:
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 命令,则运行结果如下:
 

https://i-blog.csdnimg.cn/blog_migrate/6f3e59dd782d60db40430dbaee54681b.jpeg

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

增加

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

,否则会出错。执行结果如下:

https://i-blog.csdnimg.cn/blog_migrate/82dc76351dfa423d8e6e9087f0b98748.jpeg

本文相关的代码文件:

阿里云物联网平台链接: