赞
踩
目录
四、esp8266-01s与stc51单片机相连,通过串口通信点亮led灯
ATOK
AT+UART=9600,8,1,0,0注:8表示数据位,1表示停止位,后面两个0分别表示校验位和流控位
AT + CWJAP = "wifi名称" , "wifi密码" // 指令WIFI CONNECTED // 结果WIFI GOT 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
AT + CIPSTART = "TCP" , "100.117.98.129" , 8888 // 指令,注意双引号逗号都要半角 ( 英文 ) 输入CONNECT // 结果:成功OK // 结果:成功
AT + CIPSEND = 5 // 设置即将发送数据的长度 (这里是5 个字节)>hello // 看到大于号后,输入消息,hello ,不要带回车Response : SEND OK // 结果:成功// 注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!
由于发送数据要设置数据的长度,比较麻烦,如果设置为透传,就可以不设置数据长度,想发多少就多少
AT + CIPMODE = 1 // 开启透传模式Response : OKAT + CIPSEND // 带回车Response : > // 这个时候随意发送接收数据咯
退出透传
//在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送
- #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;
- }
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。