通过ESP8266WIFI模块让51单片机向后端交互数据

这一次做的是用ESP8266WIFI模块,让51单片机与后端交互数据。简单地发了一个字符串。
模块连接部分:VCC接电源,GND接地,模块的TXD接单片机的RXD,模块的RXD接单片机的TXD
需要注意的是在程序烧录进单片机之前,不能连接RXD和TXD。
建议在烧录代码之前先用XCOM发送指令检验WIFI模块是否能够正常使用,不然一直调试单片机的代码也是没有用的,一下代码实现的是单片机通过WIFI模块向后端发送数据。

#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;
bit flag;
u8 dat;
 
void Init(void)//初始化串口 
{
	TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
	REN=1;
}
 
void delay5ms(void)  //延时函数 
{
    unsigned char a,b;
    for(b=15;b>0;b--)
        for(a=152;a>0;a--);
}
 
void delay1s(void)   //延时 
{
    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()//用串口向ESP8266发送命令 
{
	while(1)       
	{
		AT_Send_String("AT\r\n");
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		}
	
	while(1)
	{
		AT_Send_String("AT+CWMODE=1\r\n");   //设置为模式1 
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		
	}
	while(1)
	{
		AT_Send_String("AT+CWJAP=\"mumn\",\"123456789\"\r\n");	  //连接网络 ,输入自己的网络名的密码
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		}
	
	while(1)
	{
		AT_Send_String("AT+CIPSTART=\"TCP\",\"192.168.43.177\",8080\r\n");	//作为客户端	
		delay1s();
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		}
	while(1)
	{
		AT_Send_String("AT+CIPMODE=1\r\n");		
		delay1s();
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		}	
	
		while(1)
	{
		AT_Send_String("AT+CIPSEND\r\n");		
		delay1s();
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
			}	
		}	
}	

void sendnumber()
{
	while(1)
	{
   AT_Send_String("12345");		
   delay1s();
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
				Usart_AT_flage = 0;
				break;
		}	
	}	
}

 
void main()
{
    Init();
    ESP8266_Init();
    sendnumber();
    while(1);
}
 
void InterruptUART(void) interrupt  4  //串口中断 
{
	if(RI)
	{
		RI=0;
		Usart_Receive[Usart_Cnt]=SBUF;
		Usart_Cnt++;
		if(Usart_Receive[Usart_Cnt]=='\0')   
		{
			Usart_Cnt=0;
			Usart_AT_flage=1;			
		}
	}
	else
		TI=0;
}

在电脑上写一段JAVA服务程序,运行出来等待客户端的连接,再烧录上面的代码进51单片机,就可以看见数据发送成功了

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Service {
     public static void main(String[] args) throws Exception {
            ServerSocket server = new ServerSocket(10012);
            byte[] msg = new byte[50];
            System.out.println("服务端ready,,,,");
            Socket client = server.accept();
            InputStream in = new DataInputStream(client.getInputStream());
            boolean accept = true;
            while (accept) {
                in.read(msg);
                System.out.println(new String(msg));
            }
            in.close();
            client.close();
            server.close();
        }
}
发布了9 篇原创文章 · 获赞 7 · 访问量 1767

猜你喜欢

转载自blog.csdn.net/weixin_44906810/article/details/103570525