美文网首页
树莓派用node读取dht11温湿度传感器

树莓派用node读取dht11温湿度传感器

作者: adtk | 来源:发表于2019-11-19 12:09 被阅读0次
    var rpio = require('rpio');
    const INT_37 = 37;
    
    
    // 单片机IO,输出模式,电平拉低,至少18ms,再拉高,单片机改为输入模式
    
    //数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
    // 数据传送正确时校验和数据等于“8bit湿度整数数据 + 8bit湿度小数数据 + 8bi温度整数数据 + 8bit温度小数数据”所得结果的末8位。
    // 如果上式不相等,说明程序还没有调试好,或者读取过快
    
    function get() {
        rpio.open(INT_37, rpio.OUTPUT, rpio.LOW);//将初始状态设置为低
        rpio.msleep(20);
    
        rpio.write(INT_37, rpio.HIGH)
    
        // rpio.sleep(n);          /* Sleep for n seconds */
        // rpio.msleep(n);         /* Sleep for n milliseconds */
        // rpio.usleep(n);         /* Sleep for n microseconds */
    
    
    
        rpio.mode(INT_37, rpio.INPUT); //将已经在一种模式下断开的引脚切换到另一种模式,出于性能方面的考虑
    
        while (rpio.read(INT_37) == 0) {
            continue
        }
    
        while (rpio.read(INT_37) == 1) {
            continue
        }
        var data = [];
        var i = 0;
        while (i < 40) {
            // http://m.elecfans.com/article/648303.html
            // 准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了数据位是0还是1
            // 当最后一bit数据传送完毕后,DHT11拉低总线
            var cnt = 0;
            while (rpio.read(INT_37) == 0) {
                continue
            }
            while (rpio.read(INT_37) == 1) {
                cnt += 1
                if (cnt > 100) break
            }
            if (cnt < 8) {
                data.push(0)
            } else {
                data.push(1)
            }
            i++
        }
        var humidity = parseInt(data.slice(0, 8).join(""), 2);
        var humidity_point = parseInt(data.slice(8, 16).join(""), 2);
        var temperature = parseInt(data.slice(16, 24).join(""), 2);
        var temperature_point = parseInt(data.slice(24, 32).join(""), 2);
        var check = parseInt(data.slice(32, 40).join(""), 2);
        // 判断check等于 其他所有值相加,数据就可信
    
    
        // 二进制转十进制
        if (check == (humidity + humidity_point + temperature + temperature_point)) {
            console.log("ok");
        }
    
        console.log(data, humidity, humidity_point, temperature, temperature_point, check);
    }
    
    get();
    rpio.sleep(2);
    get();
    rpio.sleep(2);
    get();
    rpio.sleep(2);
    get();
    rpio.sleep(2);
    
    

    node还有个模块node-dht-sensor用来读取温湿度传感器

    相关文章

      网友评论

          本文标题:树莓派用node读取dht11温湿度传感器

          本文链接:https://www.haomeiwen.com/subject/seewictx.html