8-51單片機ESP8266學習-AT指令(單片機采集溫濕度數據通過8266發送給C#TCP客戶端顯示)


http://www.cnblogs.com/yangfengwu/p/8785516.html

 

 

先寫單片機端的程序

 

先把源碼和資料鏈接放到這里

鏈接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA     密碼:nhn3 

 

 

咱先用TCP調試助手給單片機發指令,然后看一下回傳的數據

先做單片機程序,就在上一篇的基礎上增加功能

/**
* @brief  WIFI模塊發送數據的命令
* @param  id--發給哪一個連接的設備
* @param  Length--數據的長度
* @param  *SendData--數據
* @retval Overtime--接收命令的超時時間ms
* @example 
**/
void ESPSendData(unsigned char id,unsigned char Length,unsigned char *SendData,int Overtime)
{
  unsigned char Send [20]; int SendLength = 0; sprintf (Send, "AT+CIPSEND=%d,%d\r\n",(int)id, (int)Length); SendLength = 16; if(Length>=10){ SendLength = 17;} if(Length>=100){ SendLength = 18;} UartSendTI(Send,SendLength);//發送發送數據的命令 while(Overtime--) { if(UsartFlage == 1) { UsartFlage = 0; if(strstr(UsartReceive, ">"))//收到回復  { DelayMs(50); break; } } DelayMs(1); } if(Overtime>0)//沒有超時  { UartSendTI(SendData,Length); } }

 

 這地方

SendLength = 16;
    if(Length>=10){ SendLength = 17;} if(Length>=100){ SendLength = 18;}

是因為

AT+CIPSEND=0,8\r\n   數據少於10個    16個字符
AT+CIPSEND=0,12\r\n   數據少於10個    17個字符
AT+CIPSEND=0,103\r\n   數據少於10個    18個字符
主函數里面

 

 

 

 

也就增加了這一點內容..........

哦哦哦忘了,上次說的時候忘了....自己先用串口助手配置了

 

 現在用手機連接模塊的無線--先用調試助手測試,即使是做項目也是先用調試助手測試...

 

 

還記得咱規定的命令不

啟動服務器成功以后就進入while(1) 循環,

接收到數據  0xaa,0x55,0x01,0x01  則發送自己的溫濕度數據   0xaa,0x55,溫度(16進制表示),濕度(16進制表示)

假設 接收到 0xaa,0x55,0x01,0x01   溫度10度,濕度50%       0xaa,0x55,,0x01,0x0a,0x32 

這一節不加任何的校驗位,后期再加

接收到數據  0xaa,0x55,0x02,0x00   控制小燈熄滅

接收到數據  0xaa,0x55,0x02,0xff     控制小燈點亮

 

現在試一下

 

數據是  返回的數據是  aa 55 01 15 1C   15化成十進制是21度    1C是28%   溫度21度   相對濕度28%

說明可以采集了也能返回數據了,咱現在做C#采集端

說一下,自己想了想就不用委托和回調了,因為想起了自己以前學C#,感覺對於初學者而言怎樣簡單就怎樣做,不要去太追究規則和約束,等真正入門了再去考慮那些東西.

其實這節是看着高大上但是卻最是最簡單的....

咱前些日子寫到

 

現在增加幾句話

 

收到aa5501回復aa5501,對於為什么說不直接接收數據顯示,因為你要先確定好確實可以接收,用串口調試助手先測試,

可能有人直接就接收顯示了,也可以,不過以經驗來說,最好還是先這樣做,因為自己這樣上過當,反正C#的串口接收就必須用空閑中斷類似

的函數接收才行,因為每次接收到的不一定是一條數據..........

我就先連接我的手機的TCP服務器調試一下,關於軟件的使用可以看使用說明

 

 

 

 

現在自己的APP還是有點問題

會產生多余的發送任務,所以點擊了一下發送,發送了好幾次....................

上一版本的沒有這種情況,但是測試發現上一版本在5.1版本上任務卻不讓那樣用,,,,郁悶,后期再找解決方法

先不管它,先做現在的上位機

現在添加一個定時器,每隔1S發送一次命令

        private void timer1_Tick(object sender, EventArgs e)
        {
            SendBuffer[0] = 0xaa;
            SendBuffer[1] = 0x55;
            SendBuffer[2] = 0x01;
            SendCnt = 3;
        }

現在測試一下是不是每隔1S發送一次數據

連接手機測試

 

 好現在顯示溫濕度

自己用調試助手發的數據

現在可以連接模塊了

模塊初始化默認的網關是192.168.4.1,當然是可以修改的,后期再說

我吹口氣

 

 

也可以控制點燈

 

 

看了看我的單片機程序

采集溫濕度的命令是aa 55 01 

 

 

 

 

http://www.cnblogs.com/yangfengwu/p/8871464.html

 


免責聲明!

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



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