HTTP Get mit SIM900

Hallo zusammen,

ich würde gerne mit dem SIM900 Shield Daten von einer Homepage abrufen. Die Daten werden
hinterher in meinem Arduino weiterverarbeitet. Es gibt zwar schon viele fertige Klassen, aber da treten immer unterschiedlichste Probleme auf. Aus diesem Grund würde ich es gerne über AT Befehle so kurz wie möglich halten und selbst machen.
Denn hinterher möchte ich auch verstehen was passiert und warum etwas funktioniert bzw. nicht funktioniert.

Kurz zum Aufbau. Ich habe ein Arduino Mega2560 Board und ein SIM900 Shield.

SIM900 Shield

  • Die Jumper stehen auf D7 (TX) und D8 (RX)
  • GND ist mit GND auf dem Arduino Board verbindung
  • RXD des SIM900 Shield ist mit PIN53 auf dem Arduino Shield verbunden
  • TXD des SIM900 Shield ist mit PIN52 auf dem Arduino Shield verbunden

Sowohl das SIM Shield als auch das Arduino Board verfügen über eine externe Stromversorgung.

Mein Code lautet aktuell wie folgt. Ganz einfach aufgebaut.

#include <SoftwareSerial.h>
SoftwareSerial myGsm(52,53);

void setup()
{
 myGsm.begin(9600);  
 Serial.begin(9600);  
 delay(500);

 Serial.println("AT+CGATT=1");
 myGsm.println("AT+CGATT=1");
 delay(200);
 printSerialData();

 Serial.println("AT+CSTT=\"internet\",\"internet.t-mobile\",\"tm\"");
 myGsm.println("AT+CSTT=\"internet\",\"internet.t-mobile\",\"tm\"");
 delay(1000);
 printSerialData();
 
 Serial.println("AT+SAPBR=1,1");
 myGsm.println("AT+SAPBR=1,1");
 delay(5000);
 printSerialData();
 
 Serial.println("AT+HTTPINIT");
 myGsm.println("AT+HTTPINIT");
 delay(5000);
 printSerialData();

 Serial.println("AT+HTTPPARA=\"CID\",1"); 
 myGsm.println("AT+HTTPPARA=\"CID\",1"); 
 delay(2000); 
 printSerialData();

 Serial.println("AT+HTTPPARA=\"URL\",\"http://api.thingspeak.com/apps/thinghttp/send_request?api_key=VV7WQ9DS19E2BNNI\"");
 myGsm.println("AT+HTTPPARA=\"URL\",\"http://api.thingspeak.com/apps/thinghttp/send_request?api_key=VV7WQ9DS19E2BNNI\""); 
 delay(1000);
 printSerialData();

 Serial.println("AT+HTTPACTION=0");
 myGsm.println();
 myGsm.println("AT+HTTPACTION=0");
 delay(8000);
 printSerialData();
 
 Serial.println("AT+HTTPREAD=0,20");
 myGsm.println("AT+HTTPREAD=0,20");
 delay(3000);
 printSerialData();
 
 myGsm.println("");
 delay(1000);
 Serial.println("AT+HTTPTERM");
 myGsm.println("AT+HTTPTERM");
 printSerialData();

void loop()
{
}


void printSerialData()
{
 while(myGsm.available()!=0)
 Serial.write(myGsm.read());
}

Wenn ich den Code nun ausführen kommt folgender Output.

11:06:18.918 -> AT+CGATT=1
11:06:19.148 -> AT+CGATT=1
11:06:19.148 -> 
11:06:19.148 -> OK
11:06:19.195 -> AT+CSTT="internet","internet.t-mobile","tm"
11:06:20.213 -> AT+CSTT="internet","internet.t-mobile","tm"
11:06:20.259 -> 
11:06:20.259 -> OK
11:06:20.259 -> AT+SAPBR=1,1
11:06:25.209 -> AT+SAPBR=1,1
11:06:25.209 -> 
11:06:25.209 -> ERROR
11:06:25.255 -> AT+HTTPINIT
11:06:30.244 -> AT+HTTPINIT
11:06:30.244 -> 
11:06:30.244 -> ERROR
11:06:30.244 -> AT+HTTPPARA="CID",1
11:06:32.238 -> AT+HTTPPARA="CID",1
11:06:32.285 -> 
11:06:32.285 -> ERROR
11:06:32.285 -> AT+HTTPPARA="URL","http://api.thingspeak.com/apps/thinghttp/send_request?api_key=VV7WQ9DS19E2BNNI"
11:06:33.442 -> AT+HTTPPARA="URL","http://api.thingspeak.com/apps/thinghttp/senAT+HTTPACTION=0
11:06:41.457 -> 
11:06:41.457 -> AT+HTTPACTION=0
11:06:41.457 -> 
11:06:41.457 -> ERROR
11:06:41.503 -> AT+HTTPREAD=0,20
11:06:44.461 -> AT+HTTPREAD=0,20
11:06:44.503 -> 
11:06:44.503 -> ERROR
11:06:45.472 -> AT+HTTPTERM
11:06:45.472 ->

Kann mir hier jemand helfen woran es liegt? Ich befürchte es sind nur Kleinigkeiten auf die ich einfach nicht komme.
Ich habe bereits lange gesucht, aber die finale Lösung für mein Problem habe ich leider noch nicht gefunden.

Vielen Dank und viele Grüße