Arduino的。如何创建长char数组/字符串?需要发出http请求

时间:2017-01-07 20:36:56

标签: arduino arduino-uno atmega arduino-ide

问题是Arduino(ATmega328p)限制了字符串长度。我需要生成请求:(char数组)发送到SIM900库。

"GET /send.php?gpsCoords="+urlencode(gpsCoords)+"&humidity="+urlencode(humidity)+"&temperature2="+urlencode(temperature2)+"&pressure="+urlencode(pressure)+"&altitude="+urlencode(altitude)+"&temperatureGround="+urlencode(temperatureGround)+"&temperature="+urlencode(temperature)+" HTTP/1.0\r\nHost: mysite.org\r\n\r\n";

所以我创建了一个包含该数据的字符串,它变得空,因为它太长了:

String http_cmd_str = "GET /send.php?gpsCoords="+urlencode(gpsCoords)+"&humidity="+urlencode(humidity)+"&temperature2="+urlencode(temperature2)+"&pressure="+urlencode(pressure)+"&altitude="+urlencode(altitude)+"&temperatureGround="+urlencode(temperatureGround)+"&temperature="+urlencode(temperature)+" HTTP/1.0\r\nHost: dangerd.org\r\n\r\n";
Serial.println(http_cmd_str); // RETURNS EMPTY!!!
int str_len = http_cmd_str.length() + 1; 
char http_cmd[str_len];
http_cmd_str.toCharArray(http_cmd, str_len);

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您不需要构建完整的GET字符串,然后使用一个语句打印它。只需打印件:

Serial.print( F("GET /send.php?gpsCoords=") );
Serial.print( urlencode(gpsCoords) );
Serial.print( "&humidity=" );
  ...
Serial.print( F(" HTTP/1.0\r\nHost: dangerd.org\r\n\r\n") );

F 宏也会保存一堆RAM。

通常,使用char数组而不是String类来避免内存和稳定性问题。