C--51--WiFi模块ESP-01S ( 路由服务器 )

ESP-01S当成服务器:

1、接线

(接CH340接入pc)

USB转TTL插入电脑,TX/RX交叉接线,VCC接5V,GND接地

查询IP地址:AT+CIFSR

2、建立AT指令使能连接

一、配置网络调试助手

复制代码
	协议类型:TCP Client
	本地主机地址:192.168.4.2
	远程主机地址:192.168.4.1 :333

二、安信可调试助手:

复制代码
①AT+CWMODE=3;		//配置双模
		 Response :OK
②AT+CIPMUX=1; 		//连接网络调试助手后配置,使能多链接
  		 Response :OK
③AT+CIPSERVER=1 ;	//建立tcpserver,// default port = 333
	 	 Response :OK
④AT+CIPSEND=0,4;	//发送4字节数据在0通道上
	>abcd			//输入数据,不带回车,去掉发送新行;再次发送时,勾选发送新行,发送AT指令
	     Response :SEND OK
⑤+IPD, 0, n: xxxxxxxxxx 	//接收数据
	//+IPD是固定字符串  ,0是通道,n是数据长度,xxx是数据
⑥AT+CIPCLOSE=0		//断开连接
		 Response :0, CLOSED OK

C51来配置ESP作服务器

①接线

(ESP8266接C51)

TX/RX交叉接线,VCC接5V,GND接地

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];				//数组操作发送字符串


    //1、 配置路由模式
code char LYMS[] = "AT+CWMODE=2\r\n";
//转义字符,\"保留原本的引号字符意义,否则出错
	//2、使能多连接
code char DLJ[] = "AT+CIPMUX=1\r\n";
	//3、建立tcpserver, default port = 333
char JLFW[] = "AT+CIPSERVER=1\r\n";
	//4、发送数据
char FSSJ[] = "AT+CIPSEND=0,5\r\n";	//发送5字节数据在0通道上

char AT_OK_Flag = 0;			//OK返回标志位
char AT_Connect_Net_Flag = 0;	//WIFI GOT IP返回标志位
char Client_Connect_Flag = 0;	//客户端接入的标志



//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	
	EA = 1;			//开启总中断
	ES = 1;			//开启串口中断
}


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 sendByte(char data_msg)
{
	//往发送缓冲区中写入数据,就完成了数据的发送
	SBUF = data_msg;

	while(!TI);		//超声波中,用while等待,发送成功后T1 == 1
	
	TI = 0;		
}

void sendString(char* str)
{
	while(*str != '\0'){
		sendByte(*str);
		str++;
	}
}

void main()
{
	int mark = 0;
	
	D5 = D6 = 1;		//D5,D6通电以后为灭的状态
	//配置c51串口的通信方式 
	UartInit();			
	Delay1000ms();					//给espwifi模块上电时间
	
	sendString(LYMS);			//配置路由模式
	while(!AT_OK_Flag);			//返回OK,等待
	AT_OK_Flag = 0;
	sendString(DLJ);			//使能多连接
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
	sendString(JLFW);			//建立tcpserver
	//while(!AT_OK_Flag);
	
	while(!Client_Connect_Flag);	//客户端接入的标志,可以继续向下说明接入成功
	AT_OK_Flag = 0;
	
	if(Client_Connect_Flag){
		D5 = 0;			//D5点亮,代表有客户端接入
		D6 = 0;			
	}

	while(1){
		//发送数据
		sendString(FSSJ);
		Delay1000ms();
   		sendString("Hello");
		Delay1000ms();
		Delay1000ms();
	}
	
}

//中断函数
void UART_Rountine(void) interrupt 4
{
	static int i = 0;		//静态的局部变量,被初始化一次
	char tmp;
	
	if(RI){			//接收中断
		RI = 0;		//软件复位
		tmp = SBUF;		//读数据

		if(tmp == 'W' || tmp == 'O' || tmp == 'L' || tmp == '0' || tmp == ':'){	//连接失败显示FAIL
			i = 0;
		}
		buffer[i] = tmp;
		i++;
		
		if(buffer[0] == 'W' && buffer[5] == 'G'){
			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] == 'O' && buffer[2] == 'C'){
			Client_Connect_Flag = 1;	//
			memset(buffer,'\0',SIZE);
			
		}
		
		if(buffer[0] == ':' && buffer[1] == 'o' && buffer[2] == 'p'){			
			D5 = 0;		//D5点亮
			memset(buffer,'\0',SIZE);		
		}
		if(buffer[0] == ':' && buffer[1] == 'c' && buffer[2] == 'l'){
			D5 = 1;		//D5熄灭
			memset(buffer,'\0',SIZE);
		}
		if(i == 12)i = 0;
	}
	if(TI);			//发送中断
}
相关推荐
Elastic 中国社区官方博客2 分钟前
使用 TypeScript 创建 Elasticsearch MCP 服务器
大数据·服务器·数据库·人工智能·elasticsearch·搜索引擎·全文检索
我的老子姓彭3 分钟前
stm32串口hal库
stm32·单片机·嵌入式硬件
Bert.Cai3 分钟前
Python逻辑运算符详解
开发语言·python
说给风听.5 分钟前
从零学会 Java 异常处理 —— 核心语法、自定义异常与面试指南
java·开发语言·面试
爱喝纯牛奶的柠檬7 分钟前
【已验证】STM32F103的MPU6050应用一(驱动篇)
stm32·单片机·嵌入式硬件
是翔仔呐7 分钟前
第10章 串口通信USART全解:轮询/中断/DMA三种收发模式与上位机通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
身如柳絮随风扬7 分钟前
Java JDBC 从入门到进阶
java·开发语言
小义_7 分钟前
【RH134总结】 八
linux·运维·服务器·云原生·红帽
nbsaas-boot11 分钟前
AI编程的现实困境与未来路径:从“可用”到“可靠”的跃迁
java·运维·开发语言·架构
廖圣平16 分钟前
从零开始,福袋直播间脚本研究【八】《策略模式》
开发语言·python·bash·策略模式