ESP8266環境監測系統+制作手機App在線實時顯示


原理講解

原理簡述:利用發布訂閱模式。第一步,先ESP8266獲取各種傳感器數值,第二步,新建主題,然后esp8266往這個主題發送消息,第三步。app inventor 訂閱這個主題,因為app inventor 制作的app 訂閱了這個主題,就可以收到來自這個主題的消息,也就是可以收到各種傳感器數值。

關於發布訂閱:

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

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

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

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

ESP8266讀取各種傳感器數值

由於大家的傳感器不一樣,這里就不統一做例程了,在程序里直接使用了虛擬數值,大家知道就好。

 /*****************獲取到的傳感器數值*****************/
      //為了演示,定義了多種類型的數據,可根據自己傳感器自行選擇
      int data1 = 32;
      float data2 = 27.8;
      unsigned int data3 = 45;
      unsigned char data4 = 26;
      double data5 = 99.12;
      String data6 = "ON";

這里只定義了6個數值,當然可以根據自己需要隨意增加或者減少傳感器個數,數據類型可自行隨意修改int、float、double 、String類型等等。

傳感器數據推送到雲端

ESP8266示例程序下載:點擊下載

如果上一步傳感器數據可以成功讀取,那么就可以在上版的基礎上,把數據上傳到雲端。

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

//WIFI名稱,區分大小寫,不要寫錯
#define DEFAULT_STASSID  "newhtc"
//WIFI密碼
#define DEFAULT_STAPSW "qq123456"
//用戶私鑰,可在控制台獲取,修改為自己的UID
String UID = "4d9ec35xxxxxxxxxxxxxxxxxxxxxxxxx";
//主題名字,可在控制台新建
String TOPIC = "mytemp";


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

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

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

  • 第一輸入主題,字母或數字或字母+數字組合。
  • 點擊創建主題。

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

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

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

      /*****************獲取到的傳感器數值*****************/
      //為了演示,定義了多種類型的數據,可根據自己傳感器自行選擇
      int data1 = 32;
      float data2 = 27.8;
      unsigned int data3 = 45;
      unsigned char data4 = 26;
      double data5 = 99.12;
      String data6 = "ON";
      /*********************數據上傳*******************/
      String upstr = "";
      upstr = "cmd=2&uid="+UID+"&topic="+TOPIC+"&msg=#"+data1+"#"+data2+"#"+data3+"#"+data4+"#"+data5+"#"+data6+"#\r\n";
      sendtoTCPServer(upstr);
      upstr = "";
    }

數據上傳時用#號進行了封裝,用以方便app收到數據后進行數據字符串分割,發送到服務器的數據就是這樣的:
cmd=2&uid=8e91e806f3f898e0c3de5b37bf439388&topic=mytemp&msg=#32#27.80#45#26#456.12#ON#,數據部分用#號進行了包裹。

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

在這里插入圖片描述

app inventor 制作app 接收實時數據

安裝appInventor 點擊安裝

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

app inventor 程序下載:點擊下載

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

app

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

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

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

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

app

關鍵程序講解

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

接收到帶傳感器的數據后,依照#號對字符串進行分割,有幾個數值,就分割幾次,自己要記住第幾個數值代表哪種傳感器就行了,比如要記住data1是溫度,data2是濕度等等,這里的分割次數需要和上傳的數據個數相等,有6個數值,就分割6次,7個數值就分割7次,就是依次增加或者減少就行。

當屏幕初始化時,會先訂閱主題,只有訂閱了這個主題,就可以實時收到發到該主題的消息,cmd=1是訂閱指令,就是訂閱主題的意思;cmd=9是遺囑指令,就是獲取服務器保存的數值,關於具體指令格式,可以在接入文檔了解:接入文檔

在這里插入圖片描述

效果展示

在這里插入圖片描述

app可實時展示當前各種傳感器信息,可做遠程監控,手機只要有網絡就可以收到數據信息。不管是2G 3G 4G WIFI都行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM