你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

esp8266关于数据接收!!!

[复制链接]
lihan519 提问时间:2018-2-7 09:38 /
       esp8266 在AP模式下接收数据,串口读出的数据中带有+IPD,模块固件中加上的,有没有办法去掉???


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



收藏 评论11 发布时间:2018-2-7 09:38

举报

11个回答
七哥 回答时间:2018-2-7 10:02:15
看一下规律,写个上位机C程序随便去呗
或者用ultraedit等工具软件,直接替换掉;只填写被替换掉的数据,新的数据保持为空,就相当于删除操作。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

衔胆栖冰 回答时间:2018-2-7 10:40:05
你的bin文件数据没有进行拆封包处理吗,那么你如何判断数据是否完整或者正确无误?如果你有这些操作,模块给你加什么数据都没影响。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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信息,我首先要去除掉!
andey 回答时间:2018-2-7 15:10:01
提示: 作者被禁止或删除 内容自动屏蔽
废鱼 回答时间:2018-2-7 15:17:44
很多模块都是这样的,加IPD是为了告诉我们有数据接收到了。不然你怎么确定是不是正确的数据呢?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

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
很好过滤的。
给个例子:

  1. #include <string.h>
  2. //================================================================
  3. //查找指定字符串在另一字符串中的位置
  4. //输入参数:
  5. //src      输入源
  6. //des      要查找的数组的起始位置
  7. //bGetEnd  查找长度
  8. //输出参数:
  9. // -1,输入数据无效
  10. // 0, 没有找到数据
  11. //0以上,表示找到数据的位置
  12. //================================================================
  13. int mystrstr( char * src, char * des ,char bGetEnd )
  14. {
  15.         char * i;
  16.         int ret=0;
  17.         int ret1=0;
  18.         if(( *src == 0) || ( *des == 0 ) )
  19.         {
  20.                 return -1;                                        //输入的数据无效
  21.         }
  22.         i =strstr(src,des);                                //调用系统函数strstr,查找指定字符串在另一字符串中的位置
  23.         if( i == 0 ){
  24.                 return 0;                                        //没有找到数据
  25.         }
  26.         ret = i - src;
  27.         if( bGetEnd!=0){                                //如果 bGetEnd ==1,则返回包含 des字符串长度 的数据
  28.                 ret1 = strlen(des);                        //调用系统函数strlen,计算字符串的长度
  29.                 ret += ret1;
  30.         }
  31.         return ret;                                                //如果 bGetEnd ==0,则返回 des字符串起始位置 的数据
  32. }


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

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

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

  48.         return 0;
  49. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

butterflyspring 回答时间:2018-3-7 16:07:17
他们有开源码的,你可以修改他们AT指令的源码.简单的办法就是用透传模式呀,就没有这个了...

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

迎风干 回答时间:2019-2-26 15:38:17
楼主 怎么解决的呀 我也碰到这个问题了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版