12-開發板接入小五物聯實現遠端控制(stm32採集溫濕度感應器DHT11)

來源:互聯網
上載者:User

標籤:src   設定   遠端控制   連接埠   oid   讀取   class   介面   temp   

採集DHT11溫濕度資料, 使用stm32f103zet6 的GPIOG11引腳讀取SHT11資料,通過串口列印採集的溫濕度

 

dht11.c檔案:

#include "dht11.h"#include "delay.h"//複位DHT11void DHT11_Rst(void)       {                     DHT11_IO_OUT();     //SET OUTPUT    DHT11_DQ_OUT=0;     //拉低DQ    delay_ms(20);        //拉低至少18ms    DHT11_DQ_OUT=1;     //DQ=1     delay_us(30);         //主機拉高20~40us}//等待DHT11的回應//返回1:未檢測到DHT11的存在//返回0:存在u8 DHT11_Check(void)        {       u8 retry=0;    DHT11_IO_IN();//SET INPUT         while (DHT11_DQ_IN&&retry<100)//DHT11會拉低40~80us    {        retry++;        delay_us(1);    };         if(retry>=100)return 1;    else retry=0;    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低後會再次拉高40~80us    {        retry++;        delay_us(1);    };    if(retry>=100)return 1;            return 0;}//從DHT11讀取一個位//傳回值:1/0u8 DHT11_Read_Bit(void)              {     u8 retry=0;    while(DHT11_DQ_IN&&retry<100)//等待變為低電平    {        retry++;        delay_us(1);    }    retry=0;    while(!DHT11_DQ_IN&&retry<100)//等待變高電平    {        retry++;        delay_us(1);    }    delay_us(40);//等待40us    if(DHT11_DQ_IN)return 1;    else return 0;           }//從DHT11讀取一個位元組//傳回值:讀到的資料u8 DHT11_Read_Byte(void)    {            u8 i,dat;    dat=0;    for (i=0;i<8;i++)     {           dat<<=1;         dat|=DHT11_Read_Bit();    }                                return dat;}//從DHT11讀取一次資料//temp:溫度值(範圍:0~50°)//humi:濕度值(範圍:20%~90%)//傳回值:0,正常;1,讀取失敗u8 DHT11_Read_Data(u8 *temp,u8 *humi)    {             u8 buf[5];    u8 i;    DHT11_Rst();    if(DHT11_Check()==0)    {        for(i=0;i<5;i++)//讀取40位元據        {            buf[i]=DHT11_Read_Byte();        }        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])        {            *humi=buf[0];            *temp=buf[2];        }    }else return 1;    return 0;        }//初始化DHT11的IO口 DQ 同時檢測DHT11的存在//返回1:不存在//返回0:存在         u8 DHT11_Init(void){          GPIO_InitTypeDef  GPIO_InitStructure;          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);     //使能PG連接埠時鐘         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;                 //PG11連接埠配置     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽輸出     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_Init(GPIOG, &GPIO_InitStructure);                 //初始化IO口     GPIO_SetBits(GPIOG,GPIO_Pin_11);                         //PG11 輸出高                    DHT11_Rst();  //複位DHT11    return DHT11_Check();//等待DHT11的回應} 

 

dht11.h檔案

#ifndef __DHT11_H#define __DHT11_H #include "sys.h"   //IO方向設定#define DHT11_IO_IN()  {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}#define DHT11_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}////IO操作函數                                               #define    DHT11_DQ_OUT PGout(11) //資料連接埠    #define    DHT11_DQ_IN  PGin(11)  //資料連接埠     u8 DHT11_Init(void);//初始化DHT11u8 DHT11_Read_Data(u8 *temp,u8 *humi);//讀取溫濕度u8 DHT11_Read_Byte(void);//讀出一個位元組u8 DHT11_Read_Bit(void);//讀出一個位u8 DHT11_Check(void);//檢測是否存在DHT11void DHT11_Rst(void);//複位DHT11    #endif

 

main.c檔案:

#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"     #include "dht11.h"       int main(void) {         u8 t=0;                    u8 temperature;              u8 humidity;               delay_init();             //延時函數初始化        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設定中斷優先順序分組為組2:2位搶佔優先順序,2位響應優先順序    uart_init(115200);         //串口初始化為115200    LED_Init();                  //初始化與LED串連的硬體介面         while(DHT11_Init())    //DHT11初始化        {        printf("DHT11 Error\r\n");            delay_ms(3000);    }                                            while(1)    {                         if(t%100==0)            //每100ms讀取一次        {                                                  DHT11_Read_Data(&temperature,&humidity);    //讀取溫濕度值                            printf("\r\n溫度:%d\r\n",temperature);            printf("濕度:%d\r\n",humidity);         }                            delay_ms(10);        t++;        if(t==200)        {            t=0;            LED0=!LED0;        }    }}

 

串口接收效果:

 

源碼連結:https://pan.baidu.com/s/1vyIc6Zu2OOWwDsgLQonKKw 

提取碼:yolu

 

12-開發板接入小五物聯實現遠端控制(stm32採集溫濕度感應器DHT11)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.