OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4113|回复: 3

esp8266 学习过程,小白文

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2018-10-19
在线时间
25 小时
发表于 2018-11-10 11:01:45 | 显示全部楼层 |阅读模式
使用硬件:战舰3,esp8266软件:SocketTool,XCOM V2.0
连接方式:串口1连接电脑,串口三连接wifi
time2定时器做为wifi异常处理定时器wifi连接路由器和网络服务器,8266作为tcp clien连接sever
void wifi_run(void)
{
          wifi_null();
                wifi_sat=NULL;   //验证标志位置空
                while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
          {
                        u3_printf("AT\r\n");
                  delay_ms(1000);
                        printf("%s",(const char*)USART3_RX_BUF);
                        USART3_RX_STA=0;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");//strstr(str1,str2)测算str1是否是str2的子串
                        wifi_null();     //清空接收
                }
                wifi_sat=NULL;  //重置指向为null
                while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
          {
                        u3_printf("AT+CWMODE=3\r\n");
                  for(i=0;i<3;i++)
                    delay_ms(1000);
                        printf("%s",(const char*)USART3_RX_BUF);
                        USART3_RX_STA=0;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");  //返回值为地址,不是的话返回null
                        wifi_null();     //清空接收
                }
                wifi_sat=NULL;
                while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
          {
                        u3_printf("AT+CWJAP_CUR=\"@Tianb");//账号,密码
                          delay_ms(1);
                  u3_printf("oPhone\",\"2345678901\"\r\n");
                  for(i=0;i<20;i++)
                    delay_ms(1000);
                        printf("%s",(const char*)USART3_RX_BUF);
                        USART3_RX_STA=0;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");  //返回值为地址,不是的话返回null
                        wifi_null();     //清空接收
                }
                wifi_sat=NULL;
                while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
          {
                        u3_printf("AT+CIPMUX=0\r\n");  //设置为单链接模式
                    delay_ms(1000);
                        printf("%s",(const char*)USART3_RX_BUF);
                        USART3_RX_STA=0;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");  //返回值为地址,不是的话返回null
                        wifi_null();     //清空接收
                }
                wifi_sat=NULL;
                while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
          {
                        u3_printf("AT+CIPSTART=\"TCP\",");
                    delay_ms(1);
                  u3_printf("\"192.168.2.227\",8080\r\n");
                  for(i=0;i<5;i++)
                    delay_ms(1000);
                        printf("%s",(const char*)USART3_RX_BUF);
                        USART3_RX_STA=0;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");  //返回值为地址,不是的话返回null
                        if(wifi_sat==NULL)
                          wifi_sat=strstr((const char*)USART3_RX_BUF,"CON");
                        wifi_null();                                      //清空接收
                        if(wifi_sat!=NULL)
                        {
                                printf("连接完成");
                                wifi_sat_1=1;                                   //连接标志位开启
                        }
                }
        }


数据读取函数
void wifi_r(char *temp)  //temp是返回的数据
{        
          wifi_sat=NULL;
                        wifi_sat=strstr((const char*)USART3_RX_BUF,"A");    //结束符为A,接收的数据识别到A为一帧数据发送完成
                        if(wifi_sat!=NULL)             //如果接收到结束符,将数据输出
                        {
                                printf("%s",USART3_RX_BUF);
                        for(i=0;USART3_RX_BUF[i]!='\0';i++)
                        {
                          temp[i]=USART3_RX_BUF[i];
                                if(USART3_RX_BUF[i+1]=='\0')
                                        temp[i+1]='\0';
                        }
                wifi_null();
                USART3_RX_STA=0;   //可以重新接受(使usart3从头开始接收)                       
                }
}

数据发送函数
void wifi_w1(char *temp)  //普通数据发送
{
        int s;
  s=strlen(temp)+2;   //发送字节测算
  wifi_null();       //清空接收
        wifi_sat=NULL;
        while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
         {
                u3_printf("AT+CIPSEND=%d\r\n",s);//字节数,指令要发送多少字节数
          for(i=0;i<5;i++)
            delay_ms(1000);
                printf("%s",(const char*)USART3_RX_BUF);
                USART3_RX_STA=0;
                wifi_sat=strstr((const char*)USART3_RX_BUF,">");  //返回值为地址,不是的话返回null
                 wifi_null();     //清空接收
        }       
         wifi_sat=NULL;
         while(wifi_sat==NULL)  //定义为常变量,在本行语句中不能被更改
         {
                u3_printf("%s\r\n",temp);   //发送字符串
          for(i=0;i<3;i++)
            delay_ms(1000);
                printf("%s",(const char*)USART3_RX_BUF);
                USART3_RX_STA=0;
                wifi_sat=strstr((const char*)USART3_RX_BUF,"OK");  //返回值为地址,不是的话返回null
                wifi_null();     //清空接收
        }       
}


char *wifi_error3=NULL;         //检测指令是否发送正常
char *wifi_error1=NULL;         //检测wifi是否正常连接
char *wifi_error2=NULL;         //检测wifi是否已连接
char *wifi_error4=NULL;         //服务器断开

连接异常处理
void TIM2_IRQHandler(void)   //TIM3中断
{
        wifi_error1=NULL;  
        wifi_error2=NULL;
        wifi_error3=NULL;
  wifi_error4=NULL;
        if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
                {
               
                        if(wifi_sat_1)               //检测wifi是否连接
                        {
                         wifi_error1=strstr((const char*)USART3_RX_BUF,"DISCONNECT");  //检测连接是否断开
                         wifi_error3=strstr((const char*)USART3_RX_BUF,"ERROR");       //检测指令是否发送正常
                         wifi_error4=strstr((const char*)USART3_RX_BUF,"CLOSED");      //服务器已断开
                                if(wifi_error4)
                                {
                                  printf("服务器断开");
                            wifi_run();
                                }
                        if(wifi_error3)
                        {
                                printf("模块重启");
                          wifi_run();
                               
                        }
                               
                        if(wifi_error1)            //连接已断开
                        {
                                if(k==0)               //执行一次
                                {
                                        wifi_null();
                            printf("连接已断开");
                                        USART3_RX_STA=0;
                                        k=1;
                                }
                        }
                                wifi_error2=strstr((const char*)USART3_RX_BUF,"GOT IP");   //检测连接是否链接
                                if(wifi_error2)         //已连接
                                {
                                 wifi_null();
                                 printf("wifi连接");
                                 wifi_error1=NULL;
               wifi_error2=NULL;
                                 USART3_RX_STA=0;
                                 k=0;
                                }
                 }
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除TIMx更新中断标志
                }
}

不说了,上程序包

截图00.png
截图01.png

esp8266程序.zip

10.36 MB, 下载次数: 631

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2018-10-19
在线时间
25 小时
 楼主| 发表于 2018-11-10 11:14:14 | 显示全部楼层
补一波资料

ESP8266官方AT指令集.pdf

1020.56 KB, 下载次数: 125

4B-ESP8266 AT 指令使用示例_V0.4.pdf

754.9 KB, 下载次数: 108

回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-11-19
在线时间
2 小时
发表于 2018-11-29 10:22:50 | 显示全部楼层
好的!!  我一定好好学
回复 支持 反对

使用道具 举报

16

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2018-10-20
在线时间
30 小时
发表于 2018-12-26 23:18:26 | 显示全部楼层
111111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 17:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表