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

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

c 复制代码
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)。

就像上篇博文一样采用白盒测试的方法,先进行调试,调试一切顺利后,黑盒测试,连接到单片机

代码如下:

c 复制代码
#include "reg52.h"
#include <intrins.h>
#include <string.h>

#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指令开关灯。

相关推荐
努力的悟空24 分钟前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
旦沐已成舟1 小时前
DevOps-Jenkins-新手入门级
服务器
周末不下雨2 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
软件技术员2 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
耗同学一米八2 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
一条晒干的咸魚3 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
东华果汁哥3 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
肖永威3 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
mengao12344 小时前
centos 服务器 docker 使用代理
服务器·docker·centos
布鲁格若门4 小时前
CentOS 7 桌面版安装 cuda 12.4
linux·运维·centos·cuda