树莓派接温湿度传感器显示温度湿度

目录

1.接线

2.建立文件夹(选做)

3.打开nano编辑器

4.编译运行

5.退出

本实验将用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

相关推荐
圣光SG3 小时前
Servlet学习笔记
笔记·学习·servlet
奋发向前wcx3 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
@Mike@5 小时前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
六点_dn5 小时前
RabbitMQ学习笔记-定义与作用
笔记·学习·rabbitmq
我的xiaodoujiao6 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
sramdram6 小时前
基于32位微控制器的FOC汽车水泵方案
单片机·嵌入式硬件·汽车·微控制器·32位微控制器
世人万千丶7 小时前
鸿蒙Flutter Flexible与Expanded的区别
学习·flutter·harmonyos·鸿蒙
香辣牛肉饭7 小时前
【算法】动态规划 最长公共子序列(LCS)
经验分享·笔记·算法·动态规划
迷途呀7 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
YM52e8 小时前
鸿蒙Flutter Center居中组件:Align对齐详解
android·学习·flutter·华为·harmonyos·鸿蒙