Esp8266-01s学习(一):作为设备模式连接服务器,与stc51单片机相连,通过串口通信点亮led灯。

目录

一、波特率的配置

二、入网设置

     1、设置工作模式

       2、以设备模式接入家中路由器配置

          3、查询IP地址

三、 连接到TCPserver并发送数据

            1. 开关网络助手,设立TCP服务器

              2. 连接服务器

              3 . 发送数据  

              4、数据透传

四、esp8266-01s与stc51单片机相连,通过串口通信点亮led灯

1.直接上代码


一、波特率的配置

 ESP-01s 出厂波特率正 常是 115200, 注意: AT 指令,控制类都要加回车,数据传输时不加回车
     1、上电后发送 AT 指令测试通信及模块功能是否正常
AT
OK
     2、通过一下命令配置成 9600 波特率
AT+UART=9600,8,1,0,0
注:8表示数据位,1表示停止位,后面两个0分别表示校验位和流控位

二、入网设置

     1、设置工作模式

AT + CWMODE = 3 //1. station (设备)模式 2. AP (路由)模式 3. 是双模
OK      //结果

       2、以设备模式接入家中路由器配置

AT + CWJAP = "wifi名称" , "wifi密码" // 指令
WIFI CONNECTED // 结果
WIFI GOT IP // 结果

          3、查询IP地址

AT + CIFSR // 指令
//结果
+ CIFSR : APIP , "192.168.4.1"                           //表示ESP作为路由器的ip地址
+ CIFSR : APMAC , "4e:75:25:0d:ae:2f"
+ CIFSR : STAIP , "192.168.0.148"                     //连接服务器的ip地址
+ CIFSR : STAMAC , "4c:75:25:0d:ae:2f"
OK

三、 连接到TCPserver并发送数据

            1. 开关网络助手,设立TCP服务器

              2. 连接服务器

AT + CIPSTART = "TCP" , "100.117.98.129" , 8888 // 指令,注意双引号逗号都要半角 ( 英文 ) 输入
CONNECT // 结果:成功
OK // 结果:成功

              3 . 发送数据  

AT + CIPSEND = 5 // 设置即将发送数据的长度 (这里是5 个字节)
>hello   // 看到大于号后,输入消息,hello ,不要带回车
Response : SEND OK // 结果:成功
// 注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!

              4、数据透传

由于发送数据要设置数据的长度,比较麻烦,如果设置为透传,就可以不设置数据长度,想发多少就多少

AT + CIPMODE = 1 // 开启透传模式
Response : OK
AT + CIPSEND // 带回车
Response : > // 这个时候随意发送接收数据咯

  退出透传

//在透传发送数据过程中,若识别到单独的包数据 “+++”,则退出透传发送            

四、esp8266-01s与stc51单片机相连,通过串口通信点亮led灯

1.直接上代码

#include "reg52.h"
#include<intrins.h>
#include<string.h>
#define SIZE 12

sbit led1=P3^7;
sbit led2=P3^6;

sfr  AUXR=0x8E;
char buffer[SIZE];

 code char LJWL[] ="AT+CWJAP=\"5613\",\"12345678\"\r\n";   //转意在两双引号之前,以设备模式接入家中路由器配置
 code char LJFWQ[]="AT+CIPSTART=\"TCP\",\"100.117.64.126\",8888\r\n";//连接TCP server
char TCMS[] ="AT+CIPMODE=1\r\n";      //透传
char SJCS[] ="AT+CIPSEND\r\n";        //发送数据

char RESET[] = "AT+RST\r\n"; //重启模块指令

char AT_OK_Flag=0;
char AT_Connect_Net_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,REN使
  	TMOD &= 0xF0;
	  TMOD|=0x20;//配置定时器1模式8位自动
	  TH1 =0xFD;
	  TL1 =0xFD;//9600的波特率
	  TR1=1;//启动定时器
	  AUXR=0x01;
	  EA=1;//打开总中断
	  ES=1;//打开串口中断
	
}

void sendByte(char data_msg)
{
	SBUF=data_msg;
	while(TI==0);//发送中断
		TI=0;
}

void sendstring(char *str)
{
	while(*str!='\0')
	{
		sendByte(*str);
		str++;
	}
		
}
void main()
{
	    int mark=0;
	    led1=1;//灭灯状态
	//配置C51串口的通信方式
	    UartInit();
	    Delay1000ms();//给wifi模块上电时间
	   sendstring(LJWL);
		while(!AT_Connect_Net_flag);
    while(!AT_OK_Flag);
	   AT_OK_Flag = 0;
	//发送连服务器指令并等待成功
	  sendstring(LJFWQ);
		while(!AT_OK_Flag);
  	AT_OK_Flag=0;
	//发送透传模式指令并等待成功
	  sendstring(TCMS);
		while(!AT_OK_Flag);
	  AT_OK_Flag=0;
	//发送数据传输指令并等待成功
	  sendstring(SJCS);
	  while(!AT_OK_Flag);
   	AT_OK_Flag=0;
	 
		
		if(AT_Connect_Net_flag)
		{
	     led1=0;//点亮led1,代表入网成功
		}
		
		while(1)
		{
			Delay1000ms();
		//往发送缓冲区写入数据,就完成数据得发送
			sendstring("shangguan shuai");
	
		}

	

}
void Uart_Handler() interrupt 4
{
	char tmp;
	static int i=0;//静态变量,被初始化一次
	if(RI)//中断处理函数中,对于接收中断的响应
	{
		  RI=0;
		tmp=SBUF;//一个字母一个字母的输入
		//tmp=='W'||tmp=='O'||tmp=='L'||tmp=='F'
  if(tmp=='W'||tmp=='O'||tmp=='A'||tmp=='P')
  { 
		  i=0;
  } 
      buffer[i++]=tmp;
     	//入网成功的判断依据WIFI GOT IP
			if(buffer[0]=='W'&& buffer[5]=='G')
			{
				AT_Connect_Net_flag=1;
				memset(buffer,'\0',SIZE);
			}
			//连接服务器等OK返回值指令的判断
			if(buffer[0]=='O'&& buffer[1]=='K')
			{
				AT_OK_Flag=1;
				memset(buffer,'\0',SIZE);
			}
				//联网失败出现FAIL字样捕获
        if(buffer[0] == 'A' && buffer[2] == 'L'){
           for(i=0;i<2;i++){
           led1 = 0;
           Delay1000ms();
					 
           led1 = 1;
           Delay1000ms();
				
}
          sendstring(RESET);
          memset(buffer, '\0', SIZE);
} 
      //灯控指令
			if(buffer[0]=='P'&& buffer[2]=='1')
			{
				led1=0;//点亮了led1
				memset(buffer, '\0', SIZE);
			}
			if(buffer[0]=='P'&& buffer[2]=='0')
			{
				led1=1;//熄灭led1
				memset(buffer, '\0', SIZE);
			}
     
			if(i==12)
			{
				i=0;
			}
		}
			
		}
		

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值