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

目录

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

相关推荐
点心的游戏开发世界1 小时前
Unity C# 脚本学习笔记:命名空间与 using
学习·unity·c#
香芋芋圆2 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF2 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
点心的游戏开发世界3 小时前
Unity C# 脚本学习笔记:泛型
学习·unity·c#
tju新生代魔迷4 小时前
Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
笔记·学习
长江后浪博客4 小时前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
天竺鼠不该去劝架5 小时前
企业银企直联落地难点分析:基于RPA的财务自动化替代方案实践
经验分享
点心的游戏开发世界5 小时前
UnityShaderGraph滚动UV笔记
笔记·uv
单片机仿真设计5 小时前
【proteus仿真】基于 STM32 单片机智能仓库设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
星游路5 小时前
单片机·电子时钟
单片机·嵌入式硬件