OpenEdv-开源电子网

标题: esp8266 wifi模块CIPSEND发送问题,返回no tail; [打印本页]

作者: tt朝花夕拾    时间: 2017-7-12 11:51
标题: esp8266 wifi模块CIPSEND发送问题,返回no tail;
问题介绍:最近在做一个wifi通信的项目,用到了esp8266的模组,GMR版本信息如下;
L:9 D:AT+GMR
L:43 D:AT version:0.60.0.0(Jan 29 2016 15:10:17)
L:29 D:SDK version:1.5.2(7eee54f4)
L:32 D:Ai-Thinker Technology Co. Ltd.
L:22 D:May  5 2016 17:30:30

其中,esp8266用作AP,TCPserver;电脑/手机连接到esp8266,TCPclient;
但是发现在1hz的通信频率下,电脑/手机给esp8266 AP 发送数据时,会出现模块返回:no tail 以及ERROR的提示,如下;
AT+CIPSEND=0,40
L:3 D:
L:9 D:no tail
L:7 D:ERROR

先介绍下我的esp8266的通信;

L:28 D:+IPD,0,12,192.168.4.2,56584:    ----- 1:模块收到一段数据;
AT+CIPSEND=0,39                              ----- 2:针对这一段数据解析后,我要发送一个39 byte的数据;写AT+CIPSEND 指令;
L:18 D:AT+CIPSEND=0,39                   ------ 3:模块回显设置的指令;
L:4 D:OK                                            ------ 4:模块返回OK;
%F1P,0,0:0,2.560950,5.464681,0.000000   ----- 5:收到 > 符号后,发送的数据;
L:4 D:>                                              ------ 6:之后打印 > 符号;
L:15 D:Recv 39 bytes                          ------ 7:模块返回 接收 39 bytes;
L:9 D:SEND OK                                   ------ 8:模块返回SEND OK;

正常流程如上;其中红色为发送蓝色为接收
可是,当我以1hz的频率通过电脑/手机 给esp8266发送时会出现如下提示,对比上面正常流程;没有模块回显;或者是回显错误
L:28 D:+IPD,0,12,192.168.4.2,56584:
AT+CIPSEND=0,39
L:9 D:no tail
L:7 D:ERROR

或者
L:28 D:+IPD,0,12,192.168.4.2,56584:
AT+CIPSEND=0,39
L:18 D:AT+CIPSEND=0,?9
L:9 D:no tail
L:7 D:ERROR


请问不知道大家是否了解这个no tail的错误?是esp8266的AT估计本身问题么?还是1hz过于频繁?

作者: BMN李    时间: 2017-7-12 14:19
1hz?波特率是多少?是不是数据误码了,模块解析错误?
作者: tt朝花夕拾    时间: 2017-7-12 17:16
BMN李 发表于 2017-7-12 14:19
1hz?波特率是多少?是不是数据误码了,模块解析错误?

arm 给esp8266 发送数据是间隔1s一次,所以是1hz;
esp8266的传输波特率是115200;
我将数据发送到另外一个debug串口中,显示数据正常;
比较怀疑2点;
1 arm到esp8266的uart线路存在干扰,导致esp8266接收到的数据异常;
2 esp8266本身固件处理的出现了问题;
不过以上2点还不知道如何确认;
作者: BMN李    时间: 2017-7-12 17:19
tt朝花夕拾 发表于 2017-7-12 17:16
arm 给esp8266 发送数据是间隔1s一次,所以是1hz;
esp8266的传输波特率是115200;
我将数据发送到另外 ...

AT+CIPSEND=0,?9

看这里,问号都来了。
作者: tt朝花夕拾    时间: 2017-7-13 17:28
BMN李 发表于 2017-7-12 17:19
AT+CIPSEND=0,?9

看这里,问号都来了。

是啊,所以我就像确认这2个部分;
1 arm到esp8266的uart线路存在干扰,导致esp8266接收到的数据异常;
2 esp8266本身固件处理的出现了问题;
因为我给esp8266发送的同时,我也将发送的数据发送到了debug串口如下;
AT+CIPSEND=0,39     ------ 同时打印给debug串口的数据,是正常显示的,说明数据本身没有问题;
L:18 D:AT+CIPSEND=0,?9    ----- 而esp8266回显显示的已经错误;

作者: 小xiao小    时间: 2017-8-3 15:01
楼主,我现在也遇到no tail的问题,和你一摸一样,请问你解决了吗,了可以交流下,qq:1021748709
作者: tt朝花夕拾    时间: 2017-8-4 11:19
小xiao小 发表于 2017-8-3 15:01
楼主,我现在也遇到no tail的问题,和你一摸一样,请问你解决了吗,了可以交流下,qq:1021748709

no tail 可能是你的硬件设计的信号质量问题;
我目前的修改方法是,当出现异常,error/no tail的时候,重新retry发送;
你出现问题的时候,重新再次发送会好么?
根本的问题,现在还无从解决;
作者: 小xiao小    时间: 2017-8-5 11:03
tt朝花夕拾 发表于 2017-8-4 11:19
no tail 可能是你的硬件设计的信号质量问题;
我目前的修改方法是,当出现异常,error/no tail的时候, ...

我的是一只循环发送都没用,一直no tail
AT+CIPSEND=0,1

no tail

ERROR
作者: 小xiao小    时间: 2017-8-5 11:04
tt朝花夕拾 发表于 2017-8-4 11:19
no tail 可能是你的硬件设计的信号质量问题;
我目前的修改方法是,当出现异常,error/no tail的时候, ...

你重新发乐意发出去吗?
作者: 小xiao小    时间: 2017-8-6 10:37
我发现在RST的时候会返回tail有关的信息,我的模块现在不能软件RST,我觉得很有可能是这个原因
作者: 正点原子    时间: 2017-8-6 20:33
帮顶
作者: 小xiao小    时间: 2017-8-7 08:45
正点原子 发表于 2017-8-6 20:33
帮顶

谢谢,原子哥有想法吗
作者: tt朝花夕拾    时间: 2017-8-7 09:16
小xiao小 发表于 2017-8-5 11:04
你重新发乐意发出去吗?

我的是重新发送可以发出去的;
你会不会是reset没有注意到时序?
建议每次reset后,都用AT这个指令试下模块是否返回ok后,再发送;
作者: Sun_Fly    时间: 2017-8-7 10:02
IPD头没加
作者: 小xiao小    时间: 2017-8-7 15:45
Sun_Fly 发表于 2017-8-7 10:02
IPD头没加

IPD头?能详细点吗
作者: 小xiao小    时间: 2017-8-7 15:49
tt朝花夕拾 发表于 2017-8-7 09:16
我的是重新发送可以发出去的;
你会不会是reset没有注意到时序?
建议每次reset后,都用AT这个指令试下 ...

我好像把固件烧烂了,现在RST报错,但是其他指令都好用
作者: tt朝花夕拾    时间: 2017-8-7 17:21
Sun_Fly 发表于 2017-8-7 10:02
IPD头没加

no tail 应该是没有结尾吧?我之前的理解都是数据没有发送完整;导致的no tail;
至于你说的IPD是?
作者: tt朝花夕拾    时间: 2017-8-7 17:23
小xiao小 发表于 2017-8-7 15:49
我好像把固件烧烂了,现在RST报错,但是其他指令都好用

模块在上电复位后,会有一段log输出,类似xxxx ready 等;
你现在这些有么?
另外,还是试下发送"AT\r\n" 这句,看下有没有OK返回;保证模块基础运行正常啊;
之后再调试send 等;
作者: Sun_Fly    时间: 2017-8-8 10:22
tt朝花夕拾 发表于 2017-8-7 17:21
no tail 应该是没有结尾吧?我之前的理解都是数据没有发送完整;导致的no tail;
至于你说的IPD是?

既然你都哦知道没有结尾 那加上
作者: 小xiao小    时间: 2017-8-8 17:19
Sun_Fly 发表于 2017-8-8 10:22
既然你都哦知道没有结尾 那加上

                Usart_SendString(DEBUG_USART,"AT+CIPSEND=1,1");
                Usart_SendHalfWord(DEBUG_USART, 0x0d);
                Usart_SendHalfWord(DEBUG_USART, 0x0a);
                Delay_ms(200);               
               Usart_SendByte(DEBUG_USART, '1');
               Usart_SendHalfWord(DEBUG_USART, 0x0d);
                Usart_SendHalfWord(DEBUG_USART, 0x0a);
加了回车也是no tail啊
作者: Sun_Fly    时间: 2017-8-9 09:24
直接用pritf("AT\r\n");
作者: supercainiao    时间: 2017-8-31 13:54
我也遇到了这个问题,你们是怎么产生这个error的?你们的问题解决了吗
作者: tt朝花夕拾    时间: 2017-9-4 09:59
supercainiao 发表于 2017-8-31 13:54
我也遇到了这个问题,你们是怎么产生这个error的?你们的问题解决了吗

没有解决;目前就只能按照错误重新发送的机制去进行了;
作者: kksb    时间: 2019-8-26 22:41
我也遇到了这样的问题,返回的no tail,指的是没有结尾的意思。给esp866发送的每一条at指令(注意我说的是指令,不是消息)必须要以回车结尾,你在给模块发送发送消息的指令的时候,这也是发送了一条指令,必须要以回车结尾,确认可以发送了之后再把发送的消息发过去,这时候发送的不是指令,所有的字符都看做要发送的数据。一般情况下如果你发送了一条没有以回车结尾的消息,模块会把它当成单纯的数据,不去处理,但是send指令有格式,而且模块自身也要做出反馈来进行下一步操作,所以你没有以回车结尾他也当成了一条指令,只不过不符合规则,没有规范的结尾,然后就报错了。
作者: 我就是神    时间: 2020-8-15 21:00
楼主,把你的AT+CIPSEND=0,39,改为AT+CIPSEND=39,就好了,资料上已经说的很清楚了,如果是单连接就不需要写前面的ID号,单连接是由AT+CIPMUX和AT+CIPMODE决定的
入门一般都是用单连接,

我就是遇到了这样的问题,然后按上面的方法改好的!希望能对在学ESP8266的人有所帮助!




欢迎光临 OpenEdv-开源电子网 (http://openedv.com/) Powered by Discuz! X3.4