chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

機(jī)智云 ? 2022-04-25 14:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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


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


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


進(jìn)入正文

1、DHT11 簡要介紹

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

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

舉例:

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

2、時(shí)序分析(附代碼)

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

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

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

總線空閑:

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

MCU 發(fā)出請(qǐng)求信號(hào):

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

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

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

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

// 本驅(qū)動(dòng)采用 HAL 庫,us 級(jí)延時(shí)使用通用定時(shí)器實(shí)現(xiàn),對(duì) 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);   //主機(jī)拉高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會(huì)拉低40~80us
  {
    retry++;
    HAL_Delay_us(1);
  }   
if(retry >= 100)
return 1;
else
    retry = 0;

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

//從DHT11讀取一個(gè)位
//返回值: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讀取一個(gè)字節(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,校驗(yàn)和錯(cuò)誤
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;  // 校驗(yàn)和錯(cuò)誤
  }
else
return 1;
return 0;      
}

//初始化DHT11的 IO口, 同時(shí)檢測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)包含在機(jī)智云生成的代碼中(gizwits_product.c),我們直接使用 printf 進(jìn)行數(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ù)沒有問題,即可將機(jī)智云協(xié)議相關(guān)代碼移植進(jìn)工程中。

本文結(jié)束。


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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

    冷庫作為生鮮食品、醫(yī)藥試劑、化工原料等物資的核心存儲(chǔ)載體,溫濕度的穩(wěn)定性直接決定物資品質(zhì)與安全。傳統(tǒng)冷庫溫濕度管理存在諸多痛點(diǎn):人工巡檢效率低、誤差大,難以實(shí)現(xiàn) 24 小時(shí)全覆蓋監(jiān)測;溫濕度
    的頭像 發(fā)表于 01-19 16:57 ?284次閱讀

    【瑞薩FPB-RA6E2試用】【瑞薩FPB-RA6E2】Zephyr-驅(qū)動(dòng)-DHT11-溫濕度傳感器及設(shè)備樹理解

    【瑞薩FPB-RA6E2】Zephyr-驅(qū)動(dòng)-DHT11-溫濕度傳感器及設(shè)備樹理解 0、視頻教程 視頻教程地址: https://www.bilibili.com/video
    發(fā)表于 01-13 14:54

    【瑞薩RA6E2地奇星開發(fā)板試用】串口通信+DHT11測量溫濕度

    實(shí)現(xiàn)效果如上視頻。 首先先要了解DHT11溫濕度傳感器的原理。 DHT11溫濕度傳感器DHT11包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件。
    發(fā)表于 12-26 18:23

    【瑞薩RA6E2地奇星開發(fā)板試用】DHT11 測量溫濕度

    傳感器:DHT11 溫濕度傳感器 顯示屏:I2C 接口 OLED12864(128×64 分辨率,SSD1306 驅(qū)動(dòng))? 輔助工具:杜邦線、5V 電源(或開發(fā)板供電)、萬用表(可選
    發(fā)表于 12-19 18:50

    【瑞薩RA6E2地奇星開發(fā)板試用】串口打印DHT11溫濕度數(shù)據(jù)

    【瑞薩RA6E2地奇星開發(fā)板試用】串口打印DHT11溫濕度數(shù)據(jù) 本文介紹了 RA6E2 地奇星開發(fā)板驅(qū)動(dòng)
    發(fā)表于 12-07 16:20

    【上海晶珩睿莓1開發(fā)板試用體驗(yàn)】Home Assistant 聯(lián)網(wǎng)溫濕度計(jì)

    AHT10 傳感器; 環(huán)境配置:安裝 Python 工具庫,包括 i2c-tools 和 smbus2 ; AHT10 驅(qū)動(dòng)驅(qū)動(dòng) AHT10 傳感器、
    發(fā)表于 08-18 13:55

    基于聯(lián)網(wǎng)溫濕度監(jiān)測系統(tǒng)方案:構(gòu)建全域感知的智能環(huán)境網(wǎng)絡(luò)

    儲(chǔ)備糧; -精密制造:半導(dǎo)體車間1%濕度波動(dòng)引發(fā)30%良品率下降; 基于聯(lián)網(wǎng)溫濕度監(jiān)測系統(tǒng)
    的頭像 發(fā)表于 07-24 18:05 ?836次閱讀

    遠(yuǎn)程溫濕度測量與報(bào)警系統(tǒng):智能化環(huán)境監(jiān)控的核心解決方案

    溫濕度測量與報(bào)警系統(tǒng)應(yīng)運(yùn)而生——通過聯(lián)網(wǎng)(IoT)技術(shù)實(shí)現(xiàn)環(huán)境數(shù)據(jù)的無人值守監(jiān)測、超限即時(shí)報(bào)警與歷史可追溯分析,成為現(xiàn)代企業(yè)實(shí)現(xiàn)精細(xì)化運(yùn)營
    的頭像 發(fā)表于 07-22 17:04 ?579次閱讀

    基于聯(lián)網(wǎng)溫濕度監(jiān)測系統(tǒng)

    在醫(yī)藥冷鏈、智慧農(nóng)業(yè)、智能制造等領(lǐng)域,溫濕度失控輕則導(dǎo)致品質(zhì)下降,重則引發(fā)安全事故。傳統(tǒng)人工巡檢方式滯后性強(qiáng)、誤差率高,而聯(lián)網(wǎng)溫濕度監(jiān)測
    的頭像 發(fā)表于 07-08 16:52 ?624次閱讀

    聯(lián)網(wǎng)溫濕度監(jiān)控系統(tǒng)

    聯(lián)網(wǎng)溫濕度監(jiān)控系統(tǒng)作為現(xiàn)代智能化管理的重要工具,已廣泛應(yīng)用于農(nóng)業(yè)溫室、醫(yī)藥倉儲(chǔ)、數(shù)據(jù)中心、食品冷鏈等多個(gè)領(lǐng)域。其核心價(jià)值在于通過實(shí)時(shí)數(shù)據(jù)采集、智能分析和
    的頭像 發(fā)表于 07-07 17:36 ?853次閱讀

    常見的溫濕度傳感器類型?

    。 DHT11溫濕度傳感器 DHT11是一種常見的數(shù)字溫濕度傳感器,具有價(jià)格低廉、簡單易用的優(yōu)點(diǎn),但其精度和響應(yīng)速度較低。 HDC1080溫濕度
    發(fā)表于 06-24 09:24

    【RA4L1-SENSOR】DHT11溫濕度OLED顯示

    為I2C接口,開漏輸出 P107 設(shè)置為 DHT11 單總線接口 OLED 驅(qū)動(dòng)代碼如下: void OLED_SSD1306_Init(void) { u8 i
    發(fā)表于 06-12 11:02

    用樹莓派RP2350 DIY 桌面動(dòng)態(tài)溫濕度計(jì)

    桌面動(dòng)態(tài)溫濕度計(jì)本文介紹了DFrobotBeetleRP2350開發(fā)板結(jié)合DHT11模塊、鋰電池模塊、隨機(jī)眨眼動(dòng)畫,實(shí)現(xiàn)OLED顯示的桌面動(dòng)態(tài)溫濕度計(jì)的項(xiàng)目設(shè)計(jì)。一、項(xiàng)目介紹本項(xiàng)目包括工作原理:ADC電壓采集與電量轉(zhuǎn)換工程調(diào)試:
    的頭像 發(fā)表于 05-27 08:05 ?802次閱讀
    用樹莓派RP2350 DIY 桌面動(dòng)態(tài)<b class='flag-5'>溫濕度</b>計(jì)

    LoRa無線技術(shù)的溫濕度監(jiān)測預(yù)警系統(tǒng)

    LoRa無線技術(shù)的溫濕度監(jiān)測預(yù)警系統(tǒng)采用LoRa采集器和LoRa網(wǎng)關(guān)實(shí)現(xiàn)監(jiān)控區(qū)域內(nèi)的全覆蓋,同時(shí)在倉儲(chǔ)區(qū)各個(gè)數(shù)據(jù)采集節(jié)點(diǎn)安裝溫濕度傳感器,實(shí)現(xiàn)對(duì)監(jiān)測
    的頭像 發(fā)表于 05-14 16:06 ?758次閱讀
    LoRa無線技術(shù)的<b class='flag-5'>溫濕度</b><b class='flag-5'>監(jiān)測</b>預(yù)警<b class='flag-5'>系統(tǒng)</b>

    【RA-Eco-RA4M2開發(fā)板評(píng)測】DHT11溫濕度OLED顯示

    DHT11 單總線接口 OLED 驅(qū)動(dòng)代碼如下: void OLED_SSD1306_Init(void) { u8 i; OLED_SSD1306_IIC_Init(); for (i=0
    發(fā)表于 05-11 13:53