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