目录
本实验将用C语言在树莓派中编写程序,读取接入的温湿度传感器采集的温度湿度,并接一个LED,当温度超过阈值30℃时,LED闪烁。
注:用C语言写,记得安装WiringPi库。(可参考文章 树莓派安装WiringPi库)
1.接线
准备:树莓派,温湿度传感器,一个LED,若干杜邦线,面包板(看自己选择)。
接线方法(以GPIO BCM编码为例):
- DHT11/DHT22 传感器:
- VCC 接 树莓派 3.3V(物理引脚1)
- GND 接 树莓派 GND(物理引脚6)
- DATA 接 树莓派 GPIO4(物理引脚7)
- LED 灯:
- 长脚(正极)串联一个电阻后,接 树莓派 GPIO17(物理引脚11)
- 短脚(负极)接 树莓派 GND


2.建立文件夹(选做)
建立一个文件夹test,便于实验的管理(我自己是建了个文件夹,将在个文件夹里测试其他外设,所以统一建立管理了)。
在终端窗口编写:
bash
mkdir test
可以看到已经有test文件夹了
进入文件夹
bash
cd test
3.打开nano编辑器
打开nano,并且创建dht11.c文件
bash
nano dht11.c

在里面编写代码
bash
#include <wiringPi.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define DHT_PIN 7
#define LED_PIN 0
#define TEMP 30
int readDHT11(int *temperature, int *humidity)
{
uint8_t data[8] = {0};
uint8_t lastState = HIGH;
uint8_t counter = 0;
uint8_t j = 0;
// set
pinMode(DHT_PIN, OUTPUT);;
digitalWrite(DHT_PIN, LOW);
delay(18);
digitalWrite(DHT_PIN, HIGH);
delayMicroseconds(40);
pinMode(DHT_PIN, INPUT);
for(int i=0; i<85; i++){
counter = 0;
while(digitalRead(DHT_PIN)==lastState){
counter++;
delayMicroseconds(1);
if(counter == 255) break;
}
lastState = digitalRead(DHT_PIN);
if(counter == 255)break;
if((i>=4) && (i%2==0)){
data[j>>3] <<= 1;
if(counter > 50){
data[j>>3] |= 1;
}
j++;
}
}
if((j>=40) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xff))){
*humidity = data[0];
*temperature = data[2];
return 0;
}else{
return -1;
}
}
//led
void blink_led(int times, int delay_ms){
for(int i=0; i<times; i++){
digitalWrite(LED_PIN, HIGH);
delay(delay_ms);
digitalWrite(LED_PIN, LOW);
delay(delay_ms);
}
}
int main(void)
{
int temperature = 0;
int humidity = 0;
if(wiringPiSetup() == -1){
printf("error!\n");
return -1;
}
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
while(1){
if(readDHT11(&temperature, &humidity)==0){
printf("t:%d`C , h:%d%%\n", temperature, humidity);
if(temperature >= TEMP){
blink_led(3, 300);
}
}
delay(2000);
}
return 0;
}



然后按下Ctrl+O保存,回车(确定文件名),按下Ctrl+X退出
4.编译运行
编写进行编译和运行
bash
gcc -o dht11 dht11.c -lwiringPi
sudo ./dht11

呈现出:


5.退出
按下Ctrl+C 程序就退出啦~,就会出现^C这个标志。
o(* ̄▽ ̄*)o