树莓派3b驱动dht11温湿度传感器

  1. 新建并打开C文件

    touch dht11.c

    sudo vim dht11.c

  2. 编写驱动程序

     1 #include<wiringPi.h>
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<stdint.h>
     5 #define MAX_TIME 85
     6 #define DHT11PIN 7
     7 #define ATTEMPTS 5                 //retry 5 times when no response
     8 int dht11_val[5]={0,0,0,0,0};
     9
    10 int dht11_read_val(){
    11     uint8_t lststate=HIGH;         //last state
    12     uint8_t counter=0;
    13     uint8_t j=0,i;
    14     for(i=0;i<5;i++)
    15         dht11_val[i]=0;
    16
    17     //host send start signal
    18     pinMode(DHT11PIN,OUTPUT);      //set pin to output
    19     digitalWrite(DHT11PIN,LOW);    //set to low at least 18ms
    20     delay(18);
    21     digitalWrite(DHT11PIN,HIGH);   //set to high 20-40us
    22     delayMicroseconds(40);
    23
    24     //start recieve dht response
    25     pinMode(DHT11PIN,INPUT);       //set pin to input
    26     for(i=0;i<MAX_TIME;i++)
    27     {
    28         counter=0;
    29         while(digitalRead(DHT11PIN)==lststate){     //read pin state to see if dht responsed. if dht always high for 255 + 1 times, break this while circle
    30             counter++;
    31             delayMicroseconds(1);
    32             if(counter==255)
    33                 break;
    34         }
    35         lststate=digitalRead(DHT11PIN);    //read current state and store as last state.
    36         if(counter==255)   //if dht always high for 255 + 1 times, break this for circle
    37             break;
    38  // top 3 transistions are ignored, maybe aim to wait for dht finish response signal
    39         if((i>=4)&&(i%2==0)){
    40             dht11_val[j/8]<<=1;     //write 1 bit to 0 by moving left (auto add 0)
    41             if(counter>16)      //long mean 1
    42                 dht11_val[j/8]|=1;     //write 1 bit to 1
    43             j++;
    44         }
    45     }
    46     // verify checksum and print the verified data
    47     if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF))){
    48         printf("RH:%d,TEMP:%d\n",dht11_val[0],dht11_val[2]);
    49         return 1;
    50     }
    51     else
    52         return 0;
    53 }
    54
    55 int main(void){
    56     int attempts=ATTEMPTS;
    57     if(wiringPiSetup()==-1)
    58         exit(1);
    59     while(attempts){                        //you have 5 times to retry
    60         int success = dht11_read_val();     //get result including printing out
    61         if (success) {                      //if get result, quit program; if not, retry 5 times then quit
    62             break;
    63         }
    64         attempts--;
    65         delay(2500);
    66   }
    67     return 0;
    68 }

    按esc,然后输入:wq保存退出。

  3. 编译c文件

    需安装wiringPi开发库,安装教程详见本博主博客:树莓派安装wiringPi开发库

    输入命令:

    gcc -Wall -o dht11 dht11.c -lwiringPi

    1

    gcc是编译器,-Wall是在编译时显示警告信息,-o dht11.c是将dht11.c文件编译成文件名为dht11的可执行文件,-lwiringPi是将wiringPi头文件包含在可执行文件中。

  4. 运行程序

    输入命令:

    sudo ./dht11

    可以看到湿度和温度值都正确的打印在了屏幕上。

时间: 2025-01-07 04:08:02

树莓派3b驱动dht11温湿度传感器的相关文章

张高兴的 Windows 10 IoT 开发笔记:DHT11 温湿度传感器

原文:张高兴的 Windows 10 IoT 开发笔记:DHT11 温湿度传感器 GitHub : https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/DHT11Demo

Arduino和C51开发DHT11温湿度传感器

技术:51单片机.Arduino.DHT11.温湿度传感器.传感器 概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产品的思维有很大的帮助 详细 代码下载:http://www.demodashi.com/demo/14729.html 一.DHT11温度传感器 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳

python代码实现树莓派3b+驱动步进电机

python代码实现树莓派3b+驱动步进电机 之前买了个树莓派,刚买回来那会儿热情高涨,折腾了一段时间,然后就放哪吃灰了.前几天忽然想起来这个东西了,决定再玩玩儿,于是就从某宝上购买了一套步进电机.驱动板.东西收到后就开始折腾研究,下边来总结下折腾的结果吧. 先来说下都需要什么吧,树莓派的这一套都少不了,树莓派3b+主板.TF卡.树莓派电源.步进电机以及对应的驱动板.杜邦线6根(母对母),差不多就这么多吧. 引脚 首先,我们先看下树莓派的40个Pin都是什么功能吧!可以通过过树莓派的命令行窗口来

树莓派连接DHT11温湿度传感器(python)

介绍 DHT11作为一个廉价配件,同时包含了温度.湿度传感器,而且,编码使用也非常简单. 本文介绍如果在树莓派中使用 DHT11,代码是Python.如果有任何疑问,欢迎在下面留言. 接线 VCC接5V或者3.3V DATA接GPIO(我接的是BCM的16号针脚,物理针脚是36) GND接GND 代码 [codesyntax lang="python"] [python] view plain copy #!/usr/bin/python import RPi.GPIO as GPIO

【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉. [Arduino]168种传感器模块系列实验(资料+代码+图形+仿真) 实验五十五:DHT11 温湿度复合传感器模块(数字型单总线通信) 温度 度量物体冷热的物理量,是国际单位制中7个基本物理量之一.温度是

树莓派使用DHT11温湿度传感器(C语言程序)

pi4j是基于wiringpi开发的通过java来控制树莓派GPIO口的库文件.在java程序中引入相关类就可以使用已经封装好的方法控制树莓派GPIO口. pi4j官网:http://pi4j.com/ pi4j下载:http://pi4j.com/download.html pi4j安装:http://pi4j.com/install.html pi4j文档:http://pi4j.com/apidocs/index.html 编译和运行: 使用了pi4j后,编译.java文件和运行.clas

树莓派之DHT11温湿度传感器

GitHub:https://github.com/HiCrater/Raspberry-DHT11-Temperature.git 一.首先看接线 接线图   VCC    正极   接树莓派3.3v电源(随便选择一个就行)   GND    负极   接树莓派地线(随便选择一个就行)   OUT   数据线   接树莓派GPIO7 二.附上DHT11的资料   三.代码 #include <wiringPi.h> #include <stdio.h> #include <

DHT11温湿度传感器

一.硬件介绍 RH是相对湿度,是用零点温度来定义的,一般,RH在45%~65%之间最为合适. 注:NTC为热敏电阻,输出为:单总线数字信号,单线双向串行通讯. 注:上拉电阻情况下,配置为开漏输出,可以增加驱动能力,减小CPU功耗. 二.程序关键点:1)引脚输入与输出的准确切换,2)输出电平的准确延迟,3)输入电平的等待与延迟读取以及等待的时间限制. 1.MCU如何设置开始信号? /*由MCU向DHT11发送一次开始信号,总线空闲状态为高电平,MCU把总线拉低至少18ms,保证DHT11能检测到开

温湿度传感器DHT11

如果想使用 Arduino 开发板驱动 DHT11 来获取温湿度的时候建议使用第三方的库,这样可以加快程序的开发速度,而且不容易出错,下面的代码我已经安转了第三方的库了.详细的安装方法请参考极客先锋的博客:http://www.cnblogs.com/jikexianfeng/p/6290203.html 作者安装的为最低版本(1.0.0).这样为了更好的兼容. 1 /********************************* 2 代码功能:温湿度传感器DHT11 3 使用函数: 4 s