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

目录

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

相关推荐
油丶酸萝卜别吃4 小时前
前端转全栈学习路线
前端·学习
wuyk5554 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
GlueNa2SiO37 小时前
第十八章 Linux故障排查与恢复
linux·服务器·笔记·学习
weixin_431600448 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
带娃的IT创业者8 小时前
DeepTutor:当 Agent-Native 架构撞上个性化学习的临界点
学习·架构·ai agent·大模型应用·个性化学习·教育技术·agent-native架构
小僧景贤8 小时前
单片机全方位调试实战指南:串口/RTT/逻辑分析仪/示波器/内核排错分层避坑教程
单片机·嵌入式硬件·物联网
xian_wwq8 小时前
【学习笔记】Context Engineering,AI Agent 真正的内存管理-4/16
笔记·学习·context
寒月小酒9 小时前
AnythingLLM 学习
学习
疯狂打码的少年10 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
2401_8275012812 小时前
【无标题】
arm开发·嵌入式硬件