目录
一、波特率的配置
二、入网设置
1、设置工作模式
2、以设备模式接入家中路由器配置
3、查询IP地址
三、 连接到TCPserver并发送数据
1. 开关网络助手,设立TCP服务器
2. 连接服务器
3 . 发送数据
4、数据透传
四、esp8266-01s与stc51单片机相连,通过串口通信点亮led灯
1.直接上代码
一、波特率的配置
ESP-01s 出厂波特率正 常是 115200, 注意: AT 指令,控制类都要加回车,数据传输时不加回车
1、上电后发送 AT 指令测试通信及模块功能是否正常
ATOK
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 : OKAT + CIPSEND // 带回车Response : > // 这个时候随意发送接收数据咯
退出透传
//在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送
四、esp8266-01s与stc51单片机相连,通过串口通信点亮led灯
1.直接上代码
#include "reg52.h"#include<intrins.h>#include<string.h>#define SIZE 12sbit 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 serverchar 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; } } }