ESP8266之DHT11溫溼度數據上傳+手機App反向控制

只上傳溫溼度數據的參考帖子

上傳各種監控數據的參考帖子

先上效果圖

界面過於簡陋,影響了美觀,可自行添加背景圖或者美化界面。

在這裏插入圖片描述

原理講解

原理簡述:利用發佈訂閱模式。第一步,先讀取DHT11溫溼度數值,第二步,新建主題,然後esp8266往這個主題發送消息,第三步。app inventor 訂閱這個主題,因爲app inventor 製作的app 訂閱了這個主題,就可收到來自這個主題的消息,也就是可以收到溫溼度數值。app控制原理:esp8266訂閱了一個主題,app往這個主題發消息,esp8266就可以收到消息,就可以執行相關控制指令了(開/關函數)

關於發佈訂閱:

訂閱(訂閱):訂閱給定的一個主題/頻道的信息。
發佈(發佈)將信息發送到指定的主題/頻道。

只有訂閱該主題的設備纔可以收到發往該主題的消息。

通俗的來講:就是像郵件訂閱的場景,什麼意思呢,也就是說100個人訂閱了你的博客,如果博主發表了文章,那麼100個人就會同時收到通知郵件,訂閱/發佈模式就是這樣的原理。

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

程序講解:在本示例中,ESP8266 有兩個角色,一個是temp(傳感器數據)主題消息的發佈者,esp8266往這個主題推送消息,手機app訂閱temp主題,就可以收到傳感器數據了。
esp8266聯網後,訂閱light002,手機往這個主題推送消息,esp8266就能收到手機的控制的指令了。

ESP8266讀取DHT11

在這裏插入圖片描述
這裏使用的是D4口。

本demo 是利用arduino IDE開發,關於arduino IDE 的ESP8266環境配置可參考:環境配置: 點擊跳轉

安裝庫
本案例使用一個非常簡單易用且與ESP8266配合使用的是Simple DHT傳感器庫。可以通過Arduino IDE Library Manager輕鬆安裝該庫。
在 arduino IDE上方選項處----> 工具—>管理庫,然後直接搜索dht11即可。點擊安裝庫,如下圖:

在這裏插入圖片描述

測試程序:

#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);
}

正常工作的話,串口會正常輸出的,如下圖所示:

在這裏插入圖片描述

溫溼度推送到雲端

如果上一步的溫溼度可以讀取輸出,那麼就可以在上版的基礎上,把數據上傳到雲端。

增加了按鈕控制,數據用#號包裹,以便app採用字符串切割,分割出來數據,&msg=#23#80#on#\r\n,即#溫度#溼度#按鈕狀態#,app端會根據#號分割字符串進行取值,以便顯示。

如果上傳的數據不止溫溼度,可在#號後面繼續添加&msg=#23#80#data1#data2#data3#data4#\r\n,app字符串分割的時候,要根據上傳的數據進行分割

升級版程序下載:

點擊下載 http://www.cloud.bemfa.com/zip/dht11_LED.zip

需要修改的地方

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

//WIFI名稱,區分大小寫,不要寫錯
#define DEFAULT_STASSID  "PDCN"
//WIFI密碼
#define DEFAULT_STAPSW "air123456"
//用戶私鑰,可在控制檯獲取,修改爲自己的UID
String UID = "4d9ec352e0376f2110a0c601a2857225";
//主題名字,可在控制檯新建
String TOPIC = "temp";
//DHT11引腳值
int pinDHT11 = D4;

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

巴法創客雲控制檯 新建一個主題,主題名字隨意,例如temp,本實例用用temp,使用示例代碼時應修改爲自己的主題名字,字母或數字或字母加數字組合。UID爲用戶私鑰,在 巴法創客雲控制檯 註冊登陸後可獲得。
登陸完成後,可在控制檯看到自己的私鑰UID,如圖所示:

在這裏插入圖片描述

創建主題,在控制檯,可創建主題。

  • 第一輸入主題,字母或數字或字母+數字組合。
  • 點擊創建主題,要創建兩個主題,一個主題用來傳遞傳感器數據,另一個主題用來進行LED燈的控制。在本例程中一個主題名字是:temp ,另一個主題名字是:light002,可自定義或修改,不過app裏面的主題要和esp8266的主題保持一致,以便正常的往同一個主題發佈訂閱。

在這裏插入圖片描述

WIFI名稱爲自己的路由器WIFI名稱,區分大小寫,寫錯會導致連接不上網絡的。

例程中,每兩秒上傳一次數據:

    if(millis() - preHeartTick >= upDataTime){//上傳數據
      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;
      }
      
      /*********************數據上傳*******************/
      String upstr = "";
      upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=#"+temperature+"#"+humidity+"#"+bt_status+"#\r\n";
      sendtoTCPServer(upstr);
      upstr = "";
    }

如果路由器有網絡的話,數據會自動上傳,可在巴法創客雲控制檯 刷新網頁,即可看到上傳的數據。如下圖所示:

在這裏插入圖片描述

數據上傳時用#號進行了封裝,27是溫度,24是溼度,off是上傳的燈的狀態。

app inventor 製作app 接收實時數據

在appInventor 點擊跳轉國內站創建賬號,並登陸。

本操作只提供一個app的demo,界面過於醜陋,大家可自由發揮更改界面。

app inventor 程序下載 點擊下載 https://www.cloud.bemfa.com/zip/aia/dht_led.zip

頂部導航欄,依次點擊(項目–>導入項目aia),選擇上一步驟下載的aia文件導入即可。點擊導入的項目,即可看到控制面板,面板主要分爲在組建設計和邏輯設計,用戶可在右上角進行模式切換。

app

(組建設計)面板可以向屏幕添加組建以進行二次開發。(邏輯面板)則進行相關邏輯編寫。

app
導入aia文件後,如果只是簡單使用,只需要修改兩個地方,一個是主題名字,一個是UID,均需開發者置換成自己的topic(主題名字)和UID(用戶私鑰),均可在創客雲控制檯獲取點擊跳轉

此處的主題topic應該和ESP8266程序裏面設定的主題修改爲一樣,不然會收不到消息。UID修改爲自己的私鑰。

在這裏插入圖片描述

界面還有功能之類的自己可以隨意加,更改好,下載apk文件即可。

app

關鍵程序講解

程序下載,修改關鍵參數後就可直接使用的,以下是關鍵程序講解:

在這裏插入圖片描述

接收到帶有溫溼度的數據後,依照#號對字符串進行分割,分割後的數據裏第二位是溫度,第三位是溼度,如上圖所示。

在這裏插入圖片描述

當屏幕初始化時,會先訂閱主題,只有訂閱了這個主題,就可以實時收到發到該主題的消息,cmd=1是訂閱指令,關於具體指令格式,可以在接入文檔瞭解:接入文檔

效果展示

界面過於簡陋,影響了美觀,可自行添加背景圖或者美化界面。
在這裏插入圖片描述

app可實時展示當前溫溼度信息,可做遠程監控,手機只要有網絡就可以收到數據信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章