查看: 4373|回复: 0

树莓派配合DHT11检测温湿度

[复制链接]
  • TA的每日心情
    奋斗
    2016-2-2 10:49
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-6-8 17:34 | 显示全部楼层 |阅读模式
    本帖最后由 xiansen_shun 于 2016-6-8 17:51 编辑

    树莓派配合DHT11检测温湿度
    DHT11 可以同时检测空气中的温度和湿度,
    精度如下。
            型号:DHT11
            测量范围:20-90%/RH0-50℃
            测湿精度:±5%RH
            测温精度:  ±2℃
            分辨能力:1
    做这个例子需要的材料如下
            一个有操作系统的树莓派
            一个DHT11模块
            一个3p杜邦线
    我们使用的测试方法还是用WiringPi的库,这个库的安装方法参考之前的安装教程。
    接线方式
    dht11       树莓派
    S                         1
    VCC                 VCC
    GND                GND
    dht.JPG

    软件部分

    $ mkdir dht11
    $ cd dht11
    $vim dht11.c
    然后将下面代码复制进dht11.c的文件中

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
     *  dht11.c:
     *  Simple test program to test the wiringPi functions
     *  DHT11 test
     */
    
    #include <wiringPi.h>
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h>
    #define MAXTIMINGS  85
    #define DHTPIN      1
    int dht11_dat[5] = { 0, 0, 0, 0, 0 };
    
    void read_dht11_dat()
    {
        uint8_t laststate   = HIGH;
        uint8_t counter     = 0;
        uint8_t j       = 0, i;
        float   f; /* fahrenheit */
    
        dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
    
        /* pull pin down for 18 milliseconds */
        pinMode( DHTPIN, OUTPUT );
        digitalWrite( DHTPIN, LOW );
        delay( 18 );
        /* then pull it up for 40 microseconds */
        digitalWrite( DHTPIN, HIGH );
        delayMicroseconds( 40 );
        /* prepare to read the pin */
        pinMode( DHTPIN, INPUT );
    
        /* detect change and read data */
        for ( i = 0; i < MAXTIMINGS; i++ )
        {
            counter = 0;
            while ( digitalRead( DHTPIN ) == laststate )
            {
                counter++;
                delayMicroseconds( 1 );
                if ( counter == 255 )
                {
                    break;
                }
            }
            laststate = digitalRead( DHTPIN );
    
            if ( counter == 255 )
                break;
    
            /* ignore first 3 transitions */
            if ( (i >= 4) && (i % 2 == 0) )
            {
                /* shove each bit into the storage bytes */
                dht11_dat[j / 8] <<= 1;
                if ( counter > 16 )
                    dht11_dat[j / 8] |= 1;
                j++;
            }
        }
    
        /*
         * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
         * print it out if data is good
         */
        if ( (j >= 40) &&
             (dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) )
        {
            f = dht11_dat[2] * 9. / 5. + 32;
            printf( "Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)\n",
                dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
        }else  {
            printf( "Data not good, skip\n" );
        }
    }
    
    int main( void )
    {
        printf( "Raspberry Pi wiringPi DHT11 Temperature test program\n" );
    
        if ( wiringPiSetup() == -1 )
            exit( 1 );
    
        while ( 1 )
        {
            read_dht11_dat();
            delay( 1000 ); /* wait 1sec to refresh */
        }
    
        return(0);
    }

    然后在保存退出
    进行编译

    $gcc -Wall -o dht11c dht11.c -lwiringPi
    $sudo ./dht11c
    这个时候你就能看到页面上的温度和湿度会每一秒种刷新一次。
    如图所示:
    dht11.png
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    Blink——Arduino的Hello World!
    Blink——Arduino的Hello
    本教程节选自《Arduino程序设计基础》 Arduino编程基础(零)——Blink,Arduino的He
    ATmega2560-16AU刷BootLoader好慢
    ATmega2560-16AU刷BootLoa
    各位朋友,ATmega2560-16AU刷BootLoader好慢,有没有比较快的办法,一块板子要5分钟左
    【Arduino】108种传感器模块系列实验(104)---MAX30102手腕心率
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表