lihan519 发表于 2018-2-7 09:38:27

esp8266关于数据接收!!!

       esp8266 在AP模式下接收数据,串口读出的数据中带有+IPD,模块固件中加上的,有没有办法去掉???


      现在在进行bin文件的接收,我要解析出原始二进制文件,IPD没法去掉,有没有朋友做过,求助!!!!



toofree 发表于 2018-2-7 10:02:15

看一下规律,写个上位机C程序随便去呗
或者用ultraedit等工具软件,直接替换掉;只填写被替换掉的数据,新的数据保持为空,就相当于删除操作。

衔胆栖冰 发表于 2018-2-7 10:40:05

你的bin文件数据没有进行拆封包处理吗,那么你如何判断数据是否完整或者正确无误?如果你有这些操作,模块给你加什么数据都没影响。

lihan519 发表于 2018-2-7 11:29:38

toofree 发表于 2018-2-7 10:02
看一下规律,写个上位机C程序随便去呗
或者用ultraedit等工具软件,直接替换掉;只填写被替换掉的数据,新 ...

不管发送什么数据,是8266给加上的IPD信息,只能放到嵌入式端

lihan519 发表于 2018-2-7 11:32:14

衔胆栖冰 发表于 2018-2-7 10:40
你的bin文件数据没有进行拆封包处理吗,那么你如何判断数据是否完整或者正确无误?如果你有这些操作,模块 ...

自己添加的协议,同时加了校验,来保证数据完整性和准确性!
mcu和8266通过串口通信,我接收到的是8266处理后的数据,已经加上ipd信息,我首先要去除掉!

andeyqi 发表于 2018-2-7 15:10:01

这个+IPD应该是固定的格式,收到的每包数据把这个过滤掉不就ok了吗,应该很好过滤吧

发表于 2018-2-7 15:17:44

很多模块都是这样的,加IPD是为了告诉我们有数据接收到了。不然你怎么确定是不是正确的数据呢?

lihan519 发表于 2018-2-8 10:35:11

andeyqi 发表于 2018-2-7 15:10
这个+IPD应该是固定的格式,收到的每包数据把这个过滤掉不就ok了吗,应该很好过滤吧 ...

二进制文件里面,不是很好过滤呢!

lihan519 发表于 2018-2-8 10:36:31

安 发表于 2018-2-7 15:17
很多模块都是这样的,加IPD是为了告诉我们有数据接收到了。不然你怎么确定是不是正确的数据呢? ...

通过加协议来验证吧!就是加了IPD,其实也不能保证用户数据的完整性和准确性!

无薪税绵 发表于 2018-3-7 16:00:56

很好过滤的。
给个例子:

#include <string.h>
//================================================================
//查找指定字符串在另一字符串中的位置
//输入参数:
//src      输入源
//des      要查找的数组的起始位置
//bGetEnd查找长度
//输出参数:
// -1,输入数据无效
// 0, 没有找到数据
//0以上,表示找到数据的位置
//================================================================
int mystrstr( char * src, char * des ,char bGetEnd )
{
        char * i;
        int ret=0;
        int ret1=0;
        if(( *src == 0) || ( *des == 0 ) )
        {
                return -1;                                        //输入的数据无效
        }
        i =strstr(src,des);                                //调用系统函数strstr,查找指定字符串在另一字符串中的位置
        if( i == 0 ){
                return 0;                                        //没有找到数据
        }
        ret = i - src;
        if( bGetEnd!=0){                                //如果 bGetEnd ==1,则返回包含 des字符串长度 的数据
                ret1 = strlen(des);                        //调用系统函数strlen,计算字符串的长度
                ret += ret1;
        }
        return ret;                                                //如果 bGetEnd ==0,则返回 des字符串起始位置 的数据
}


int main()
{
        char pUART_Buf[]={"+IPD,0,10:1234567"}; //这是固有数据+字符串
        char pGet_Buf={0};                                        //用来保存提取出来的字符串
        char sFindString[]={":"};                                //这是要查找和字符
        int ret;

        ret = mystrstr ( (char *)&pUART_Buf ,(char *)&sFindString ,11 );
        //10为字符串 "+IPD,0,xx:"的长度
        //内存块比较 pUART_Buf 等于sFindString,返回值就=0               
        //使用memcmp函数,要先引用: <string.h>

        memcpy( (char *) &pGet_Buf ,(char *) &pUART_Buf , (strlen(pUART_Buf) - ret) );
        //先引用 "string.h"
        //用法:memcpy( 目标数组 , 源数组 ,截取的长度 )
        //(strlen(pUART_Buf) - ret) ,计算出需要的数组的长度
        //这样,就可以提取到 1234567 这样的字符串了。

        return 0;
}
页: [1] 2
查看完整版本: esp8266关于数据接收!!!