http://www.cnblogs.com/yangfengwu/p/8759294.html?如不做任何說明默認(rèn)最頭上的鏈接為上一篇鏈接,末尾的鏈接為下一篇鏈接
先把源碼和資料鏈接放到這里
鏈接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A密碼:j1sz
自己寫好了51采集DHT11的程序,在這個的基礎(chǔ)上一點(diǎn)一點(diǎn)的寫,對了,自己的這一系列的文章不是講很基礎(chǔ)很基礎(chǔ)的內(nèi)容,這一系列更注重于應(yīng)用,如果要學(xué)基礎(chǔ)的請等待自己的51單片機(jī)開發(fā)板的基礎(chǔ)教程...
第一步做的是配置好51單片機(jī)的指令
?咱們在單片機(jī)一起動的時候,先控制8266的復(fù)位引腳為低電平?讓模塊復(fù)位,等待3S后判斷串口接收的數(shù)據(jù)有沒有ready,
有的話就執(zhí)行下一步,沒有的話再讓模塊復(fù)位,一直這樣循環(huán).
然后發(fā)送AT+CIPMUX=1 啟動多連接,等待1S判斷是不是接收到OK,沒有接收到再發(fā)一次,如果超過三次,重新開始,接收到執(zhí)行下一步
然后發(fā)送AT+CIPSERVER=1,1001 啟動TCP服務(wù)器,等待1S判斷是不是接收到OK,沒有接收到再發(fā)一次,如果超過三次,重新開始,接收到執(zhí)行下一步
啟動服務(wù)器成功以后就進(jìn)入while(1) 循環(huán),
接收到數(shù)據(jù) ?0xaa,0x55,0x01,0x01 ?則發(fā)送自己的溫濕度數(shù)據(jù) ? 0xaa,0x55,溫度(16進(jìn)制表示),濕度(16進(jìn)制表示)
假設(shè) 接收到?0xaa,0x55,0x01,0x01 ? 溫度10度,濕度50% ? ? ??0xaa,0x55,,0x01,0x0a,0x32?
這一節(jié)不加任何的校驗(yàn)位,后期再加
接收到數(shù)據(jù) ?0xaa,0x55,0x02,0x00 ? 控制小燈熄滅
接收到數(shù)據(jù) ?0xaa,0x55,0x02,0xff ? ? 控制小燈點(diǎn)亮
APP端也不做任何的回復(fù)判斷什么的,力求做的簡單易懂
先做單片機(jī)端,數(shù)據(jù)回復(fù)先用串口助手模擬.....
先打好底
設(shè)置控制8266復(fù)位的引腳為P1_0;
#ifndef ESP8266_H_#defineESP8266_H_#ifndef ESP8266_C_#defineESP8266_C_ extern#else#defineESP8266_C_#endifsbit ESPRst = P1^0;#endif
咱們呢直接在主函數(shù)里面寫,
void main()
{
? ? InitUART(115200);
? ? InitTimer0();
? ? start:
? ? /*下面的都是一樣的模子,注釋就寫一個*/? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("8266RST\r\n");//這個不是什么指令,我先用串口調(diào)試助手模擬看一下發(fā)了這條信息,然后我回它P0_0 =1;//這個燈作為指示燈,發(fā)送個指令就亮,ESP_Rst();//復(fù)位8266DelayMs(3000);//等待3Sif(UsartFlage ==1)//串口接收到數(shù)據(jù)? ? ? ? {
? ? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"ready"))//有沒有ready? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;//接收到正確的回復(fù)就滅DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)//超過三次重新開始? ? ? ? {
? ? ? ? ? goto start;
? ? ? ? }
? }
? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("AT+CIPMUX=1\r\n");//啟動多連接P0_0 =1;
? ? ? ? DelayMs(1000);
? ? ? ? if(UsartFlage ==1)
? ? ? ? {
? ? ? ? ? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"OK"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;
? ? ? ? ? ? ? ? DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)
? ? ? ? {
? ? ? ? ? goto start;
? ? ? ? }
? ? }
? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("AT+CIPSERVER=1,1001\r\n");//創(chuàng)建服務(wù)器P0_0 =1;
? ? ? ? DelayMs(1000);
? ? ? ? if(UsartFlage ==1)
? ? ? ? {
? ? ? ? ? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"OK"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;
? ? ? ? ? ? ? ? DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)
? ? ? ? {
? ? ? ? ? goto start;
? ? ? ? }
? }
? ? /*讓小燈閃一閃,算是說明正確執(zhí)行了把*/? P0_0 =0;
? DelayMs(200);
? P0_0 =1;
? DelayMs(200);
? P0_0 =0;
? DelayMs(200);
? P0_0 =1;
? DelayMs(200);
? P0_0 =0;
?算啦全復(fù)制粘貼過來
#defineMAIN_C_#include "include.h"/**
* 介紹:? 主函數(shù)
* 說明:? 每間隔1S發(fā)送一次溫濕度數(shù)據(jù)
* 說明:? 返回串口接收到的數(shù)據(jù),發(fā)送方式為中斷發(fā)送
* 說明:? None
* 說明:? None
* 支持:? QQ946029359 --群 607064330
* 淘寶:? https://shop411638453.taobao.com/* 作者:? 小五
**/unsigned charCnt =0;
unsigned charConnectID =0;
unsigned chari=0;void main()
{
? ? InitUART(115200);
? ? InitTimer0();
? ? start:
? ? /*下面的都是一樣的模子,注釋就寫一個*/? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("8266RST\r\n");//這個不是什么指令,我先用串口調(diào)試助手模擬P0_0 =1;//這個燈作為指示燈,發(fā)送個指令就亮,ESP_Rst();//復(fù)位8266DelayMs(3000);//等待3Sif(UsartFlage ==1)//串口接收到數(shù)據(jù)? ? ? ? {
? ? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"ready"))//有沒有ready? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;//接收到正確的回復(fù)就滅DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)//超過三次重新開始? ? ? ? {
? ? ? goto start;
? ? }
? }
? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("AT+CIPMUX=1\r\n");//啟動多連接P0_0 =1;
? ? ? ? DelayMs(1000);
? ? ? ? if(UsartFlage ==1)
? ? ? ? {
? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"OK"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;
? ? ? ? ? ? ? ? DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)
? ? ? ? {
? ? ? goto start;
? ? }
? }
? ? Cnt =0;
? ? while(1)
? ? {
? ? ? ? printf("AT+CIPSERVER=1,1001\r\n");//創(chuàng)建服務(wù)器P0_0 =1;
? ? ? ? DelayMs(1000);
? ? ? ? if(UsartFlage ==1)
? ? ? ? {
? ? ? UsartFlage =0;
? ? ? ? ? ? if(strstr(UsartReceive,"OK"))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? P0_0 =0;
? ? ? ? ? ? ? ? DelayMs(500);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? }
? ? ? ? Cnt ++;
? ? ? ? if(Cnt>=3)
? ? ? ? {
? ? ? goto start;
? ? }
? }
? ? /*讓小燈閃一閃,算是說明正確執(zhí)行了把*/? P0_0 =0;
? DelayMs(200);
? P0_0 =1;
? DelayMs(200);
? P0_0 =0;
? DelayMs(200);
? P0_0 =1;
? DelayMs(200);
? P0_0 =0;
? ? while(1)
? ? {
? ? DHT11_Receive();
? ? ? ? DelayMs(1000);
? ? ? ? printf("data;T=%d,H=%d\r\n",(int)DHT11Data[0],(int)DHT11Data[2]);
? ? ? ? //? ? ? ? if(UsartFlage == 1)//返回接收的數(shù)據(jù)//? ? ? ? {//? ? ? UsartFlage = 0;////? ? ? ? ? ? for(i=0;i<10;i++)//找到開始的數(shù)據(jù)位置,有的固件數(shù)據(jù)前頭有換行,有的沒有//? ? ? ? ? ? {//? ? ? ? if(UsartReceive[i]=='+' && UsartReceive[i+1]=='I'&& UsartReceive[i+2]=='P')//判斷數(shù)據(jù)的頭//? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ConnectID = UsartReceive[i+5];//得到是幾號連接的//? ? ? ? ? ? ? ? ? ? if(ConnectID>=0x30 && ConnectID<=0x34)//得到的ID號有沒有越界//? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? for(i=6;i<15;i++)//找到 : 在哪里,才知道真實(shí)數(shù)據(jù)在哪里//? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(UsartReceive[i] == ':')//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(UsartReceive[i+1]==0xaa? && UsartReceive[i+2]==0x55)//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? switch(UsartReceive[i+3])//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 0x01: break;//發(fā)送溫濕度數(shù)據(jù)//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case 0x02: if(UsartReceive[i+4] == 0x00)//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? P0_0 = 0;//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if(UsartReceive[i+4] == 0xff)//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? P0_0 = 1;//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;//發(fā)送溫濕度數(shù)據(jù)////? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? default:break;? ? ? ? ? ? ? ? ? ? ? ? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;//結(jié)束for(i=6;i<15)//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }//? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }//? ? ? ? ? ? ? ? ? ? ? ? ? }////? ? ? ? ? ? ? ? ? ? ? ? ? break;//結(jié)束for(i=0;i<10;i++)//? ? ? ? ? ? ? ? ? ? }//? ? ? ? ? ? ? ? }//? ? ? }? ? ? ? ? ?
? ? //}
? }
}
把現(xiàn)在的程序下進(jìn)去,然后測試
現(xiàn)在說一下接收數(shù)據(jù)
修改一下主while(1)循環(huán)函數(shù)
while(1)
? ? {
? ? DHT11_Receive();
? ? ? ? //? ? ? ? DelayMs(1000);////? ? ? ? printf("data;T=%d,H=%d\r\n",(int)DHT11Data[0],(int)DHT11Data[2]);if(UsartFlage ==1)//返回接收的數(shù)據(jù)? ? ? ? {
? ? ? UsartFlage =0;for(i=0;i<10;i++)//找到開始的數(shù)據(jù)位置,有的固件數(shù)據(jù)前頭有換行,有的沒有? ? ? ? ? {
? ? ? ? ? ? if(UsartReceive[i]=='+'&& UsartReceive[i+1]=='I'&& UsartReceive[i+2]=='P')//判斷數(shù)據(jù)的頭? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ConnectID = UsartReceive[i+5];//得到是幾號連接的if(ConnectID>=0x30&& ConnectID<=0x34)//得到的ID號有沒有越界? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? for(i=6;i<15;i++)//找到 : 在哪里,才知道真實(shí)數(shù)據(jù)在哪里? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(UsartReceive[i] ==':')
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(UsartReceive[i+1]==0xaa&& UsartReceive[i+2]==0x55)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? switch(UsartReceive[i+3])
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case0x01:break;//發(fā)送溫濕度數(shù)據(jù)case0x02:if(UsartReceive[i+4] ==0x00)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? P0_0 =0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? elseif(UsartReceive[i+4] ==0xff)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? P0_0 =1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;//發(fā)送溫濕度數(shù)據(jù)default:break;? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;//結(jié)束for(i=6;i<15)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? break;//結(jié)束for(i=0;i<10;i++)? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? }
? ? }
? }
wifi接受到數(shù)據(jù)發(fā)給單片機(jī)的格式
但是呢有的固件,是沒有前面的換行的
所以我的程序
接著呢我要知道我的數(shù)據(jù)在哪里,
把現(xiàn)在的程序下載到單片機(jī)里面
別忘了
電腦和單片機(jī)串口通信
單片機(jī)和WIFI模塊通信
電腦和WIFI模塊通信
然后把跳線帽跳到中間,讓單片機(jī)和WIFI模塊進(jìn)行通信
把WIFI模塊的RST引腳接到單片機(jī)的P1_0
復(fù)位一下單片機(jī),也可以不用
?手機(jī)連接無線
這篇先寫到這里,先讓大家消化消化
下一篇連接