STM32-溫濕度上傳OneNET項目

一、項目需求

使用 ESP8266 連接 OneNET 云平臺,并通過 MQTT 協議上傳 DHT11 獲取的溫濕度值。

二、項目框圖

三、DHT11工作原理

參考于良許嵌入式手把手教你玩轉DHT11(原理+驅動) | 良許嵌入式

3.1 正常工作驗證 #??

上電后,「電源指示燈/POWER」紅燈亮,表示上電成功,正常工作。?

3.2 DHT11工作時序 #???

3.2.1 整體工作時序 #???

DHT11 整體工作時序為:主機發送開始信號、DHT11 響應輸出、主機接收 40bit 數據(濕度數據+溫度數據+校驗值),結束信號(可選)。

具體過程如下:?

1.? 總線空閑狀態為高電平,主機拉低總線等待 DHT11 響應, 主機把總線拉低必須大于 18ms,保證 DHT11 能檢測到起始信號;?

2.? 主機發送開始信號結束后,拉高總線電平并延時等待 20-40us 后,讀取 DHT11 的響應信號;??

3.? DHT11 接收到主機的開始信號后,等待微處理器開始信號結束,發送 80us 低電平響應信號;??

4.? DHT11 發送 80us 高電平準備發送數據;??

5.? DHT11 發送 40bit 數據(濕度數據+溫度數據+校驗值)。???

過程 主機 DHT11? 1 拉低>18ms?? 2 拉高20~40us?? 3?? 響應 80us 低電平? 4?? 拉高 80us? 5?? 發送 40bit 數據(濕度數據+溫度數據+校驗值)?

?

3.2.2 起始及響應信號 #???

總流程講完介紹一下細分流程: 首先主機拉低總線至少 18ms,然后再拉高總線,延時 20~40us,此時起始信號(有時也叫復位信號)發送完畢。?

DHT11 檢測到復位信號后,觸發一次采樣,并拉低總線 80us 表示響應信號,告訴主機數據已經準備好了。

DHT11 之后拉高總線 80us,然后開始傳輸數據。如果檢測到響應信號為高電平,則 DHT11 初始化失敗,請檢查線路是否連接正常。?

3.2.3 讀時序 #???

DHT11 開始傳輸數據。每 1bit 數據都以 50us 低電平開始,告訴主機開始傳輸一位數據了。DHT11 以高電平的長短定義數據位是 0 還是 1:

當 50us 低電平過后拉高總線,高電平持續 26~28us 表示 0,高電平持續 70us 表示數據 1。?

當最后 1bit 數據傳送完畢后,DHT11 拉低總線 50us,表示數據傳輸完畢,隨后總線由上拉電阻拉高進入空閑狀態。?

位數據0表示方式: 以 50us 低電平開始,高電平持續 26~28us 表示 0。

位數據1表示方式: 以 50us 低電平開始,高電平持續 70us 表示 1。?

3.3 DHT11數據格式 #??

DHT11 的 DATA 傳輸一次完整的數據為 40bit,按照高位在前,低位在后的順序傳輸。?

數據格式為:8bit 濕度整數數據 + 8bit 濕度小數數據 + 8bit 溫度整數數據 + 8bit 溫度小數數據 + 8bit 校驗位,

一共 5 字節(40bit)數據。 正常情況下,前四個字節的和剛好與校驗位相等,通過這種機制可以保證數據傳輸的準確性。

四、項目實現

復制項目文件19-串口打印

重命名59-DHT11

新建文件dht11

dht11.c

dht11.h

打開項目工程

加載文件

書寫頭文件

編譯

編程思路:

1、之前的模塊都需要init函數,而這里的dht11反倒不需要init函數,因為dht11只有一個data的IO口。DHT11的一個data口用于輸入和輸出,所以需要對DHT11的IO口做一個配置,則需要:dht11_gpio_input,dht11_gpio_output兩個函數。

2、接下來是DHT11的起始信號及響應信號需要:dht11_start

3、讀時序:dht11_read_byte

4、將讀出的數據,存儲下來,用指針(地址)承接:dht11_read

5、因為是單總線協議,所以先進行一個封裝

??????? 判斷1位數據,當IO口電平等于高電平的時候,延時50微妙,判斷當下是高電平還是低電平,如果是高電平,則傳出來的數據是1,否則就是0,

while(!DHT11_DQ_IN);
??????? delay_us(50);
??????? if(DHT11_DQ_IN == 1)
??????? {
??????????? temp = 1;
??????????? while(DHT11_DQ_IN);
??????? }
??????? else
??????????? temp = 0;

??????? 我們知道,一個字節有8位,所以這段代碼要執行八次,才是一位,定義一個UINT8_T的變量,這個變量有8位,將受到的一位字節存放在這個變量的像左移一位。

??? for(i=0; i<8; i++){
??????? while(!DHT11_DQ_IN);
??????? delay_us(50);
??????? if(DHT11_DQ_IN == 1)
??????? {
??????????? temp = 1;
??????????? while(DHT11_DQ_IN);
??????? }
??????? else
??????????? temp = 0;
??????? byte = byte << 1;
??????? byte |= temp;
??? }

上面這個函數,是用來返回發送過來的一個字節,DHT11會返回5個字節,所以上述操作,要執行5次,并且第五位是校驗位,前四位的和等于第五位時,才證明沒有發送錯數據,官方文檔要求,DH11不可以一直在返回數據,需要延長2s


??? for(i=0; i<5; i++)
??? {
??????? dht11_data[i] = dht11_read_byte();
??? }
??? if(dht11_data[0]+dht11_data[1]+dht11_data[2]+dht11_data[3] == dht11_data[4])
??? {
??????? memcpy(result,dht11_data,4);//將dht11_data中四個數據復制給result
??????? printf("濕度:%d.%dRH ,",dht11_data[0],dht11_data[1]);
??????? printf("溫度:%d.%d℃ \r\n",dht11_data[2],dht11_data[3]);
??? }
??? delay_ms(2000);

????????在esp8266中需要重寫esp8266_send_data函數,因為以前的esp8266_send_data函數是用來模仿printf,所以需要重寫函數,用來發送數據

//兩個參數分別是:要發送的數據,和要發送數據的長度
void esp8266_send_data(char *data,uint16_t len)
{
??? //清空發送緩沖區
??? esp8266_rx_clear();
??? //發送數據函數
??? HAL_UART_Transmit(&esp8266_handle,(unsigned char*)data,len,100);
}

在OneNet創建產品和設備

三元組很重要:產品id,設備id,密鑰

設備id的獲取,將設備導入出來,就會有一個表,其中有設備id

?將代碼中上面部分,按自己的東西改寫,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896213.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度首頁上線 DeepSeek 入口,免費使用

大家好&#xff0c;我是小悟。 百度首頁正式上線了 DeepSeek 入口&#xff0c;這一重磅消息瞬間在技術圈掀起了驚濤駭浪&#xff0c;各大平臺都被刷爆了屏。 百度這次可太給力了&#xff0c;PC 端開放僅 1 小時&#xff0c;就有超千萬人涌入體驗。這速度&#xff0c;簡直比火…

Ubuntu:wvp-GB28181-pro安裝、運行

參考 https://doc.wvp-pro.cn 下載源碼 GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一個基于GB28181-2016標準實現的網絡視頻平臺&#xff0c;支持NAT穿透&#xff0c;支持海康、大華、宇視等品牌的IPC、NVR、DVR接入。支持國標級聯&#xff0c;支持rtsp/rtm…

c++入門-------命名空間、缺省參數、函數重載

C系列 文章目錄 C系列前言一、命名空間二、缺省參數2.1、缺省參數概念2.2、 缺省參數分類2.2.1、全缺省參數2.2.2、半缺省參數 2.3、缺省參數的特點 三、函數重載3.1、函數重載概念3.2、構成函數重載的條件3.2.1、參數類型不同3.2.2、參數個數不同3.2.3、參數類型順序不同 前言…

Linux提權之計劃任務反彈shell提權(十一)

實驗環境還是一樣的 當獲取一個linux普通用戶的時&#xff0c;查看計劃任務 首先我們退出root用戶 cat /etc/crontab crontab -l 查看當前用戶命令 /var/spool/cron/crontabs/root 這個目錄是root任務文件 默認是不是root權限是 看不到 tail -f /var/log/syslog 咋們切換用…

論文解讀 | AAAI'25 Cobra:多模態擴展的大型語言模型,以實現高效推理

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; 點擊 閱讀原文 觀看作者講解回放&#xff01; 個人信息 作者&#xff1a;趙晗&#xff0c;浙江大學-西湖大學聯合培養博士生 內容簡介 近年來&#xff0c;在各個領域應用多模態大語言模型&#xff08;MLLMs&…

ai-financial-agent - 為金融投資打造的AI代理

探索人工智能在投資研究中的應用。本項目僅用于**教育**目的&#xff0c;不用于真實交易或投資。 作者聲明&#xff1a; 本項目僅用于教育和研究目的。 不用于真實交易或投資不提供任何保證或擔保過去的表現并不代表未來的結果Creator 對經濟損失不承擔任何責任咨詢財務顧問…

Open WebUI選擇模型為空,解決辦法(for DeepSeek)

標簽&#xff1a; DeepSeek&#xff1b; Open WebUI&#xff1b; 問題&#xff1a;Open WebUI選擇模型為空&#xff0c;解決辦法 &#xff08;for DeepSeek&#xff09; 操作系統&#xff1a;Ubuntu 22 硬件&#xff1a;臺式電腦 Ubuntu 22系統&#xff0c;DeepSeek安裝成功&…

歐幾里得算法第二彈---計算多個數的最大公約數

如果要求多個數的 GCD&#xff0c;可以先求前兩個數的 GCD&#xff0c;然后用這個結果與下一個數求 GCD&#xff0c;依次類推。 為什么可以用前兩個數的 GCD 與下一個數繼續求 GCD&#xff0c;從而得到所有數的 GCD 呢&#xff1f;&#xff08;之前我不知道&#xff0c;自己也沒…

掌握 ElasticSearch 組合查詢:Bool Query 詳解與實踐

掌握 ElasticSearch 組合查詢&#xff1a;Bool Query 詳解與實踐 一、引言 (Introduction)二、Bool 查詢基礎2.1 什么是 Bool 查詢&#xff1f;2.2 Bool 查詢的四種子句2.3 語法結構 三、Bool 查詢的四種子句詳解與示例3.1 must 子句3.2 filter 子句3.3 should 子句3.4 must_no…

【練習】【類似于子集問題】力扣491. 非遞減子序列/遞增子序列

題目 非遞減子序列 給你一個整數數組 nums &#xff0c;找出并返回所有該數組中不同的遞增子序列&#xff0c;遞增子序列中 至少有兩個元素 。你可以按 任意順序 返回答案。 數組中可能含有重復元素&#xff0c;如出現兩個整數相等&#xff0c;也可以視作遞增序列的一種特殊情況…

本地部署AI模型 --- DeepSeek(二)---更新中

目錄 FAQ 1.Failed to load the model Exit code: 18446744072635812000 FAQ 1.Failed to load the model Exit code: 18446744072635812000 問題描述&#xff1a; &#x1f972; Failed to load the model Error loading model. (Exit code: 18446744072635812000). Unkn…

開源嵌入式實時操作系統uC/OS-II介紹

一、uC/OS-II的誕生&#xff1a;從開源實驗到行業標桿 背景與起源 uC/OS-II&#xff08;Micro-Controller Operating System Version II&#xff09;誕生于1992年&#xff0c;由嵌入式系統先驅Jean J. Labrosse開發。其前身uC/OS&#xff08;1991年&#xff09;最初作為教學工…

Starlink衛星動力學系統仿真建模第七講-衛星姿軌控系統(Attitude and Orbit Control System, AOCS)設計規范

以下是一份衛星姿軌控系統&#xff08;Attitude and Orbit Control System, AOCS&#xff09;設計規范的框架和核心內容示例&#xff0c;供參考&#xff1a; 衛星姿軌控系統&#xff08;AOCS&#xff09;設計規范 1. 總則 1.1 目的 本規范旨在規定衛星姿軌控系統的設計要求、…

C++之旅-C++11的深度剖析(1)

目錄 前言/背景 1.C11的發展歷史 2.列表初始化 2.1 C98傳統的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3.右值引用 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延長生命周期 3.4 左值和右值的參數匹配 結束語 前言/背景 隨著現代軟件開發的快速發展…

什么是手機9008模式?如何進入9008

之前給大家分享了一些有關手機刷機的知識&#xff0c;今天給大家講一講如果刷機過程中不慎變磚應該如何應對&#xff08;當然了&#xff0c;希望大家都不會遇到&#xff09;&#x1f602;&#x1f604; 在給手機 Root 或刷機時&#xff0c;線刷 9008 指的是利用 高通 9008 模式…

單機上使用docker搭建minio集群

單機上使用docker搭建minio集群 1.集群安裝1.1前提條件1.2步驟指南1.2.1安裝 Docker 和 Docker Compose&#xff08;如果尚未安裝&#xff09;1.2.2編寫docker-compose文件1.2.3啟動1.2.4訪問 2.使用2.1 mc客戶端安裝2.2創建一個連接2.3簡單使用下 這里在ubuntu上單機安裝一個m…

怎么在Github上readme文件里面怎么插入圖片?

環境&#xff1a; Github 問題描述&#xff1a; 怎么在Github上readme文件里面怎么插入圖片&#xff1f; https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解決方案&#xff1a; 1.相對路徑引用 上傳圖片到倉庫 將圖片文件&#xff08;如 .png/.jpg&#xff…

Elasticsearch除了用作查找以外,還能可以做什么?

前言 Elasticsearch用于實時數據分析、日志存儲、業務智能等。還有日志與監控、多租戶和安全性。以及應用場景包括日志分析、公共數據采集、全文搜索、事件數據、數據可視化。處理錯誤拼寫和支持變體&#xff0c;不過這些可能還是屬于搜索優化。企業搜索、日志管理、應用監控、…

AIGC(生成式AI)試用 22 -- 跟著清華教程學習 - DeepSeek:從入門到精通

目標&#xff1a; 跟著清華教程學習DeepSeek同樣的問題分別嘗試使用DeepSeek和文心一言進行提問嘗試使用輔助工具完成學習中遇到的問題 個人理解&#xff1a; - AI&#xff0c;AI思維&#xff0c;像人一樣思考&#xff0c;越來越像人&#xff1f;參考數據宏大&#xff0c;思考…

[Windows] 全國油價實時查詢,可具體到城市

[Windows] 全國油價實時查詢&#xff0c;可具體到城市 鏈接&#xff1a;https://pan.xunlei.com/s/VOJnS3aOPeBwGaSvS0O0E1hwA1?pwdx83j# 出于代碼練習的目的&#xff0c;調用公共免費api做的py程序&#xff0c;已經一鍵打包&#xff0c;雙擊啟動即可 使用&#xff1a;選擇…