找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3479|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

開源:ESP8266讀DHT11溫濕度,小程序?qū)崟r(shí)顯示

  [復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 3 黑幣 回復(fù)本帖可獲得 3 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:601884 發(fā)表于 2020-7-16 12:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
第一、原理簡述
原理簡述:利用發(fā)布訂閱模式。第一步,先讀取DHT11溫濕度數(shù)值,第二步,新建主題,然后esp8266往這個(gè)主題發(fā)送消息,第三步。小程序通過http API接口獲取數(shù)據(jù)。小程序控制原理:esp8266訂閱了一個(gè)主題,小程序往這個(gè)主題發(fā)消息,esp8266就可以收到消息,就可以執(zhí)行相關(guān)控制指令了(開/關(guān)函數(shù))

關(guān)于發(fā)布訂閱:

訂閱(訂閱):訂閱給定的一個(gè)主題/頻道的信息。
發(fā)布(發(fā)布)將信息發(fā)送到指定的主題/頻道。

只有訂閱該主題的設(shè)備才可以收到發(fā)往該主題的消息。

通俗的來講:就是像郵件訂閱的場景,什么意思呢,也就是說100個(gè)人訂閱了你的博客,如果博主發(fā)表了文章,那么100個(gè)人就會(huì)同時(shí)收到通知郵件,訂閱/發(fā)布模式就是這樣的原理。

如果還不理解的話再通俗講一下,就像生活中聽收音機(jī),要想聽收音機(jī),肯定就是調(diào)頻啦,只有在正確的頻道上面,我們才能聽得到好聽的節(jié)目,所以說訂閱首先要訂閱一個(gè)頻道/主題,只有訂閱了該主題,我們才能收到發(fā)往該頻道/主題的消息。



程序講解:在本示例中,ESP8266 有兩個(gè)角色,一個(gè)是temp(傳感器數(shù)據(jù))主題消息的發(fā)布者,esp8266往這個(gè)主題推送消息,小程序就可以收到傳感器數(shù)據(jù)了。
esp8266聯(lián)網(wǎng)后,訂閱light002,手機(jī)往這個(gè)主題推送消息,esp8266就能收到手機(jī)的控制的指令了。

第二、ESP8266讀取DHT11

這里使用的是D4口。
本demo 是利用arduino IDE開發(fā),關(guān)于arduino IDE 的ESP8266環(huán)境配置可參考:環(huán)境配置: (請手工把點(diǎn)替換成.)點(diǎn)擊跳轉(zhuǎn)
安裝庫
本案例使用一個(gè)非常簡單易用且與ESP8266配合使用的是Simple DHT傳感器庫?梢酝ㄟ^Arduino IDE Library Manager輕松安裝該庫。
在 arduino IDE上方選項(xiàng)處----> 工具--->管理庫,然后直接搜索dht11即可。點(diǎn)擊安裝庫,如下圖:
測試程序:
  1. #include <SimpleDHT.h>

  2. // for DHT11,
  3. //      VCC: 5V or 3V
  4. //      GND: GND
  5. //      DATA: 2
  6. int pinDHT11 = D4;
  7. SimpleDHT11 dht11(pinDHT11);

  8. void setup() {
  9.   Serial.begin(115200);
  10. }

  11. void loop() {
  12.   // start working...
  13.   Serial.println("=================================");
  14.   Serial.println("Sample DHT11...");
  15.   
  16.   // read without samples.
  17.   byte temperature = 0;
  18.   byte humidity = 0;
  19.   int err = SimpleDHTErrSuccess;
  20.   if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
  21.     Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
  22.     return;
  23.   }
  24.   
  25.   Serial.print("Sample OK: ");
  26.   Serial.print((int)temperature); Serial.print(" *C, ");
  27.   Serial.print((int)humidity); Serial.println(" H");
  28.   
  29.   // DHT11 sampling rate is 1HZ.
  30.   delay(1500);
  31. }
復(fù)制代碼

正常工作的話,串口會(huì)正常輸出的,如下圖所示:
第三、溫濕度推送到云端
如果上一步的溫濕度可以讀取輸出,那么就可以在上版的基礎(chǔ)上,把數(shù)據(jù)上傳到云端。
增加了按鈕控制,數(shù)據(jù)用#號(hào)包裹,以便app采用字符串切割,分割出來數(shù)據(jù),&msg=#23#80#on#\r\n,即#溫度#濕度#按鈕狀態(tài)#,app端會(huì)根據(jù)#號(hào)分割字符串進(jìn)行取值,以便顯示。
如果上傳的數(shù)據(jù)不止溫濕度,可在#號(hào)后面繼續(xù)添加&msg=#23#80#data1#data2#data3#data4#\r\n,app字符串分割的時(shí)候,要根據(jù)上傳的數(shù)據(jù)進(jìn)行分割
升級(jí)版程序下載:
(請手工把點(diǎn)替換成.)點(diǎn)擊下載 (請手工把點(diǎn)替換成.)www.cloud.bemfa點(diǎn)com/zip/dht11_LED.zip
需要修改的地方

  1. ///****************需要修改的地方*****************///

  2. //WIFI名稱,區(qū)分大小寫,不要寫錯(cuò)
  3. #define DEFAULT_STASSID  "newhtc"
  4. //WIFI密碼
  5. #define DEFAULT_STAPSW "qq123456"
  6. //用戶私鑰,可在控制臺(tái)獲取,修改為自己的UID
  7. String UID = "7d54f85af42976ee3c2693e692a6bb59";
  8. //主題名字,可在控制臺(tái)新建
  9. String TOPIC = "temp"; //用于傳輸溫濕度的主題
  10. //DHT11引腳值
  11. int pinDHT11 = D4;  //連接dht11的引腳
  12. //單片機(jī)LED引腳值
  13. const int LED_Pin = D2;  //假設(shè)連接led的引腳
  14. //主題名字,可在控制臺(tái)新建
  15. String TOPIC2  = "light002";  //用于led控制的主題

  16. ///*********************************************///
復(fù)制代碼

在(請手工把點(diǎn)替換成.)巴法創(chuàng)客云控制臺(tái) 新建一個(gè)主題,主題名字隨意,例如temp,本實(shí)例用用temp,使用示例代碼時(shí)應(yīng)修改為自己的主題名字,字母或數(shù)字或字母加數(shù)字組合。UID為用戶私鑰,在 (請手工把點(diǎn)替換成.)巴法創(chuàng)客云控制臺(tái) 注冊登陸后可獲得。
登陸完成后,可在控制臺(tái)看到自己的私鑰UID,如圖所示:
創(chuàng)建主題,在控制臺(tái),可創(chuàng)建主題。
  • 第一輸入主題,字母或數(shù)字或字母+數(shù)字組合。
  • 點(diǎn)擊創(chuàng)建主題,要?jiǎng)?chuàng)建兩個(gè)主題,一個(gè)主題用來傳遞傳感器數(shù)據(jù),另一個(gè)主題用來進(jìn)行LED燈的控制。在本例程中一個(gè)主題名字是:temp ,另一個(gè)主題名字是:light002,可自定義或修改,不過下方小程序里面的主題名字要和esp8266的主題保持一致,以便正常的往同一個(gè)主題發(fā)布訂閱。
WIFI名稱為自己的路由器WIFI名稱,區(qū)分大小寫,寫錯(cuò)會(huì)導(dǎo)致連接不上網(wǎng)絡(luò)的。
例程中,每兩秒上傳一次數(shù)據(jù):

  1.     if(millis() - preHeartTick >= upDataTime){//上傳數(shù)據(jù)
  2.       preHeartTick = millis();

  3.       /*****************獲取DHT11 溫濕度*****************/
  4.       // read without samples.
  5.       byte temperature = 0;
  6.       byte humidity = 0;
  7.       int err = SimpleDHTErrSuccess;
  8.       if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
  9.         Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
  10.         return;
  11.       }
  12.       
  13.       /*********************數(shù)據(jù)上傳*******************/
  14.       String upstr = "";
  15.       upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=#"+temperature+"#"+humidity+"#"+bt_status+"#\r\n";
  16.       sendtoTCPServer(upstr);
  17.       upstr = "";
  18.     }
復(fù)制代碼

如果路由器有網(wǎng)絡(luò)的話,數(shù)據(jù)會(huì)自動(dòng)上傳,可在(請手工把點(diǎn)替換成.)巴法創(chuàng)客云控制臺(tái) 刷新網(wǎng)頁,即可看到上傳的數(shù)據(jù)。如下圖所示:
數(shù)據(jù)上傳時(shí)用#號(hào)進(jìn)行了封裝,27是溫度,24是濕度,off是上傳的燈的狀態(tài)。

第四、小程序開發(fā)
在 公眾平臺(tái)注冊小程序賬號(hào),拿到小程序 appid,長的大概是這樣:wx34a2063de5cec04b,下面導(dǎo)入項(xiàng)目的時(shí)候會(huì)用到。
右側(cè)點(diǎn)擊 -開發(fā)--》開發(fā)設(shè)置--》下方服務(wù)器域名處,點(diǎn)擊修改,在request合法域名處,添加域名(請手工把點(diǎn)替換成.)https://api.bemfa.com/ 保存提交即可。如下圖。
下載安裝開發(fā)者工具。
下載demo示例程序。下載地址: (請手工把點(diǎn)替換成.)https://cloud.bemfa點(diǎn)com/zip/mini/bemfa_temp_led.zip
打開開發(fā)者工具,小程序項(xiàng)目,導(dǎo)入項(xiàng)目。在目錄處選擇剛剛下載解壓的demo示例程序,AppID處填入你的小程序AppID,然后點(diǎn)擊下方導(dǎo)入即可。如下圖。
本示例程序非常簡單,各位大神可以繼續(xù)開發(fā)添加各種功能,添加背景,優(yōu)化色彩等等,如果只是簡單使用,只需修改/pages/index/index.js 文件中uid 和topic 信息為自己的即可,這里的uid和topic需要和esp8266填入的uid和topic相同,這里有兩個(gè)主題,一個(gè)用于傳輸溫度和濕度,一個(gè)用于控制LED。如下圖。
修改完畢后,ctrl+s 保存修改?梢渣c(diǎn)擊左邊屏幕上的按鈕進(jìn)行調(diào)試,如下圖。
console控制臺(tái)可以查看小程序的調(diào)試信息。默認(rèn)每2秒會(huì)自動(dòng)請求一下服務(wù)器上的,以便查看esp8266的狀態(tài)信息及傳感器數(shù)據(jù)。點(diǎn)擊打開或者關(guān)閉按鈕,打開esp8266串口調(diào)試助手,可查看esp8266是否收到指令,如果第一步esp8266已聯(lián)網(wǎng),都是可以收到信息的。
如果界面和其他功能都開發(fā)完畢?梢渣c(diǎn)擊開發(fā)者工具的上面的上傳按鈕,如下圖。

上傳成功后,再登陸剛剛注冊的公眾平臺(tái),在版本管理處,可以看到自己剛剛上傳的小程序,提交審核即可,等一天左右,一般都會(huì)通過,通過后登陸公眾平臺(tái),提交發(fā)布即可。如果是自己使用的,做好加上登陸驗(yàn)證功能,比如驗(yàn)證匹配一下某個(gè)字符串是否正確等等,不然小程序上線后別人也可以隨意控制了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:791737 發(fā)表于 2020-7-23 19:40 | 只看該作者
好東西,正打算搞esp8266
回復(fù)

使用道具 舉報(bào)

板凳
ID:470400 發(fā)表于 2020-10-29 09:22 | 只看該作者
不錯(cuò),很詳細(xì)資料教程
回復(fù)

使用道具 舉報(bào)

地板
ID:835347 發(fā)表于 2020-11-11 17:25 來自手機(jī) | 只看該作者
能連手機(jī)熱點(diǎn)嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:313791 發(fā)表于 2020-11-12 18:13 | 只看該作者
我用機(jī)智云做過類似的,您可以把代碼開源嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:585796 發(fā)表于 2021-4-7 21:00 | 只看該作者
這是巴法云平臺(tái)實(shí)例嘜
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表