ESP8266讀DHT11溫濕度,開發(fā)微信小程序?qū)崟r(shí)顯示

第一、原理講解

原理簡(jiǎn)述:利用發(fā)布訂閱模式糕篇。第一步,先讀取DHT11溫濕度數(shù)值十偶,第二步蚂会,新建主題,然后esp8266往這個(gè)主題發(fā)送消息作岖,第三步唆垃。小程序通過(guò)http API接口獲取數(shù)據(jù)。小程序控制原理:esp8266訂閱了一個(gè)主題痘儡,小程序往這個(gè)主題發(fā)消息辕万,esp8266就可以收到消息,就可以執(zhí)行相關(guān)控制指令了(開/關(guān)函數(shù))

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

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

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

通俗的來(lái)講:就是像郵件訂閱的場(chǎng)景,什么意思呢砖茸,也就是說(shuō)100個(gè)人訂閱了你的博客隘擎,如果博主發(fā)表了文章,那么100個(gè)人就會(huì)同時(shí)收到通知郵件凉夯,訂閱/發(fā)布模式就是這樣的原理嵌屎。

如果還不理解的話再通俗講一下,就像生活中聽收音機(jī)恍涂,要想聽收音機(jī)宝惰,肯定就是調(diào)頻啦,只有在正確的頻道上面再沧,我們才能聽得到好聽的節(jié)目尼夺,所以說(shuō)訂閱首先要訂閱一個(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)擊跳轉(zhuǎn)

安裝庫(kù)
本案例使用一個(gè)非常簡(jiǎn)單易用且與ESP8266配合使用的是Simple DHT傳感器庫(kù)『巧冢可以通過(guò)Arduino IDE Library Manager輕松安裝該庫(kù)赁濒。
在 arduino IDE上方選項(xiàng)處----> 工具--->管理庫(kù),然后直接搜索dht11即可孟害。點(diǎn)擊安裝庫(kù)拒炎,如下圖:

在這里插入圖片描述

測(cè)試程序:

#include <SimpleDHT.h>

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

void setup() {
  Serial.begin(115200);
}

void loop() {
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  
  // DHT11 sampling rate is 1HZ.
  delay(1500);
}

正常工作的話,串口會(huì)正常輸出的纹坐,如下圖所示:

在這里插入圖片描述

第三枝冀、溫濕度推送到云端

如果上一步的溫濕度可以讀取輸出舞丛,那么就可以在上版的基礎(chǔ)上,把數(shù)據(jù)上傳到云端果漾。

增加了按鈕控制球切,數(shù)據(jù)用#號(hào)包裹,以便app采用字符串切割绒障,分割出來(lái)數(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)擊下載 http://www.cloud.bemfa.com/zip/dht11_LED.zip

需要修改的地方

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

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

///*********************************************///

巴法創(chuàng)客云控制臺(tái) 新建一個(gè)主題,主題名字隨意损拢,例如temp,本實(shí)例用用temp陌粹,使用示例代碼時(shí)應(yīng)修改為自己的主題名字,字母或數(shù)字或字母加數(shù)字組合福压。UID為用戶私鑰掏秩,在 巴法創(chuàng)客云控制臺(tái) 注冊(cè)登陸后可獲得。
登陸完成后隧膏,可在控制臺(tái)看到自己的私鑰UID哗讥,如圖所示:

在這里插入圖片描述

創(chuàng)建主題,在控制臺(tái)胞枕,可創(chuàng)建主題。

  • 第一輸入主題魏宽,字母或數(shù)字或字母+數(shù)字組合腐泻。
  • 點(diǎn)擊創(chuàng)建主題,要?jiǎng)?chuàng)建兩個(gè)主題队询,一個(gè)主題用來(lái)傳遞傳感器數(shù)據(jù)派桩,另一個(gè)主題用來(lái)進(jìn)行LED燈的控制。在本例程中一個(gè)主題名字是:temp 蚌斩,另一個(gè)主題名字是:light002铆惑,可自定義或修改,不過(guò)下方微信小程序里面的主題名字要和esp8266的主題保持一致,以便正常的往同一個(gè)主題發(fā)布訂閱员魏。
在這里插入圖片描述

WIFI名稱為自己的路由器WIFI名稱丑蛤,區(qū)分大小寫,寫錯(cuò)會(huì)導(dǎo)致連接不上網(wǎng)絡(luò)的撕阎。

例程中受裹,每?jī)擅肷蟼饕淮螖?shù)據(jù):

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

      /*****************獲取DHT11 溫濕度*****************/
      // read without samples.
      byte temperature = 0;
      byte humidity = 0;
      int err = SimpleDHTErrSuccess;
      if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
        Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
        return;
      }
      
      /*********************數(shù)據(jù)上傳*******************/
      String upstr = "";
      upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=#"+temperature+"#"+humidity+"#"+bt_status+"#\r\n";
      sendtoTCPServer(upstr);
      upstr = "";
    }

如果路由器有網(wǎng)絡(luò)的話,數(shù)據(jù)會(huì)自動(dòng)上傳虏束,可在巴法創(chuàng)客云控制臺(tái) 刷新網(wǎng)頁(yè)棉饶,即可看到上傳的數(shù)據(jù)。如下圖所示:

在這里插入圖片描述

數(shù)據(jù)上傳時(shí)用#號(hào)進(jìn)行了封裝镇匀,27是溫度照藻,24是濕度,off是上傳的燈的狀態(tài)汗侵。

第四幸缕、微信小程序開發(fā)

在 微信公眾平臺(tái)注冊(cè)小程序賬號(hào),拿到小程序 appid晃择,長(zhǎng)的大概是這樣:wx34a2063de5cec04b冀值,下面導(dǎo)入項(xiàng)目的時(shí)候會(huì)用到。

右側(cè)點(diǎn)擊 -開發(fā)--》開發(fā)設(shè)置--》下方服務(wù)器域名處宫屠,點(diǎn)擊修改列疗,在request合法域名處,添加域名https://api.bemfa.com/ 保存提交即可浪蹂。如下圖抵栈。

在這里插入圖片描述

下載安裝微信開發(fā)者工具。
下載demo示例程序坤次。下載地址: 點(diǎn)擊下載

打開微信開發(fā)者工具古劲,小程序項(xiàng)目,導(dǎo)入項(xiàng)目缰猴。在目錄處選擇剛剛下載解壓的demo示例程序产艾,AppID處填入你的小程序AppID,然后點(diǎn)擊下方導(dǎo)入即可滑绒。如下圖闷堡。

在這里插入圖片描述

本示例程序非常簡(jiǎn)單,各位大神可以繼續(xù)開發(fā)添加各種功能疑故,添加背景杠览,優(yōu)化色彩等等,如果只是簡(jiǎn)單使用纵势,只需修改/pages/index/index.js 文件中uid 和topic 信息為自己的即可踱阿,這里的uid和topic需要和esp8266填入的uid和topic相同管钳,這里有兩個(gè)主題,一個(gè)用于傳輸溫度和濕度软舌,一個(gè)用于控制LED才漆。如下圖。

在這里插入圖片描述

修改完畢后葫隙,ctrl+s 保存修改栽烂。可以點(diǎn)擊左邊屏幕上的按鈕進(jìn)行調(diào)試恋脚,如下圖腺办。

在這里插入圖片描述

console控制臺(tái)可以查看小程序的調(diào)試信息。默認(rèn)每2秒會(huì)自動(dòng)請(qǐng)求一下服務(wù)器上的數(shù)據(jù)糟描,查看esp8266的狀態(tài)信息怀喉。點(diǎn)擊打開或者關(guān)閉按鈕,打開esp8266串口調(diào)試助手船响,可查看esp8266是否收到指令躬拢,如果第一步esp8266已聯(lián)網(wǎng),都是可以收到信息的见间。

如果界面和其他功能都開發(fā)完畢聊闯。可以點(diǎn)擊微信開發(fā)者工具的上面的上傳按鈕米诉,如下圖菱蔬。


在這里插入圖片描述

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

在這里插入圖片描述
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卓囚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诅病,更是在濱河造成了極大的恐慌哪亿,老刑警劉巖粥烁,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蝇棉,居然都是意外死亡讨阻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門篡殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钝吮,“玉大人,你說(shuō)我怎么就攤上這事板辽∑媸荩” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵劲弦,是天一觀的道長(zhǎng)耳标。 經(jīng)常有香客問我,道長(zhǎng)邑跪,這世上最難降的妖魔是什么次坡? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮画畅,結(jié)果婚禮上砸琅,老公的妹妹穿的比我還像新娘。我一直安慰自己轴踱,他們只是感情好症脂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寇僧,像睡著了一般摊腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘁傀,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天兴蒸,我揣著相機(jī)與錄音,去河邊找鬼细办。 笑死橙凳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笑撞。 我是一名探鬼主播岛啸,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茴肥!你這毒婦竟也來(lái)了坚踩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓤狐,失蹤者是張志新(化名)和其女友劉穎瞬铸,沒想到半個(gè)月后批幌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗓节,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年荧缘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦宣。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡截粗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸵隧,到底是詐尸還是另有隱情绸罗,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布掰派,位于F島的核電站从诲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏靡羡。R本人自食惡果不足惜系洛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望略步。 院中可真熱鬧描扯,春花似錦、人聲如沸趟薄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杭煎。三九已至恩够,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羡铲,已是汗流浹背蜂桶。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留也切,地道東北人扑媚。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像雷恃,于是被迫代替她去往敵國(guó)和親疆股。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354