2017-01-07 6 views
0

問題はArduino(ATmega328p)が文字列の長さを制限することです。私は要求を生成する必要があります:(char配列)SIM900ライブラリに送信する。Arduino。長いchar配列/文字列を作成するには? HTTP要求を行う必要があります

"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); 

任意の提案を?

答えて

2

完全なGET文字列を作成して1つのステートメントで印刷する必要はありません。ただ、作品を印刷:

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の束を保存します。

通常、メモリおよび安定性の問題を避けるために、Stringクラスの代わりにchar配列を使用します。

関連する問題