树莓派用传感器监控大气

小白一枚,记录过程.
材料:树莓派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

猜你喜欢

转载自blog.csdn.net/weixin_41860080/article/details/87886608