简单的学习了WIFI模块和相关AT指令,配置WiFi模组工作模式为单STA模式,并把配置保存在flash 中,然后自动发送指令连接网络和连接服务器,最终即可发送数据。因为做的时候还没有后端对接,相关的GET和POST请求没有写完
具体代码参考附件。
单片机源程序如下:
- #include <reg52.h>
- #include <string.h>
- #include <intrins.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- unsigned char Usart_Receive[20]={0};
- unsigned char Usart_Cnt=0;
- bit Usart_AT_flage;
- u8 dat;
- void Init(void)
- {
- TMOD = 0x20;
- SCON = 0x50;
- TH1 = 0xFD;
- TL1 = TH1;
- PCON = 0x00;
- EA = 1;
- ES = 1;
- TR1 = 1;
- }
- void delay5ms(void) //误差 -0.000000000001us
- {
- unsigned char a,b;
- for(b=15;b>0;b--)
- for(a=152;a>0;a--);
- }
- void delay1s(void) //误差 -0.000000000227us
- {
- unsigned char a,b,c;
- for(c=13;c>0;c--)
- for(b=247;b>0;b--)
- for(a=142;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- }
- void Sent_ZF(u8 dat) //发送一个字节
- {
- ES = 0;
- TI=0;
- SBUF = dat;
- while(!TI);
- TI = 0;
- ES = 1;
- }
- void AT_Send_String(u8 *string) //发送字符串
- {
- while(*string)
- {
- Sent_ZF(*string++);
- delay5ms();
- }
- }
- void ESP8266_Init()
- {
- while(1)
- {
- AT_Send_String("AT\r\n");
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
- while(1)
- {
- AT_Send_String("AT+CWMODE=1\r\n"); //配置WiFi模组工作模式为单STA模式,并把配置保存在flash
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
- while(1)
- {
- AT_Send_String("AT+CWJAP=\"guazhou\",\"123456789\"\r\n"); //!连接网络
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
- while(1)
- {
- AT_Send_String("AT+CIPSTART=\"TCP\",\"192.110.43.11\",8080\r\n"); //连接服务器
- delay1s();
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
- while(1)
- {
- AT_Send_String("AT+CIPMODE=1\r\n"); //设置透传
- delay1s();
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
- while(1)
- {
- AT_Send_String("AT+CIPSEND\r\n"); //启动发送
- delay1s();
- delay1s();
- delay1s();
- if(Usart_AT_flage ==1)
- {
- if(strstr(Usart_Receive, "OK"))
- {
- Usart_AT_flage = 0;
- AT_Send_String("OK\r\n");
- break;
- }
- }
- }
-
- //get请求/post请求略,可参看截图写出
- }
- void main()
- {
- Init();
- ESP8266_Init();
- while(1);
- }
- void InterruptUART(void) interrupt 4
- {
- if(RI)
- {
- RI=0;
- Usart_Receive[Usart_Cnt]=SBUF;
- Usart_Cnt++;
- if(Usart_Receive[Usart_Cnt-2]=='\r'&&Usart_Receive[Usart_Cnt-1]=='\n') //检测倒数一二位
- {
- Usart_Cnt=0;
- Usart_AT_flage=1;
-
- }
- else if(Usart_Cnt>20)
- {
- Usart_Cnt=0;
- }
- }
- else
- TI=0;
- }
复制代码
所有资料51hei提供下载:
WiFi HTTP通信.zip
(26.12 KB, 下载次数: 44)
|