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

目录

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

相关推荐
wuxinyan1234 小时前
工业级大模型学习之路017:RAG零基础入门教程(第十三篇):文本分块技术全解析
人工智能·python·学习·rag
我要成为嵌入式大佬4 小时前
正点原子MP157问题详解--烧录出错在ssb1(ox6)
单片机·嵌入式硬件
@杰克成4 小时前
Java学习28
java·python·学习
星幻元宇VR4 小时前
VR科普大空间|法治、禁毒、消防一体化沉浸式教育新模式
科技·学习·安全·vr·虚拟现实
程序猿乐锅4 小时前
【Tilas|第九篇】登录认证功能实现
java·笔记·tlias
小矮强4 小时前
飞马SLAM手持激光扫描仪数据处理
经验分享·测绘
我的xiaodoujiao4 小时前
API 接口自动化测试详细图文教程学习系列19--添加封装其他的方法
开发语言·python·学习·测试工具·pytest
落痕的寒假4 小时前
[深度学习] 大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
深度学习·学习·llama
上海光华专利事务所4 小时前
哪家美国专利申请代理机构专业?2026年4月服务领先应对USPTO审查意见严苛
经验分享