• 将ESP工作为AP路由模式并当成服务器


    ESP8266模块通过usb转串口接入电脑

    AT+CWMODE=3	//1.配置成双模
    
    AT+CIPMUX=1	//2.使能多链接
    
    AT+CIPSERVER=1	//3.建立TCPServer
    
    AT+CIPSEND=0,4	//4.发送4个字节在链接0通道上
    >
    
    AT+CIPCLOSE=0	//5.断开连接
    

    通过wifi找到安信可的wifi信号并连接
    在这里插入图片描述
    连接后查看自己的ip地址变为192.168.4.2
    在这里插入图片描述
    说明此时已经与ESP连接成功,打开网络调试助手,选择TCP Client,输入本地主机地址,以及远程主机地址(端口默认为333)。
    在这里插入图片描述
    就像上篇博文一样采用白盒测试的方法,先进行调试,调试一切顺利后,黑盒测试,连接到单片机
    代码如下:

    #include "reg52.h"
    #include 
    #include 
    
    #define SIZE 12
    sfr AUXR = 0x8E;
    sbit D5 = P3^7;
    sbit D6 = P3^6;
    
    char buffer[SIZE];
    
    
    char LYMS[] = "AT+CWMODE=2\r\n";	//1.工作在路由模式
    char DLJ[] = "AT+CIPMUX=1\r\n";	//2.使能多链接
    char JLFW[] = "AT+CIPSERVER=1\r\n";	//3.建立TCPServer,默认端口号333
    char FSSJ[] = "AT+CIPSEND=0,5\r\n";	//4.发送4个字节在链接0通道上
    
    char AT_Connect_Net_Flag = 0;
    char AT_OK_Flag = 0;
    char Client_Connect_Flag = 0;
    
    void Delay1000ms()		//@11.0592MHz
    {
    	unsigned char i, j, k;
    
    	_nop_();
    	i = 8;
    	j = 1;
    	k = 243;
    	do
    	{
    		do
    		{
    			while (--k);
    		} while (--j);
    	} while (--i);
    }
    
    void UartInit(void)		//9600bps@11.0592MHz
    {
    	SCON = 0x50;	//定义串口工作方式为方式1,8位UART
    	//PCON初值为00x1 0000符合我们的要求,我们只需要SMOD=0不加倍即可
    	AUXR = 0x01;
    	TMOD &= 0x0F;
    	TMOD |= 0x20;	//配置定时器1为8为自动重载定时器
    	
    	TL1 = 0xFD;
    	TH1 = 0xFD;	//9600波特率初值
    	
    	TR1 = 1;	//打开中断
    	
    	EA = 1;	//开启总中断
    	ES = 1;	//开启UART中断
    }
    
    void sendByte(char data_msg){
    	SBUF = data_msg;
    	//当8位数据没有传送结束时,卡在while循环中
    	while(!TI);	//TI发送中断请求标志位,第8位数据传送结束时,硬件自动置1
    	TI = 0;
    }
    
    void sendString(char* str){
    	while(*str != '\0'){
    		sendByte(*str++);
    	}
    }
    
    void main()
    {
    	int mark = 0;
    	D5 = D6 = 1;
    	//配置C51串口的通信方式
    	UartInit();
    	Delay1000ms();	//给wifi模块上电时间
    	
    	sendString(LYMS);	//路由模式
    	while(!AT_OK_Flag);
    	AT_OK_Flag = 0;
    	
    	sendString(DLJ);	//多链接
    	while(!AT_OK_Flag);
    	AT_OK_Flag = 0;
    	
    	sendString(JLFW);	//建立TCP服务器
    	//while(!AT_OK_Flag);
    	while(!Client_Connect_Flag);
    	AT_OK_Flag = 0;
    	
    	if(Client_Connect_Flag){
    		//两盏灯同时亮 表示有客户端接入
    		D5 = 0;
    		D6 = 0;
    	}
    
    	
    	while(1){
    		sendString(FSSJ);
    		Delay1000ms();
    		Delay1000ms();
    		sendString("Hello");
    		Delay1000ms();
    		Delay1000ms();
    	}	
    }
    
    void Uart_Handler() interrupt 4
    {
    	static int i = 0;
    	char tmp;
    	if(RI){	//中断处理函数中,对于接收中断的响应
    		RI = 0;
    		tmp = SBUF;
    		if(tmp == 'W' || tmp == 'O' || tmp == 'L' || tmp == '0' || tmp == ':'){
    			i = 0;
    		}
    		buffer[i] = tmp;
    		i++;
    		
    		if(buffer[0] == 'W' && buffer[5] == 'G'){	//当显示WIFI GOR IP时表示网络已经接入,修改标志位
    			AT_Connect_Net_Flag = 1;
    			memset(buffer,'\0',SIZE);
    		}
    		
    		if(buffer[0] == 'O' && buffer[1] == 'K'){
    			AT_OK_Flag = 1;
    			memset(buffer,'\0',SIZE);
    		}
    		
    		if(buffer[0] == '0' && buffer[2] == 'C'){
    			Client_Connect_Flag = 1;
    			memset(buffer,'\0',SIZE);
    		}
    		
    		if(buffer[0] == ':' && buffer[1] == 'o' && buffer[2] == 'p'){
    			D5 = 0;
    			memset(buffer,'\0',SIZE);
    		}
    		if(buffer[0] == ':' && buffer[1] == 'c' && buffer[2] == 'l'){
    			D5 = 1;
    			memset(buffer,'\0',SIZE);
    		}
    		if(i == 12) i=0;
    	}
    	//if(TI);
    }
    

    会卡在服务器连入即while(!Client_Connect_Flag);需要我们找到wifi连入,并将网络调试助手连接后即可收到心跳包的数据,此时单片机的两盏灯点亮,我们可以通过open和close指令开关灯。

  • 相关阅读:
    初识C++(二)
    C语言每日一题(7):获得月份天数
    Datawhale智能汽车AI挑战赛
    统计模型----决策树
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java手工艺品在线网站k5284
    Win10,Office2016及以上图标异常解决方案
    React中StrictMode严格模式,导致开发环境,接口会请求两次或多次( useEffect 请求多次)
    你在终端启动的进程,最后都是什么下场?(上)
    26. 通过 cilium pwru了解网络包的来龙去脉
    内存ECC高级纠错算法有哪些?
  • 原文地址:https://blog.csdn.net/weixin_49387645/article/details/138576181