找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3063|回復(fù): 0
收起左側(cè)

(app開源)STC89c51 + ESP8266 制作物聯(lián)網(wǎng)環(huán)境監(jiān)測(cè)系統(tǒng)

[復(fù)制鏈接]
ID:601884 發(fā)表于 2020-5-30 16:34 | 顯示全部樓層 |閱讀模式
第一 、先上效果圖

c51程序在第四步,app程序在第五步


第二、原理講解


原理簡(jiǎn)述:利用發(fā)布訂閱模式。第一步,先STC89c51獲取各種傳感器數(shù)值,第二步,新建主題,然后c51往這個(gè)主題發(fā)送消息,第三步。app inventor 訂閱這個(gè)主題,因?yàn)閍pp inventor 制作的app 訂閱了這個(gè)主題,就可以收到來自這個(gè)主題的消息,也就是可以收到各種傳感器數(shù)值。

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

訂閱(訂閱):訂閱給定的一個(gè)主題。

發(fā)布(發(fā)布)將信息發(fā)送到指定的主題。

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

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


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

在本例程中,c51借助ESP8266推送消息,app訂閱主題,就可以實(shí)時(shí)接收c51發(fā)來的消息了。

第三、c51讀取各種傳感器數(shù)值

由于大家的傳感器不一樣,這里就不統(tǒng)一做例程了,在程序里直接使用了虛擬數(shù)值,大家知道就好。


  1. <font face="Microsoft YaHei, SF Pro Display, Roboto, Noto, Arial, PingFang SC, sans-serif"><font color="#4d4d4d">        char data1[] = "32";             ////為了演示定義的模擬數(shù)據(jù),可根據(jù)自己傳感器自行采集數(shù)據(jù)
  2.         char data2[] = "27.8";                //
  3.         char data3[] = "45";
  4.         char data4[] = "26";
  5.         char data5[] = "99.12";
  6.         char data6[] = "ON";
  7. </font></font>
復(fù)制代碼


第四、傳感器數(shù)據(jù)推送到云端

c51示例程序下載:http://cloud.bemfa點(diǎn)com/zip/c51_bemfa_cloud.zip

程序說明,波特率9600,晶振11.0592

由于ESP8266-01默認(rèn)波特率是115200,需要先手動(dòng)調(diào)節(jié)esp8266-01的波特率。

調(diào)整方法:ESP8266-01連接到usb轉(zhuǎn)ttl

五根線

esp8266---------UsbTTL

tx----------rx

rx----------tx

vcc-------3.3v

gnd--------gnd

en----------3.3v


打開串口調(diào)試助手,設(shè)置波特率115200,找到esp8266的com口并打開,發(fā)

  1. <font face="Microsoft YaHei, SF Pro Display, Roboto, Noto, Arial, PingFang SC, sans-serif"><font color="#4d4d4d">AT+UART=9600,8,1,0,0
  2. </font></font>
復(fù)制代碼

末尾應(yīng)該加上回車換行,串口會(huì)回復(fù)ok

串口調(diào)試助手下載工具:https://www.lanzous點(diǎn)com/iax97ih 密碼:1234

如果上一步傳感器數(shù)據(jù)可以成功讀取,那么就可以在上版的基礎(chǔ)上,把數(shù)據(jù)上傳到云端。

用keil 打開程序,需要修改WIFI等信息


  1. <font color="rgb(77, 77, 77)"><font face="&quot;"><font style="font-size: 16px">#define Ssid  "newhtc"        //WIFI名稱,,修改為自己路由器的WIFI名稱,好像不支持中文
  2. #define PassWord  "qq123456"     //WIFI密碼,修改為自己路由器的
  3. #define Uid  "4d9ec352e0376f2110a0c601a2857225" //巴法云UID密鑰,控制臺(tái)獲取
  4. #define Topic  "mytemp"   //巴法云控制臺(tái)創(chuàng)建,名稱自定義,app訂閱主題要和這個(gè)推送主題一致
  5. </font></font></font>
復(fù)制代碼

在巴法創(chuàng)客云控制臺(tái) 新建一個(gè)主題,主題名字隨意,例如mytemp,本實(shí)例用用mytemp,使用示例代碼時(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)建主題。

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


  1. <font color="rgb(77, 77, 77)"><font face="&quot;"><font style="font-size: 16px">void POST(void)//POST數(shù)據(jù)函數(shù)
  2. {
  3.         int dataLen;
  4.         uchar postData[150];
  5.     char strLen[3];
  6.         
  7.         char data1[] = "32";             ////為了演示定義的模擬數(shù)據(jù),可根據(jù)自己傳感器自行采集數(shù)據(jù)
  8.         char data2[] = "27.8";                //
  9.         char data3[] = "45";
  10.         char data4[] = "26";
  11.         char data5[] = "99.12";
  12.         char data6[] = "ON";
  13.         
  14.         //通過&符號(hào)整合需要post的數(shù)據(jù)。傳感器數(shù)據(jù)用#分開,以便app進(jìn)行數(shù)據(jù)分割
  15.         //自己要知道每個(gè)數(shù)據(jù)代表的意思,一會(huì)app端會(huì)按排列分割提取數(shù)值
  16.         sprintf(postData,"uid=%s&topic=%s&msg=#%s#%s#%s#%s#%s#%s#\r\n",Uid,Topic,data1,data2,data3,data4,data5,data6);
  17.         dataLen = strlen(postData);             //計(jì)算數(shù)據(jù)長(zhǎng)度
  18.     sprintf(strLen,"%d",dataLen);                                         //int類型轉(zhuǎn)char

  19.     ESP8266_Set("AT+CIPMODE=1"); //開啟透明傳輸模式
  20.     ms_delay(1000);
  21.     ESP8266_Set("AT+CIPSTART=\"TCP\",\"api.bemfa.com\",80");  // 連接服務(wù)器和端口
  22.    ms_delay(1000);
  23.     ESP8266_Set("AT+CIPSEND"); //進(jìn)入透?jìng)髂J,下面發(fā)的都會(huì)無條件傳輸
  24.         ms_delay(1000);
  25.         ESP8266_Set_Only("POST /api/device/v1/data/1/ HTTP/1.1\r\nHost: api.bemfa.com\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection:close\r\nContent-Length:");//ţքdeviceۅ ţքsensorۅ
  26.         ESP8266_Set(strLen);//數(shù)據(jù)長(zhǎng)度(postData數(shù)據(jù)長(zhǎng)度),一定要準(zhǔn)確
  27.         ESP8266_Set("");//回車(發(fā)完數(shù)據(jù)長(zhǎng)度后,有回車,不懂的百度http post 格式)
  28.         ESP8266_Set(postData);//發(fā)送數(shù)據(jù)        
  29.         ms_delay(2000);
  30.         ESP8266_Set("+++"); //
  31.         memset(strLen,'\0',3);  //重置數(shù)組
  32.         memset(strLen,'\0',sizeof postData);//重置數(shù)組
  33. }
  34. </font></font></font>
復(fù)制代碼

利用HTTP POST形式,往服務(wù)器進(jìn)行消息推送,具體接口可參考:巴法云官方文檔

第四 下載程序到STC89c51即可

下載工具STC-ISP:下載:https://www.lanzous點(diǎn)com/iaxa4fc 密碼:1234


STC89c51/52和ESP8266接線問題

c51 ----------8266

P30----------TX

P31----------RX

3.3v-----------3.3v

Gnd---------Gnd

3.3v-----------EN

試了8266直接接5v也工作,不過不建議使用


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

第五 app inventor 制作app 接收實(shí)時(shí)數(shù)據(jù)
在appInventor 點(diǎn)擊跳轉(zhuǎn)國(guó)內(nèi)站創(chuàng)建賬號(hào),并登陸。
本操作只提供一個(gè)app的demo,界面過于丑陋,大家可自由發(fā)揮更改界面。
app inventor 程序下載:http://cloud.bemfa點(diǎn)com/zip/aia/aiadata.zip
頂部導(dǎo)航欄,依次點(diǎn)擊(項(xiàng)目-->導(dǎo)入項(xiàng)目aia),選擇上一步驟下載的aia文件導(dǎo)入即可。點(diǎn)擊導(dǎo)入的項(xiàng)目,即可看到控制面板,面板主要分為在組建設(shè)計(jì)和邏輯設(shè)計(jì),用戶可在右上角進(jìn)行模式切換。
(組建設(shè)計(jì))面板可以向屏幕添加組建以進(jìn)行二次開發(fā)。(邏輯面板)則進(jìn)行相關(guān)邏輯編寫。

導(dǎo)入aia文件后,如果只是簡(jiǎn)單使用,只需要修改兩個(gè)地方,一個(gè)是主題名字,一個(gè)是UID,均需開發(fā)者置換成自己的topic(主題名字)和UID(用戶私鑰),均可在創(chuàng)客云控制臺(tái)獲取點(diǎn)擊跳轉(zhuǎn)。
此處的主題topic應(yīng)該和ESP8266程序里面設(shè)定的主題修改為一樣,不然會(huì)收不到消息。UID修改為自己的私鑰。
界面還有功能之類的自己可以隨意加,更改好,下載apk文件即可。
關(guān)鍵程序講解
程序下載,修改關(guān)鍵參數(shù)后就可直接使用的,以下是關(guān)鍵程序講解:
接收到帶傳感器的數(shù)據(jù)后,依照#號(hào)對(duì)字符串進(jìn)行分割,有幾個(gè)數(shù)值,就分割幾次,自己要記住第幾個(gè)數(shù)值代表哪種傳感器就行了,比如要記住data1是溫度,data2是濕度等等,這里的分割次數(shù)需要和上傳的數(shù)據(jù)個(gè)數(shù)相等,有6個(gè)數(shù)值,就分割6次,7個(gè)數(shù)值就分割7次,就是依次增加或者減少就行。
當(dāng)屏幕初始化時(shí),會(huì)先訂閱主題,只有訂閱了這個(gè)主題,就可以實(shí)時(shí)收到發(fā)到該主題的消息,cmd=1是訂閱指令,就是訂閱主題的意思;cmd=9是遺囑指令,就是獲取服務(wù)器保存的數(shù)值,關(guān)于具體指令格式,可以在接入文檔了解:接入文檔
第六 效果展示
app可實(shí)時(shí)展示當(dāng)前各種傳感器信息,可做遠(yuǎn)程監(jiān)控,手機(jī)只要有網(wǎng)絡(luò)就可以收到數(shù)據(jù)信息。不管是2G 3G 4G WIFI都行










回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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