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

目录

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

相关推荐
FreakStudio7 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
LinXunFeng8 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
通信小呆呆12 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick12 天前
自动对焦学习-3
人工智能·学习·计算机视觉
✎ ﹏梦醒͜ღ҉繁华落℘12 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
Daisy Lee12 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
SM1771521183812 天前
NSK紧凑型FA系列丝杠技术详解
经验分享·规格说明书
Alsn8612 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e12 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨12 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙