• 阿里云物联网平台体验(树莓派+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了。

     

    使用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_dht11_led.js

     

    阿里云物联网平台链接:https://dev.iot.aliyun.com/sale?source=deveco_partner_yefan

     

  • 相关阅读:
    CentOS6.4 安装 codeblocks-12.11
    SpringCloud 进阶之Hystrix(断路器)
    SpringCloud 进阶之Ribbon和Feign(负载均衡)
    SpringCloud 进阶之Eureka(服务注册和发现)
    SpringCloud 入门
    SpringBoot与消息(RabbitMQ)
    SpringBoot 与缓存
    SpringBoot 之数据访问
    Spring Data 之 Repository 接口
    Spring Data之Hello World
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/10100646.html
Copyright © 2020-2023  润新知