在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于物聯(lián)網(wǎng)的遠程溫濕度監(jiān)測系統(tǒng)(2)編寫 DHT11 驅(qū)動

機智云 ? 2022-04-25 14:28 ? 次閱讀

前言

本項目主要通過使用STM32F103C8T6作為主控MCUESP8266作為數(shù)據(jù)透傳模塊,接入機智云AIoT云平臺,通過在線智能產(chǎn)品,實現(xiàn)了遠程聯(lián)網(wǎng)、溫濕度監(jiān)測、APP控制等功能。


在上文中,主要介紹了“創(chuàng)建云端產(chǎn)品,燒錄Gagent”,以便讓設(shè)備能夠聯(lián)網(wǎng),當然其中也備注了ESP8266燒寫Gagent固件時的注意事項,說明定義數(shù)據(jù)點的作用。


在本文中,從原理開始講解,闡述DHT11驅(qū)動的編寫。


進入正文

1、DHT11 簡要介紹

DHT11 器件采用簡化的單總線通信,DATA 引腳用于微處理器與 DHT11 之間的通訊和同步,一次傳送 40 位數(shù)據(jù),高位先出。

69ce4e64-c3ef-11ec-8521-dac502259ad0.png

舉例:

69ed654c-c3ef-11ec-8521-dac502259ad0.png

2、時序分析(附代碼)

用戶主機(MCU)發(fā)送一次開始信號后,DHT11 從低功耗模式轉(zhuǎn)換到高速模式,待主機開始信號結(jié)束后,DHT11 發(fā)送響應(yīng)信號,送出 40bit 的數(shù)據(jù),信號發(fā)送如圖所示。

6a02e8e0-c3ef-11ec-8521-dac502259ad0.png

注意:主機(MCU)從 DHT11 讀取的溫濕度數(shù)據(jù)總是前一次的測量值。

總線空閑:

DHT11 的 DATA 數(shù)據(jù)線由上拉電阻拉高一直保持高電平,此時 DHT11 的DATA 引腳處于輸入狀態(tài),時刻檢測外部信號。

MCU 發(fā)出請求信號:

MCU I/O 設(shè)置為輸出同時輸出低電平,且低電平保持時間不能小于 18ms,然后MCU I/O設(shè)置為輸入狀態(tài)。由于上拉電阻,MCU I/O 即 DHT11 的 DATA 數(shù)據(jù)線也隨之變高,之后等待 DHT11 作出回答信號。

DHT11 發(fā)出應(yīng)答信號:

當 DHT11 的 DATA 引腳檢測到外部信號有低電平時,等待外部信號低電平結(jié)束,延遲后 DHT11 的 DATA引腳處于輸出狀態(tài),輸出 80us的低電平作為應(yīng)答信號,緊接著輸出 80us 的高電平通知 MCU 準備接收數(shù)據(jù),MCU I/O 此時處于輸入狀態(tài),檢測到 DHT11 回應(yīng)信號后,等待 80us 的高電平后的數(shù)據(jù)接收。

6a17c288-c3ef-11ec-8521-dac502259ad0.png

MCU 接收 40 位數(shù)據(jù)

由 DHT11 的 DATA 引腳輸出 40 位數(shù)據(jù),MCU 根據(jù) I/O 電平的變化來判斷是 “0” 還是 “1” 。

位數(shù)據(jù) “0” 的格式為:

50us 的低電平和 26-28us的高電平。

6a2ce62c-c3ef-11ec-8521-dac502259ad0.png

位數(shù)據(jù) “1” 的格式為:

50us 的低電平加 70us 的高電平。

6a4ba6e8-c3ef-11ec-8521-dac502259ad0.png

DHT11 發(fā)出結(jié)束信號

DHT11 的 DATA 引腳輸出 40 位數(shù)據(jù)后,繼續(xù)輸出低電平 50us 后轉(zhuǎn)為輸入狀態(tài),由于上拉電阻存在,變?yōu)楦唠娖健?/p>

// 本驅(qū)動采用 HAL 庫,us 級延時使用通用定時器實現(xiàn),對 IO 引腳的狀態(tài)的改變采用位操作以及直接寄存器操作

// 復(fù)位DHT11
void DHT11_Rst(void)
{                 
    DHT11_IO_OUT();   //設(shè)置為輸出
  DHT11_DQ_OUT = 0;   //拉低
  HAL_Delay_ms(20);   //拉低至少18ms
  DHT11_DQ_OUT = 1;   //拉高 
  HAL_Delay_us(30);   //主機拉高20~40us
}

//等待DHT11的回應(yīng)
//返回1:未檢測到DHT11的存在
//返回0:存在
uint8_t DHT11_Check(void)      
{   
uint8_t retry = 0;
  DHT11_IO_IN();      //設(shè)置為輸入   
while(DHT11_DQ_IN && retry < 100)  //DHT11會拉低40~80us
  {
    retry++;
    HAL_Delay_us(1);
  }   
if(retry >= 100)
return 1;
else
    retry = 0;

while(!DHT11_DQ_IN && retry < 100)  //DHT11拉低后會再次拉高40~80us
  {
    retry++;
    HAL_Delay_us(1);
  }
if(retry >= 100)
return 1;      
return 0;
}

//從DHT11讀取一個位
//返回值:1/0
uint8_t DHT11_Read_Bit(void)        
{
uint8_t retry = 0;
while(DHT11_DQ_IN && retry < 100)//等待變?yōu)榈碗娖?/code>
  {
    retry++;
    HAL_Delay_us(1);
  }
  retry = 0;
while(!DHT11_DQ_IN && retry < 100)//等待變高電平
  {
    retry++;
    HAL_Delay_us(1);
  }
  delay_us(40);//等待40us
if(DHT11_DQ_IN)
return 1;
else
return 0;       
}

//從DHT11讀取一個字節(jié)
//返回值:讀到的數(shù)據(jù)
uint8_t DHT11_Read_Byte(void)    
{        
uint8_t i,dat;
  dat = 0;
for (i=0;i<8;i++) 
  {
      dat <<= 1; 
      dat |= DHT11_Read_Bit();
  }                
return dat;
}

//從DHT11讀取一次數(shù)據(jù)
//temp0~50°)
//humi20%~90%)
//返回值:0,正常;1,讀取失敗;2,校驗和錯誤
uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi)    
{        
uint8_t buf[5];
uint8_t i;
  DHT11_Rst();
if(DHT11_Check() == 0)
  {
for(i = 0; i < 5; i++)   //讀取40位數(shù)據(jù)
    {
      buf[i] = DHT11_Read_Byte();
    }
if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
    {
      *humi = buf[0];  
      *temp = buf[2];
    }
else
return 2;  // 校驗和錯誤
  }
else
return 1;
return 0;      
}

//初始化DHT11的 IO口, 同時檢測DHT11的存在
//返回1:不存在
//返回0:存在        
uint8_t DHT11_Init(void)
{
  DHT11_GPIO_Init();

  DHT11_Rst();
return DHT11_Check();
}

3、使用串口觀察數(shù)據(jù)

將 printf 函數(shù)重定向至與 PC 相連的串口上。由于重定向相關(guān)函數(shù)已經(jīng)包含在機智云生成的代碼中(gizwits_product.c),我們直接使用 printf 進行數(shù)據(jù)打印即可。

#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

return ch;
}

以下為相關(guān)測試代碼:

state = DHT11_Read_Data(&temperature, &humidity);
if(state == 2)
{
printf("the checksum is error\n");
}
else if(!state)
{
printf("temp = %d , humi = %d\n", temperature, humidity);
}
else
{
printf("DHT11 is not answer\n");
}

若采集到的數(shù)據(jù)沒有問題,即可將機智云協(xié)議相關(guān)代碼移植進工程中。

本文結(jié)束。


在下篇內(nèi)容中,介紹結(jié)合STM32cubx實現(xiàn)機智云代碼工程移植、采集數(shù)據(jù)上發(fā)、控制數(shù)據(jù)下拉、成品測試環(huán)節(jié)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關(guān)推薦

    遠程溫濕度實時監(jiān)測系統(tǒng)應(yīng)用方案

    遠程溫濕度實時監(jiān)測系統(tǒng),作為現(xiàn)代環(huán)境管理的重要組成部分,是各行各業(yè)不可或缺的重要工具,對環(huán)境溫濕度遠程
    的頭像 發(fā)表于 01-02 17:03 ?179次閱讀

    【正點原子STM32H7R3開發(fā)套件試用體驗】DS18B20、DHT11溫濕度采集

    */ } } } 效果 LCD 屏顯示溫度數(shù)據(jù) 串口打印溫度信息 完整項目工程見附件。*附件:Demo2_DS18B20.zip DHT11 DHT11 數(shù)字溫濕度傳感器,它
    發(fā)表于 01-01 11:16

    《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11數(shù)字溫濕度傳感器

    第三十章 DHT11數(shù)字溫濕度傳感器 本章,我們將介紹數(shù)字溫濕度傳感器DHT11的使用,與前一章的溫度傳感器相比,該傳感器不但能測溫度,還能測濕度
    發(fā)表于 12-26 09:26

    dht11溫濕度傳感器工作原理介紹

    DHT11是一種常用的溫濕度傳感器,它能夠測量溫度和相對濕度。這種傳感器廣泛應(yīng)用于智能家居、氣象站、農(nóng)業(yè)監(jiān)控等領(lǐng)域。 DHT11溫濕度傳感器
    的頭像 發(fā)表于 10-21 09:47 ?2721次閱讀

    Arduino Nano 和 DHT11 實現(xiàn) LabVIEW 溫濕度采集

    Arduino Nano 和 DHT11 實現(xiàn) LabVIEW 溫濕度采集
    的頭像 發(fā)表于 10-08 11:46 ?713次閱讀
    Arduino Nano 和 <b class='flag-5'>DHT11</b> 實現(xiàn) LabVIEW <b class='flag-5'>溫濕度</b>采集

    CW32模塊使用 DHT11溫濕度傳感器

    DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復(fù)合傳感器。其成本低、長期穩(wěn)定、可以測量相對濕度和溫度測量,并可以只使用一根數(shù)據(jù)線進行
    的頭像 發(fā)表于 09-09 18:21 ?1397次閱讀
    CW32模塊使用 <b class='flag-5'>DHT11</b><b class='flag-5'>溫濕度</b>傳感器

    dht11溫度傳感器特性的具體含義

    DHT11溫度傳感器作為DHT11數(shù)字溫濕度傳感器的一部分,具有一系列獨特的特性。以下是DHT11溫度傳感器特性的具體含義: 1. 測量范圍 溫度測量范圍 :
    的頭像 發(fā)表于 09-03 17:40 ?1646次閱讀

    dht11溫度傳感器的原理及應(yīng)用

    DHT11是一種廣泛使用的數(shù)字溫濕度傳感器,它能夠測量溫度和相對濕度。這種傳感器因其低成本、易于使用和相對較高的準確性而受到歡迎。 DHT11傳感器的原理
    的頭像 發(fā)表于 09-03 17:28 ?2314次閱讀

    DHT11溫度傳感器測量范圍與精度

    DHT11是一款含有已校準數(shù)字信號輸出的溫濕度復(fù)合傳感器,它結(jié)合了溫濕度傳感技術(shù),通過專用的數(shù)字模塊采集技術(shù)實現(xiàn)溫濕度的測量,無需復(fù)雜的電路處理。關(guān)于
    的頭像 發(fā)表于 09-03 17:03 ?2457次閱讀

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環(huán)境溫濕度數(shù)據(jù)及 OLED顯示

    Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環(huán)境溫濕度數(shù)據(jù)及 OLED顯示
    的頭像 發(fā)表于 08-13 18:04 ?1337次閱讀
    Arduino Nano 和 NodeMCU ESP8266 讀取 <b class='flag-5'>DHT11</b> 環(huán)境<b class='flag-5'>溫濕度</b>數(shù)據(jù)及 OLED顯示

    溫濕度監(jiān)測系統(tǒng)應(yīng)用

    、可靠的溫濕度監(jiān)測系統(tǒng)顯得尤為重要。 溫濕度監(jiān)測系統(tǒng),通過溫度傳感器、智能控制終端等硬件設(shè)備,與
    的頭像 發(fā)表于 07-26 16:15 ?475次閱讀

    庫房溫濕度自動監(jiān)測系統(tǒng)

    倉儲、庫房在管理上,環(huán)境控制都是重中之重。庫房溫濕度自動監(jiān)測系統(tǒng)作為一種更為便捷的解決方案,已經(jīng)得到廣泛的應(yīng)用。 庫房溫濕度自動監(jiān)測
    的頭像 發(fā)表于 07-09 18:00 ?793次閱讀

    DHT11數(shù)字溫濕度傳感器產(chǎn)品手冊

    電子發(fā)燒友網(wǎng)站提供《DHT11數(shù)字溫濕度傳感器產(chǎn)品手冊.pdf》資料免費下載
    發(fā)表于 06-12 17:09 ?10次下載

    【原創(chuàng)】DHT11傳感器溫濕度監(jiān)測系統(tǒng)畢設(shè),論文、代碼、原理圖和仿真介紹

    設(shè)計要求 1.設(shè)計一個基于51單片機和DHT11傳感器的溫濕度監(jiān)測系統(tǒng)2.傳感器DHT11
    發(fā)表于 03-13 00:53

    溫濕度監(jiān)測聯(lián)網(wǎng)系統(tǒng)解決方案

    產(chǎn)品質(zhì)量下降,甚至產(chǎn)生嚴重的經(jīng)濟損失。因此,對溫濕度進行監(jiān)測,可以確保產(chǎn)品質(zhì)量,降低生產(chǎn)成本,提高企業(yè)效益。 基于聯(lián)網(wǎng)技術(shù)、無線通信技術(shù)、邊緣計算技術(shù),
    的頭像 發(fā)表于 02-28 16:02 ?958次閱讀
    <b class='flag-5'>溫濕度</b><b class='flag-5'>監(jiān)測</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>系統(tǒng)</b>解決方案
    主站蜘蛛池模板: 日本一区二区高清免费不卡 | 成年人一级毛片 | 一区二区免费看 | 无遮挡很爽很污很黄很色的网站 | 欧美色穴| 看大片全色黄大色黄 | 国产大乳孕妇喷奶水在线观看 | 在线观看视频一区二区 | 香焦视频在线观看黄 | 国产亚洲一区二区精品 | 午夜宅男在线视频 | 日本三级全黄三级a | 亚洲成人免费在线 | 99精品国产高清自在线看超 | 天天操天天插 | 老师你好滑下面好湿h | 天堂一区二区在线观看 | 天天干天天骑 | 亚洲精品久久久久午夜三 | 91网址在线播放 | 在线天堂网www资源种子 | 亚洲春色在线 | 啪啪网视频| 91男人| 久久久久国产精品免费网站 | 国产午夜毛片v一区二区三区 | 色国产在线视频一区 | 三级黄色录像 | 手机在线观看你懂的 | 性高清| 色天使色婷婷在线影院亚洲 | 免费视频大全 | china国语对白刺激videos chinese国产videoxx实拍 | 五月天丁香花婷婷 | 亚洲97| 怡红院日本一道日本久久 | 丁香婷婷基地 | 日本视频网站在线www色 | 69国产成人精品午夜福中文 | 三级理论在线播放大全 | 欧美色吧视频在线观看 |