树莓派用传感器监控大气

小白一枚,记录过程.
材料:树莓派3B+ DHT11传感器 光敏传感器 电容 电阻 杜邦线 面包板

1、接线
接线
2、代码
打开命令行

nano dhtldr9.c

在弹出窗口,输入下面代码

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define DHT 4
#define LDR 7
#define LED 0
int data[5],count,index1,k,val[1000],sum=0;
int main(void)
{
        if (wiringPiSetup()==-1)
                {exit(1);}
        pinMode(LED,OUTPUT);
        digitalWrite(LED,LOW);
while(1)
{
        uint8_t prev_state=HIGH;
        uint8_t value=0;
        uint8_t j=0,pulse;
        for(k=0;k<5;k++)
                {data[k]=0;}
        pinMode(DHT,OUTPUT);
        digitalWrite(DHT,LOW);
        delay(18);
        digitalWrite(DHT,HIGH);
        delayMicroseconds(40);
        pinMode(DHT,INPUT);

        for (pulse=0;pulse<100;pulse++)
        {
                value=0;
                while(digitalRead(DHT)==prev_state)
                {
                        value++;
                        delayMicroseconds(1);
                        if(value==255)
                                {break;}
                }
                prev_state=digitalRead(DHT);
                if(value==255)
                        break;
                if((pulse>=4)&&(pulse%2==0))
                {
                data[j/8]<<=1;
                if(value>16)
                        data[j/8] |=1;
                j++;
                }
        }

        if((j>=40)&&(data[4]==((data[0]+data[1]+data[2]+data[3])&0b11111111)))
        {
                printf("Humidity=%d.%d%%Temperature=%d.%d'C\n",data[0],data[1],data[2],data[3]);
        }
        else
        {
                printf("Data received is corrupted,what did you do?\n");
        }
        pinMode(DHT,OUTPUT);
        digitalWrite(DHT,HIGH);
        for(index1=0;index1<50;index1++) 
        {
                pinMode(LDR,OUTPUT);
                digitalWrite(LDR,LOW);
                delay(16);
                count=0;
                pinMode(LDR,INPUT);
                while(digitalRead(LDR)==LOW)
                        count++;
                val[index1]=count;
        }
        sum=0;
        for(index1=0;index1<50;index1++)
                sum+=val[index1];
        printf("LDR Value is %d\n",sum/250);
        if(data[2]>25&&sum>4000)
        {
                digitalWrite(LED,HIGH);
                printf("TEMPERATURE IS HIGH >>FAN ON ,LIGHT IS LOW >>TUBELIGHT ON\n");
        }
        delay(500);
}
}

按下ctrl+x ,再按下Y,保存代码。
在命令行输入下面语句,编译代码

gcc dhtldr9.c -o dhtldr9 -lwiringPi

在命令行输入下面语句,执行代码

sudo ./dhtldr9

成功显示。

如果LDR传感器输出值为0,可以用下面代码创建python代码进行检测:

nano dhtldr9.py
import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
value=0 
GPIO.setup(4,GPIO.OUT) 
GPIO.output(4,GPIO.LOW) 
time.sleep(0.2) 
GPIO.setup(4,GPIO.IN) 
while(GPIO.input(4)==GPIO.LOW):
        value=value+1
print value

参考书:《树莓派+传感器:创建智能交互项目的实用方法、工具及最佳实践》作者:[印度] 鲁什·贾-加(Rushi Gajjar) Page 74-96

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值