Probleme mit einem httpget auf eine Tralog shield (WISMO228 GSM Modem)

Moin,

habe hier 2 Tralog shields das erste bekam ich etwa 01.13, das 2. kam 04.13.

Nun habe ich jedoch mit dem 2. Shield ein Problem.
Ich habe 2 unterschiedliche sketche geschreiben, die mittel httpget etwas an php uebermitteln was mit php in eine MYSQL Datenbank geschrieben wird.
Mit dem 1. Shield funktionieren beide sketche, mit dem 2. (dem neueren) bekomme ich den httpget nicht hin.
Die rueckmeldung von httpget sind nur einige wirre zeichen und in die Datenbank wird nichts eingtragen.

Da mit dem 1. Shiel alles so tut wie es soll vermute ich das der Fehler irgendwo bei dem WiSMO GSM-Modem liegt.

Hat von euch jemand mit diesem Erfahrungen und kann mir sagen ob (und wenn ja, wie) ich die Firmwareversion auslesen kann?

Poste doch mal den Sketch, der Probleme macht, vielleicht finden wir ja auch da drin etwas, das nur per Zufall auf dem einen Board funktioniert.

Habe den Sketch angehaengt.
Wuerde mich freuen, wenn ich das ganze zum laufen bekomme.

GPS_Log_web_forum.ino (11.1 KB)

Ich rate mal: der andere Sketch hat kein GPS anzusteueren? Sowohl beim GSM shield als auch beim GPS kommen SoftwareSerial-Instanzen zum Einsatz. Von denen kann aber jeweils nur eine aktiv sein (d.h. Daten empfangen). Du hast das wahrscheinlich versucht zu implementieren, indem Du jeweils auf der GPS-Instanz die end()-Methode aufrufst. Das Problem: dabei wird die andere Instanz nicht automatisch aktiviert. Nach jedem deaktivieren der GPS-Instanz müsstest Du die listen()-Methode auf der GSM-Instanz aufrufen. Da die entsprechende SoftwareSerial-Instanz als privat markiert ist, musst Du wahrscheinlich die Bibliothek anpassen. Alternativ könntest Du das GPS über die serielle Schnittstelle (Hardware) laufen lassen und für's Debugging eine SoftwareSerial-Instanz verwenden (nur Ausgabe, macht also nichts, wenn dort nicht empfangen werden kann).

Dass dieser Sketch mit einem anderen Modul funktionieren soll, erstaunt mich etwas. Eigentlich sollte dieses Problem generell vorhanden sein. Verwendest Du für beide Shields den gleichen Arduino?

Ja, habe fuer beides denselben Arduino uno verwendet.

Hatte mich gerade mit Rocket Scream kurzgeschlossen und von denen den Befehl zum abfragen der Firmware Version bekommen (AT+FMR).
Die beiden Shields haben die selbe Firmware.

Werde es nochmal mit schliessen der Softserial versuchen und mich dann wieder melden.

Werde es nochmal mit schliessen der Softserial versuchen und mich dann wieder melden.

Zumindest mit dem Code der aktuellen IDE wird das nichts bringen, da der listen()-Aufruf bei der anderen Instanz beim Aufruf der end()-Methode nicht durchgeführt wird.

Ist das GPS auch als Shield ausgeführt? Wenn nicht, wenn Du also frei bist, wo Du das anschliessen willst, könntest Du auch die AltSoftSerial-Bibliothek (AltSoftSerial Library, for an extra serial port) verwenden, womit dann nur noch eine SoftwareSerial-Instanz übrig bleibt.

Hi,

habe das Problem geloest.
Weiss leider noch nicht genau, warum es nun funktioniert, mit dem geanderten "Unterprogramm" funktioniert es.

Der geaenderte Code:

/void Daten_senden()
{
  if (wismo.powerUp())
  {

      Serial.println(F("GSM-Modem starten."));

  // Variable fuer die Nachricht
  char message[170];
  // Variable fuer die Empfangene Rueckmeldung
  char result[50];
  // Variablen im Format CHAR deklarieren
  char char_lon[10];
  char char_lat[10];
  char char_kurs[6];
  char char_hoehe[7];
  char char_km_h[6];
  char char_rssi[4];
  char char_grund[4];
  

  // PHP Nachricht vorbereiten
  
  // FLOAT Variablen in CHAR wandeln
  dtostrf(lon, 4, 5, char_lon);        // Longitude von float in char wandeln
  dtostrf(lat, 4, 5, char_lat);        // Latitude von float in char wandeln
  dtostrf(gps_kurs, 3, 2, char_kurs);  // Kurs von float in char wandeln
  dtostrf(gps_hoehe, 4, 3, char_hoehe);// Hoehe von float in char wandeln
  dtostrf(km_h, 3, 2, char_km_h);      // Geschwindigkeit von float in char wandeln
  dtostrf(rssi, 3, 1, char_rssi);      // GSM RSSI von float in char wandeln
  dtostrf(grund, 4, 1, char_grund);    // Grund von float in char wandeln
  
  // Message "zusammenbauen"
  strcpy(message, path);        // Nachricht mit GET + Pfad beginnen
  strcat(message, "?datum=");   // ?datum= zur uebergabe des Sendedatum
  strcat(message, datum);       // datum (char) dem String anhaengen
  strcat(message, "&time=");    // ?time= zur uebergabe der Sendezeit
  strcat(message, zeit);        // Uhrzeit (char) dem String anhaengen
  strcat(message, "&lon=");     // ?lon= zur uebergabe Longitude
  strcat(message, char_lon);    // Longitude (char) dem String anhaengen
  strcat(message, "&lat=");     // ?lat= zur uebergabe Latitude
  strcat(message, char_lat);    // Latitude (char) dem String anhaengen
  strcat(message, "&kurs=");    // ?kurs= zur uebergabe des GPS kurses
  strcat(message, char_kurs);   // Kurs (char) dem String anhaengen
  strcat(message, "&hoehe=");   // ?hoehe= zur uebergabe der Hoehe
  strcat(message, char_hoehe);  // Hoehe (char) dem String anhaengen
  strcat(message, "&speed=");   // ?speed= zur uebergabe der Geschwindigkeit (in km/h)
  strcat(message, char_km_h);   // Geschwindigkeit (char) dem String anhaengen
  strcat(message, "&rssi=");    // ?rssi= zur uebergabe des Empfangssignals
  strcat(message, char_rssi);   // RSSI (char) dem String anhaengen
  strcat(message, "&grund=");   // ?grund= zur uebergabe des Grundes (weswegen wird geloggt)
  strcat(message, char_grund);  // Grund (char) dem String anhaengen
  strcat(message, "&key=");     // "?key=" dem String anhaegen
  strcat(message, key);         // key dem String anhaengen
  //
 Serial.println(message);

    
    // Connect to GPRS network
    if (wismo.openGPRS(apn, username, password))
    {

        Serial.println(F("GPRS OK."));
        Serial.println(F("Daten an Datenbank senden."));      
      
      // Send current coordinate as Cosm feed through HTTP PUT request
      if (wismo.getHttp(server,message,port,result,50))			
      {
          Serial.println(F("Daten gesendet"));
          Serial.println(result);  
      }
      else
      {
          Serial.println(F("Daten wurden nicht gesendet."));
      }

      // Close the GPRS connection
      if (wismo.closeGPRS())
      {
          Serial.println(F("GPRS Verbindung geschlossen."));
      }
    }
    else
    {
        Serial.println(F("GPRS-Verbindung nicht aufgebaut."));
    }
  }
  wismo.shutdown();
}