1.燒錄固件到ESP8266
2.重啟進入運行模式(斷開IO 0)
3.用電腦收無線網admin 密碼:12345678 (固件初始的)
4.用電腦打開IP網址:10.10.10.208 進入設置
內網IP改為:10.10.10.208 端口:5000
外網不用動,其它網絡名字admin 密碼:12345678 (固件初始的)不用改了
5.安裝手機APP,點連接。10.10.10.208 端口:5000 (固件初始的)
6.可以操作了。
7.接收溫度和單片串口通訊OK手機和串口助手都能查看到單片機的溫度。
制作出來的實物圖如下:
APP
ESP8266設置及說明 本設計使用ESP8266WIFI模塊實現單片機超聲波測量數據向手機無線傳輸,讓手機是顯示測量結果。 單片機與ESP8266通信方式采用AT命令方式,首先由單片機對esp8266進行初始化,再將手機連上esp8266的WiFi,然后再通過手機端發送指令,esp8266接收到命令傳入單片機,單片機再進行相應的操作。模塊的VCC,GND,TXD,RXD與單片機的VCC,GND,RXD,TXD接好,以為51單片機沒有進程和線程的概念,所以就在main函數的while(1)中放入我們要的主程序,而用串口中斷的方式來接收esp8266發過來的數據信息,從而實現用esp8266控制單片機。 ESP8266模塊是3.3V供電! 切記請勿接5V ! 模塊想要從FLASH啟動進入AT系統,只需CH-PD引腳接VCC或接上拉(不接上拉的情況下,串口可能無數據),其余三個引腳可選擇懸空。(GPIO0為高電平代表從FLASH啟動,GPIO0為低電平代表進入系統升級狀態,此時可以經過串口升級內部固件 RST(GPIO16)可做外部硬件復位使用)。測試系統不同,接線方法也選擇多多,請各位根據自己的情況進行選擇,推薦接法:只需CH-PD引腳接VCC后,將UTXD,GND,VCC,URXD連上USB-TTL(兩者的TXD和RXD交叉接)即可進行測試。 在本設計中,單片機的串口中斷的波特率設為9600,記得在將ESP8266模塊與單片機硬件連接之前,先用USB-TTL模塊連接好ESP8266模塊,將ESP8266模塊用AT命令改為9600的波特率。 使用的命令: AT+UART=9600,8,1,0,0
AT+CWSAP="wifi_yuan","123456789",11,4 //設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK) 完成上面兩步后,就可以將ESP8266模塊與單片機系統連接起來。原理圖中JP1是ESP8266模塊插座。
參考硬件PCB圖:
網絡配置固件使用說明
Esp8266-01管腳圖
Esp8266程序下載說明:1.請將MTDO與GPIO0置于低電平,GPIO2置于高電平。
如果你的模塊沒有MTDO,請至少將GPIO0置于低電平。
GPIO0置于低電平是燒寫模式,高電平是運行模式。
2.請復位(復位是指RST低電平脈沖)或重新上電進入燒寫模式。
3.請不要使用USB轉TTL引出的電源,請使用獨立電源。
4.燒寫成功后,請重新上電。模塊波特率更改為9600或115200.
5.燒寫中途失敗后,請重新上電燒寫。
Esp8266下載模式,降CH_PD接入電源,GPIO0接地重要事情說3遍!!!!!
分別導入下載數據。
點擊下載。
8266下載模式重新啟動。
下載過程中顯示數據。
等待下載完成。
網頁配置固件配置:將esp8266運行模式運行,esp8266將運行到sta+ap模式,esp8266熱點的SSID是:admin 密碼:12345678 。連接到esp8266熱點后,打開游覽器,網址輸入 10.10.10.208 將進入如下配置。連接路由器后可以不用連接esp8266的熱點可以直接輸入IP地址配置,具體介紹請看靜態IP地址設置。此功能很方便
1. esp8266熱點名字與密碼修改:
如圖所示,修改帳號與密碼直接修改就可以,在熱點中不支持中文不支持符號,密碼最少8位。
2. esp8266連接路由器修改: 如圖所示,修改連接路由器的的帳號與密碼和是否連接。帳號和密碼不支持中文和符號。
選擇是否連接則會連接到相應的路由器。
3. 通信協議的設置:1. TCP SERVER 服務器模式設置:
在tcp 服務器模式下IP地址無用(靜態IP如果要用就選擇不用則不選擇功能下面則會說明),只需要設置相應的端口號則為服務器的端口號,如果要連接esp8266服務器模式 IP地址輸入10.10.10.208 輸入其相應的端口號則
進入透傳模式。直接用串口發送任何消息服務器都會接收,反之也是一樣。
2. TCP Client 客戶端模式:
在TCP 客戶端模式中靜態IP如果要用就選擇不用則不選擇功能下面則會說明,在IP地址中輸入其要連接服務器的IP地址與端口號則就可以配置。配置完成后esp8266進入透傳。直接用串口發送消息客戶端就會向服務器發送消息。(TCP 客戶端模式必須要連接到路由器才可以開啟此功能)
3. UDP: 在UDP中不分客戶端模式與服務器模式靜態IP如果要用就選擇不用則不選擇功能下面則會說明,他是以廣播形式發送消息。在UDP模式中不管是連接到路由器或者沒連接到路由器IP地址則輸入的IP是要發送信息目標地址的IP(如果所有的UDP都要接收到IP地址則 255.255.255.255),端口號則是目標的端口號。4.靜態IP:
靜態IP 地址的作用是:連接路由器后固定分配的IP地址,xxx.xxx.xxx.yyy ,xxx是路由器決定(如:192.168.0.yyy),yyy則是你想分配的IP地址,如果要啟動靜態IP地址必須要勾上。
靜態IP地址設置后在局域網內可以不必連接esp8266的熱點一樣可以配置8266.在連接到路由器后可以直接打開路由器在路由器地址輸入設置的靜態IP則可以進入配置界面。靜態IP是必須在連接路由器后可以使用。
備注:在使用過程中不能使用80端口,目前v1.020160531版本IP地址不支持域名解析,下一個則支持域名解析,在配置完成后要點擊保存就可以了,如果要復位則電機復位就可以了。每種配置完成后都是透傳,直接發送數據及可。
如果對此固件有其他BUG或者要修改固件功能可以直接聯系作者,如果有更好的設置方案也可以和作者討論。
ESP8266調試總結
ESP8266可以配置成station 、AP、station+AP三種模式,就是說模塊可以當成一個設備(client)連接局域網內的路由,也可以設置成是一個路由(sever),也可以既作為局域網里面的client同時又是其它client的sever
1、ESP8266 Client模式(Station):
AT+RST //復位模塊
AT+CWMODE=1 //設置為station模式
AT+RST //重啟生效
AT+CWLAP //查看可以連接到的無線路由
AT+CWJAP="yuan","456852123" //連接上無線路由
AT+CIFSR //查詢模塊的IP地址
AT+CIPMUX=1 //打開多連接,否則會報錯Link typ error
AT+CIPSTART=0,"TCP","192.168.1.111",6060 //連接到TCP Server上 使用網絡調試助手創建一個TCP Server
AT+CIPSEND=0,7 //發送字符長度
testrun //發送7個字符給Server端
同時Server端也可以發數據給Client端
單鏈接方式
AT+RST //復位模塊
AT+CWMODE=1 //設置為station模式
AT+RST //重啟生效
AT+CWLAP //查看可以連接到的無線路由
AT+CWJAP="JSZZSJ3","********" //連接上無線路由
AT+CIFSR //查詢模塊的IP地址
AT+CIPMUX=0 //打開單連接,否則會報錯Link typ error
AT+CIPSTART="TCP","192.168.1.111",6060 //連接到TCP Server上 使用網絡調試助手創建一個TCP Server
AT+CIPSEND=7 //發送字符長度
testrun //發送7個字符給Server端
同時Server端也可以發數據給Client端
2、ESP8266 Server模式(Station+AP):
AT+RST //復位模塊
AT+CWMODE=3 //設置為AP模式
AT+RST //重啟生效
AT+CWLAP //查看可以連接到的無線路由
AT+CWJAP="JSZZSJ3","********" //連接上無線路由
AT+CIFSR //查詢模塊的IP地址
AT+CIPMUX=1 //打開多連接
AT+CIPSERVER=1,6060 //建立Server
使用網絡調試助手創建一個TCP Client,設置好要連接到的Server的IP和端口號,即可連接
Client就可以發送數據給Server端了
如果同時想Server發數據給Client只要如下命令
AT+CIPSEND=0,7 //發送字符長度
就可以發送數據了
3、串口透傳模式(TCP模式)
AT+RST //復位模塊
AT+CWMODE=3或者1 //設置為AP+Station模式或Station模式
AT+CWLAP //查看可以連接到的無線路由
AT+CWJAP="yuan","456852123" //連接上無線路由
AT+CIFSR //查詢模塊的IP地址
AT+CIPSTART="TCP","192.168.1.176",9999 //用手機做服務器,打開網絡調試助手,建一個TCP server
AT+CIPMODE=1
AT+CIPSEND
接下來就可以透傳了
如果要關閉透傳先發送三個“+”,提示CLOSE后,再勾選發送新行
4、串口透傳模式(UDP模式)
AT+RST //復位模塊
AT+CWMODE=3或者1 //設置為AP+Station模式或Station模式
AT+CWLAP //查看可以連接到的無線路由
AT+CWJAP="JSZZSJ3","********" //連接上無線路由
AT+CIFSR //查詢模塊的IP地址
AT+CIPSTART="UDP","192.168.1.176",9999,5000,0 //用手機做服務器,打開網絡調試助手,建一個UDP server
AT+CIPMODE=1
AT+CIPSEND
接下來就可以透傳了
如果要關閉透傳先發送三個“+”,提示CLOSE后,再勾選發送新行
AT+RESTORE
AT+CIPSTART="UDP","255.255.255.255",5000,5000
AT+CIPMODE=0 //0 表示單距連接
AT+CIPSEND=5 //5 是數據長度
給你一個雙向傳輸的示例
A模塊和B模塊先執行:
AT+CWMODE=3
A模塊:
AT+CWLAP//列出附近的AP得到B模塊的SSID
AT+CWJAP="B模塊的SSID","PWD"
AT+CIPMUX=0
AT+CIPSTART="UDP","255.255.255.255",6060,6060,0
AT+CIPMODE=1
AT+CIPSEND
B模塊
AT+CIPMUX=0
AT+CIPSTART="UDP","255.255.255.255",6060,6060,0
AT+CIPMODE=1
AT+CIPSEND
單片機源程序如下:
- [code]/********************************************************************/
- /* WIFI無線傳輸手機顯示 */
- /********************************************************************/
- #include <reg51.h>
- #include<intrins.h>
- #include <stdio.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define ulong unsigned long
- /*****************相關變量**************/
- uint Receive,i,xm0,xm1,xm2; //溫度傳送用
- long s;
- uint xm3,xm4,xm5; //濕度傳送用
- long s1;
- uchar Recive_table[40]; //用于接收wifi模塊反饋到MCU上的數據
- uchar code ta[]="0123456789- "; //測試一下
- uchar table[]="溫度:00.0 C 濕度:00.0 %";//傳送用定位模板
-
- void delay (int a)//毫秒級延時
- {
- int x,y;
- for(x=a;x>0;x--)
- for(y=110;y>0;y--);
- }
- void delayus(int t)//微秒級延時
- {
- while(t--);
- }
- /*******************************************************************
- 名稱:延時函數 作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......
- ********************************************************************/
- void ms_delay(uint t)
- {
- uint i,j;
- for(i=t;i>0;i--)
- for(j=110;j>0;j--);
- }
- void us_delay(uchar t)
- {
- while(t--);
- }
- /*------------------------------------------------
- uS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
- 長度如下 T=tx2+5 uS
- ------------------------------------------------*/
- void DelayUs2x(unsigned char t);
- /*------------------------------------------------
- mS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編
- ------------------------------------------------*/
- void DelayMs(unsigned char t);
- /*------------------------------------------------
- uS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
- 長度如下 T=tx2+5 uS
- ------------------------------------------------*/
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- /*------------------------------------------------
- mS延時函數,含有輸入參數 unsigned char t,無返回值
- unsigned char 是定義無符號字符變量,其值的范圍是
- 0~255 這里使用晶振12M,精確延時請使用匯編
- ------------------------------------------------*/
- void DelayMs(unsigned char t)
- {
- while(t--) //大致延時1mS
- {
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
- sbit Data=P3^7; //定義數據線
- uchar rec_dat[11]; //用于顯示的接收數據數組
- uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
- void DHT11_delay_us(uchar n)
- {
- while(--n);
- }
- void DHT11_delay_ms(uint z)
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void DHT11_start()
- {
- Data=1;
- DHT11_delay_us(2);
- Data=0;
- DHT11_delay_ms(20); //延時18ms以上
- Data=1;
- DHT11_delay_us(30);
- }
- uchar DHT11_rec_byte() //接收一個字節
- {
- uchar i,dat=0;
- for(i=0;i<8;i++) //從高到低依次接收8位數據
- {
- while(!Data); ////等待50us低電平過去
- DHT11_delay_us(8); //延時60us,如果還為高則數據為1,否則為0
- dat<<=1; //移位使正確接收8位數據,數據為0時直接移位
- if(Data==1) //數據為1時,使dat加1來接收數據1
- dat+=1;
- while(Data); //等待數據線拉低
- }
- return dat;
- }
- void Uart_Init() //使用定時器1作為波特率發生器(STC89C52、STC89C51、AT89C51等均可)
- {
- TMOD = 0x21;
- SCON = 0x50; //設置串行方式
- TH1 = 0xFD; //波特率9600
- TL1 = TH1;
- PCON = 0x00;
- EA = 1; //總中斷打開
- ES = 1; //開串口中斷
- TR1 = 1; //啟動定時器1
- }
- /********************************************************************
- 名稱:串口發送函數 功能:MCU向無線WIFI模塊ESP8266發送數據
- ********************************************************************/
- void Send_Uart(uchar value)
- {
- ES=0; //關閉串口中斷
- TI=0; //清發送完畢中斷請求標志位
- SBUF=value; //發送
- while(TI==0); //等待發送完畢
- TI=0; //清發送完畢中斷請求標志位
- ES=1; //允許串口中斷
- TH0=0;
- TL0=0;
- }
- /********************************************************************
- 名稱:WIFI模塊設置函數 作用: 啟動模塊,以便可以實現無線接入和控制
- ********************************************************************/
- void ESP8266_Set(uchar *puf) // 數組指針*puf指向字符串數組
- {
- while(*puf!='\0') //遇到空格跳出循環
- {
- Send_Uart(*puf); //向WIFI模塊發送控制指令。
- us_delay(5);
- puf++;
- }
- us_delay(5);
- Send_Uart('\r'); //回車
- us_delay(5);
- Send_Uart('\n'); //換行
- }
-
- /********************************************************************
- 名稱:主函數 作用:程序的執行入口
- ********************************************************************/
- void main()
- {
- Uart_Init(); //波特率發生器
- ms_delay(10);
- ESP8266_Set("AT+CWMODE=2"); //設置路由器模式1 station,模式2 AP,模式3 station+AP混合模式
- ms_delay(500);
- // ESP8266_Set("AT+RST"); //重新啟動wifi模塊
- // ms_delay(1000);
- ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4"); //AT+CWSAP="wifi_yuan","123456789",11,4 設置模塊SSID:WIFI, PWD:密碼 及安全類型加密模式(WPA2-PSK)
- ms_delay(500);
- ESP8266_Set("AT+CIPMUX=1"); //開啟多連接模式,允許多個各客戶端接入
- ms_delay(500);
- ESP8266_Set("AT+CIPSERVER=1,5000"); //啟動TCP/IP 實現基于網絡//控制 ESP8266_Set("AT+CIPSERVER=1,5000");
- ms_delay(500);
- ESP8266_Set("AT+CIPSTO=0"); //永遠不超時
- ms_delay(500);
- ES=1; //允許串口中斷
-
- while(1)
- {
-
-
- ///////////////////////////////////////////////////////////////////////////
- DHT11_start();//讀溫度
- if(Data==0)
- {
- while(Data==0); //等待拉高
- DHT11_delay_us(40); //拉高后延時80us
- R_H=DHT11_rec_byte(); //接收濕度高八位
- R_L=DHT11_rec_byte(); //接收濕度低八位
- T_H=DHT11_rec_byte(); //接收溫度高八位
- T_L=DHT11_rec_byte(); //接收溫度低八位
- revise=DHT11_rec_byte(); //接收校正位
- DHT11_delay_us(25); //結束
- if((R_H+R_L+T_H+T_L)==revise) //校正
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- }
- /////////////////////////////////////////////////////////////////////////////////
-
- ms_delay(500);
- //處理溫度部分
- s=T_H*10;
- xm0=(s/100)%10;//存放百位數據
- xm1=(s/10)%10; //存放十位數據
- xm2=s%10; //存放個位數據
-
- table[6]=ta[xm0];
- table[7]=ta[xm1];
- table[9]=ta[xm2];
-
- //處理濕度部分
- s1=R_H*10;
- xm3=(s1/100)%10;//存放百位數據
- xm4=(s1/10)%10; //存放十位數據
- xm5=s1%10; //存放個位數據
-
- table[20]=ta[xm3];
- table[21]=ta[xm4];
- table[23]=ta[xm5];
-
-
- ESP8266_Set(table);//數據發送出去
- ms_delay(500);
-
- }
- }
- /*********************************************************************
- 名稱:串行通訊中斷 作用:發送或接收結束后進入該函數,對相應的標志位軟件清0,實現模塊對數據正常的收發。
- ********************************************************************/
- void Uart_Interrupt() interrupt 4
- {
- static uchar i=0;
- if(RI==1)
- {
- RI=0;
- Receive=SBUF; //MCU接收wifi模塊反饋回來的數據
- Recive_table[i]=Receive;
- if((Recive_table[i]=='\n'))
- {
- i=0;
- }
- else i++; //遇到換行 重新裝值
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
STC89溫濕度DHT11+APP+E4A+ESP8266無線OK.zip
(4.06 MB, 下載次數: 1112)
2019-1-12 14:31 上傳
點擊文件名下載附件
|