OpenEdv-开源电子网

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

根据WIFI模块接收不同的数据实现不同的功能,求助大家

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-3-9
在线时间
3 小时
发表于 2016-3-9 20:19:47 | 显示全部楼层 |阅读模式
#include "common.h"
#include "beep.h"
#include "string.h"
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32开发板
//ATK-ESP8266 WIFI模块 WIFI AP驱动代码          
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2014/4/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved                                                                          
///////////////////////////////////////////////////////////////////////////////////////////////////////////


//ATK-ESP8266 WIFI AP测试
//用于测试TCP/UDP连接
//返回值:0,正常
//    其他,错误代码
u8 atk_8266_wifiap_test(void)
{
        u8 netpro=0;        //网络模式
        u8 key;
        u8 timex=0;
        u8 ipbuf[16];         //IP缓存
        u8 *p;
        u16 t=999;                //加速第一次获取链接状态
        u8 res=0;
        u16 rlen=0;
        u8 constate=0;        //连接状态
        p=mymalloc(SRAMIN,32);                                                        //申请32字节内存
       

               
        //Server 配置               
                                        LCD_Clear(WHITE);
                                        POINT_COLOR=RED;
                                        Show_Str_Mid(0,30,"ATK-ESP WIFI-AP 测试",16,240);
                                        Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);
                                        atk_8266_send_cmd("AT+CIPMUX=1","OK",20);   //0:单连接,1:多连接
                                        sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);
                                        atk_8266_send_cmd(p,"OK",20);     //开启Server模式,端口号为8086
                       

                        LCD_Clear(WHITE);
                        POINT_COLOR=RED;
                        Show_Str_Mid(0,30,"ATK-ESP WIFI-AP 测试",16,240);
                        Show_Str(30,50,200,16,"正在配置ATK-ESP模块,请稍等...",12,0);                       
                        LCD_Fill(30,50,239,50+12,WHITE);                        //清除之前的显示
                        Show_Str(30,50,200,16,"配置ATK-ESP模块成功!",12,0);
                        delay_ms(200);
                        Show_Str(30,50,200,16,"WK_UP:退出测试  KEY0:发送数据",12,0);
                        LCD_Fill(30,80,239,80+12,WHITE);
                        atk_8266_get_wanip(ipbuf);//服务器模式,获取WAN IP
                        sprintf((char*)p,"IP地址:%s 端口:%s",ipbuf,(u8*)portnum);
                        Show_Str(30,65,200,12,p,12,0);                                //显示IP地址和端口       
                        Show_Str(30,80,200,12,"状态:",12,0);                 //连接状态
                        Show_Str(120,80,200,12,"模式:",12,0);                 //连接状态
                        Show_Str(30,100,200,12,"发送数据:",12,0);         //发送数据
                        Show_Str(30,115,200,12,"接收数据:",12,0);        //接收数据
                        atk_8266_wificonf_show(30,180,"请用设备连接WIFI热点:",(u8*)wifiap_ssid,(u8*)wifiap_encryption,(u8*)wifiap_password);
                        POINT_COLOR=BLUE;
                        Show_Str(120+30,80,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],12,0);                 //连接状态
                        USART3_RX_STA=0;
                        while(1)
                        {
                                key=KEY_Scan(0);
                                if(key==WKUP_PRES)                        //WK_UP 退出测试                 
                                {  
                                        res=0;
                                        atk_8266_quit_trans();        //退出透传
                                        atk_8266_send_cmd("AT+CIPMODE=0","OK",20);   //关闭透传模式
                                        break;                                                                                                 
                                }
                                else if(key==KEY0_PRES)        //KEY0 发送数据


                                        {
                                                sprintf((char*)p,"ATK-8266%s测试%02d\r\n",ATK_ESP8266_WORKMODE_TBL[netpro],t/10);//测试数据
                                                Show_Str(30+54,100,200,12,p,12,0);
                                          atk_8266_send_cmd("AT+CIPSEND=0,25","OK",200);  //发送指定长度的数据
                                                delay_ms(200);
                                                atk_8266_send_data(p,"OK",100);  //发送指定长度的数据
                                                timex=100;
                                        }

                       
        if(timex)timex--;
        if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
        t++;
        delay_ms(5);
               
        if(USART3_RX_STA&0X8000)                //接收到一次数据了
        {
                rlen=USART3_RX_STA&0X7FFF;        //得到本次接收到的数据长度
                USART3_RX_BUF[rlen]=0;                //添加结束符
                printf("%s",USART3_RX_BUF);        //发送到串口   
                sprintf((char*)p,"收到%d字节,内容内容如下",rlen);//接收到的字节数
                LCD_Fill(30+54,115,239,130,WHITE);
                POINT_COLOR=BRED;
                Show_Str(30+54,115,156,12,p,12,0);                         //显示接收到的数据长度
                POINT_COLOR=BLUE;
                LCD_Fill(30,130,239,319,WHITE);
                Show_Str(30,130,180,190,USART3_RX_BUF,12,0);//显示接收到的数据  
                USART3_RX_STA=0;
               
                if(USART3_RX_BUF[0]==0x31)
                {
                        LED1=0;
//                 delay_ms(1000);
//                        LED1=1;
                        BEEP=1;
                        delay_ms(1000);
                        BEEP=0;
                }
//               
                if(constate!='+')t=1000;                //状态为还未连接,立即更新连接状态
                else t=0;                   //状态为已经连接了,10秒后再检查
        }  
       
       

        if(t==1000)//连续10秒钟没有收到任何数据,检查连接是不是还存在.
        {
                constate=atk_8266_consta_check();//得到连接状态
                if(constate=='+')Show_Str(30+30,80,200,12,"连接成功",12,0);  //连接状态
                else Show_Str(30+30,80,200,12,"连接失败",12,0);                    
                t=0;
        }
        if((t%200)==0)LED0=!LED0;
        atk_8266_at_response(1);
}
        myfree(SRAMIN,p);                //释放内存
        return res;               
}


利用原子哥的实验删除了一些不需要的代码,主函数直接进入配置,能够正常的接收和输出数据,加了一段简单的代码               
if(USART3_RX_BUF[0]==0x01)
                {
                        LED1=0;
//                 delay_ms(1000);
//                        LED1=1;
                        BEEP=1;
                        delay_ms(1000);
                        BEEP=0;
                }
手机发送1过去,没反应,但是如果改成if(USART3_RX_BUF[0]!=0x01) 则蜂鸣器会响,灯亮,说明确实接收到了数据,只是接收 到的数据不是1,
想问一下大家这是什么原因?????????????????

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

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2016-3-9 21:28:18 | 显示全部楼层
手机发送的是字符1吧,判断的时候应该是if(USART3_RX_BUF[0]=='1')
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-3-9
在线时间
3 小时
 楼主| 发表于 2016-3-9 21:48:47 | 显示全部楼层
已解决
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2016-3-10
在线时间
4 小时
发表于 2016-3-18 10:05:08 | 显示全部楼层
求解决办法
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-5-23
在线时间
10 小时
发表于 2016-5-23 22:50:47 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 18:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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