-->
Page 1 of 2

CIPSEND sending response from const uint8_t *buffer

PostPosted: Sat Apr 04, 2015 12:35 pm
by xabier98
I am having problems with a AT+CIPSEND=0,210 command

I want to send as the response of a wifi HTTP GET, the response i have received from a GPRS HTTP GET

I have the response in a const uint8_t *buffer and the size is uint32_t len = 210, this response also contains the NewLine Characters

This is the response:

Code: Select allHTTP/1.1 200 OK
Date: Sat, 04 Apr 2015 17:10:51 GMT
Server: Apache
X-Powered-By: PHP/5.4.38
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json

17
{"k":"vhgZs45KDwrsZSB"}
0


And I printed the content of the const uint8_t *buffer
Code: Select all   for (uint32_t i = 0; i < len; i++) {
      Serial.print(i);
      Serial.print("\t");
      Serial.print((char)buffer[i]);
      Serial.print("\t");
      Serial.println(buffer[i]);      
   }


0   H   72
1   T   84
2   T   84
3   P   80
4   /   47
5   1   49
6   .   46
7   1   49
8       32
9   2   50
10   0   48
11   0   48
12       32
13   O   79
14   K   75
15      13
16
10
17   D   68
18   a   97
19   t   116
20   e   101
21   :   58
22       32
23   S   83
24   a   97
25   t   116
26   ,   44
27       32
28   0   48
29   4   52
30       32
31   A   65
32   p   112
33   r   114
34       32
35   2   50
36   0   48
37   1   49
38   5   53
39       32
40   1   49
41   7   55
42   :   58
43   1   49
44   0   48
45   :   58
46   5   53
47   1   49
48       32
49   G   71
50   M   77
51   T   84
52      13
53
10
54   S   83
55   e   101
56   r   114
57   v   118
58   e   101
59   r   114
60   :   58
61       32
62   A   65
63   p   112
64   a   97
65   c   99
66   h   104
67   e   101
68      13
69
10
70   X   88
71   -   45
72   P   80
73   o   111
74   w   119
75   e   101
76   r   114
77   e   101
78   d   100
79   -   45
80   B   66
81   y   121
82   :   58
83       32
84   P   80
85   H   72
86   P   80
87   /   47
88   5   53
89   .   46
90   4   52
91   .   46
92   3   51
93   8   56
94      13
95
10
96   C   67
97   o   111
98   n   110
99   n   110
100   e   101
101   c   99
102   t   116
103   i   105
104   o   111
105   n   110
106   :   58
107       32
108   c   99
109   l   108
110   o   111
111   s   115
112   e   101
113      13
114
10
115   T   84
116   r   114
117   a   97
118   n   110
119   s   115
120   f   102
121   e   101
122   r   114
123   -   45
124   E   69
125   n   110
126   c   99
127   o   111
128   d   100
129   i   105
130   n   110
131   g   103
132   :   58
133       32
134   c   99
135   h   104
136   u   117
137   n   110
138   k   107
139   e   101
140   d   100
141      13
142
10
143   C   67
144   o   111
145   n   110
146   t   116
147   e   101
148   n   110
149   t   116
150   -   45
151   T   84
152   y   121
153   p   112
154   e   101
155   :   58
156       32
157   a   97
158   p   112
159   p   112
160   l   108
161   i   105
162   c   99
163   a   97
164   t   116
165   i   105
166   o   111
167   n   110
168   /   47
169   j   106
170   s   115
171   o   111
172   n   110
173      13
174
10
175      13
176
10
177   1   49
178   7   55
179      13
180
10
181   {   123
182   "   34
183   k   107
184   "   34
185   :   58
186   "   34
187   v   118
188   h   104
189   g   103
190   Z   90
191   s   115
192   4   52
193   5   53
194   K   75
195   D   68
196   w   119
197   r   114
198   s   115
199   Z   90
200   S   83
201   B   66
202   "   34
203   }   125
204      13
205
10
206   0   48
207      13
208
10
209      13
210
10


I send all the bytes in the response buffer to the wifi response
Code: Select all   if (recvFind(">", 5000)) {
      rx_empty();
      for (uint32_t i = 0; i < len; i++) {
         m_puart->write((char)buffer[i]);
         Serial.write((char)buffer[i]);
      }

               //HERE NEED TO SEND ADITIONAL CHARACTERS To fill the 210, other way no SEND OK RESPONSE
               //m_puart->write(" ");
               //1 for each NewLine
               //1 aditional for each double NewLine
               //Client side is not receiving the double NewLine


      return recvFind("SEND OK", 10000);
   }


It looks like wifi is missing the 10 and 13 character and also having problems with 10131013 Double NewLine

Thank you

Best regards

Re: CIPSEND sending response from const uint8_t *buffer

PostPosted: Fri Apr 10, 2015 12:24 am
by ricg
it's difficult to diagnose this without more code and output. For instance it doesn't make sense that you need to send additional chars to fill the 210 defined by the cipsend cmd after executing a for loop that *supposedly* sent 210 chars. But then i can't see where len is getting set.
My only suggestion is to replace the for loop which sends each char individually with a single write.
ie.. m_puart->write(buffer,sizeof(buffer));
assuming buffer is declared as buffer[210]; that should send all 210 chars and you can then wait for the send ok to appear.
good luck.

Re: CIPSEND sending response from const uint8_t *buffer

PostPosted: Sun Apr 19, 2015 4:08 am
by xabier98
Hi

I tried what you say but same result.

I think I canĀ“t send CR in the http response with ESP8266 or two continuos LF, "LFLF"

I am using a windows app Hercules to debug the tcp server in my esp8266
This is my testing arduino code

m_puart->print("AT+CIPSEND=");
m_puart->print(mux_id);
m_puart->print(",");
m_puart->println(16);

For testing I am sendig this 2 lines in the response m_puart and Serial3 are the same thing

Serial3.print("HTTP\r\n\r\n");
Serial3.print("HTTP\r\n\r\n");

In the debug tool I get the following, I tried others but same result:

{48}{54}{54}{50}#LF{48}{54}{54}{50}#LF

No CR and only one LF for each LFLF

I also tried

Serial3.print("H");
Serial3.print("T");
Serial3.print("T");
Serial3.print("P");
Serial3.print("\r");
Serial3.print("\n");
Serial3.print("\r");
Serial3.print("\n");
Serial3.print("H");
Serial3.print("T");
Serial3.print("T");
Serial3.print("P");
Serial3.print("\r");
Serial3.print("\n");
Serial3.print("\r");
Serial3.print("\n");

And I got the same result, there is no way to send CR or two next LF

println dont solve the problem

Re: CIPSEND sending response from const uint8_t *buffer

PostPosted: Sun Apr 19, 2015 10:13 pm
by ricg
i'm not familiar with the hercules app, but perhaps it represents a crlf as a LF in it's output. You may want to try wireshark or windump.
Other things to consider:
1. i've heard SoftwareSerial can drop chars at high baud rates. if you're using 115200 you may want to try 9600. i've never had a problem at that rate.
2. try a separate source of power that can supply up to 300mA.

note: my experience shows that println send a combination crlf.