当前位置: 代码迷 >> 综合 >> esp8266+单片机之最最简单(AT指令)应用(二)
  详细解决方案

esp8266+单片机之最最简单(AT指令)应用(二)

热度:6   发布时间:2024-01-05 14:14:14.0

单片机+esp8266 wifi模块的AP模式

模块作为服务器与远程客户机进行通信

烧写代码前需要先获取到wifi模块的IP地址以及设置模块的wifi名字和密码,以便客户端进行连接

#include<reg52.h>
#include<stdio.h>
#include<string.h>#define uchar unsigned char 
#define uint unsigned intchar 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;}	 
}