esp8266+微控制器之最最簡單(AT指令)應用(二)
阿新 • • 發佈:2018-12-16
微控制器+esp8266 wifi模組的AP模式
模組作為伺服器與遠端客戶機進行通訊
燒寫程式碼前需要先獲取到wifi模組的IP地址以及設定模組的wifi名字和密碼,以便客戶端進行連線
#include<reg52.h> #include<stdio.h> #include<string.h> #define uchar unsigned char #define uint unsigned int char rcvbuf[20]; char rcvflag = 0; void delayms(uint x) //51微控制器常用延時程式 { uint i,j; for(i=x;i>0;i--) for(j=125;j>0;j--); } void uart_init() //串列埠初始化 { TMOD=0x20; TH1=0XFd; TL1=0XFd; SCON=0x50; PCON=0X00; TR1=1; EA=1; ES=1; } void wifi_init() //wifi初始化,就是往串列埠傳送AT指令 { ES=0; TI=1; printf("AT+RST\r\n"); delayms(1200); printf("AT+CWMODE=2\r\n"); delayms(1200); printf("AT+CIPMUX=1\r\n"); delayms(1200); printf("AT+CIPSERVER=1,8080\r\n"); delayms(1200); while(!TI); TI=0; ES=1; } void send(char *p) { TI=0; do { SBUF=*p; p++; while(!TI); TI=0; }while(*p); SBUF=' '; while(!TI); TI=0; } void main() { char buf[10]; char i; uart_init(); wifi_init(); while(1) { if(rcvflag == 1) //判斷是否接收到資料 { ES = 0; rcvflag = 0; for(i=0;i<4;i++) buf[i] = rcvbuf[i]; i = 0; if(strcmp(buf,"+IPD") == 0) //判斷接收到的資料是否符合要求,該模組接收到資料是以“+IPD”開頭的 { if(rcvbuf[9] == '1') { send("燈亮"); P1 = 0; } else if(rcvbuf[9] == '0') { send("燈滅"); P1 = 0xff; } } ES = 1; } } } void uart_rcv() interrupt 4 //中斷接收程式 { static char i = 0; if(RI == 1) { ES = 0; RI = 0; rcvbuf[i++] = SBUF; if(rcvbuf[i-1] == '\n') //判斷字串結束位置 { rcvbuf[i] = '\0'; i = 0; rcvflag = 1; //字串結束,把接收標誌位置1 } ES = 1; } }