Problème SRAM - GPRS Shield 2 + SD Shield

Bonjour,

Je dispose d’une SD Shield v4 ( http://www.seeedstudio.com/wiki/SD_Card_shield_V4.0 ) ainsi que d’une GPRS Shield v2 ( http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0 ), le tout sur mon arduino Uno R3.

Mon problème est que je n’arrive pas a réaliser mon programme sans excéder dans la SRAM du fait que:
-La GPRS Shield v2 avec sa lib officielle ( https://github.com/Seeed-Studio/GPRS_Shield_Suli ) consomme 1,5ko de SRAM.
-La SD Shield 4 avec la lib officielle Arduino SD consomme plus de 500octets.

Mon objectif est juste d’envoyer un fichier stocké sur la SD sur un serveur HTTP via la shield GPRS.

Je me suis donc penché sur l’utilisation de la librairie officielle GSM de Arduino qui consomme 1ko au lieu de 1,5ko et qui donc pourrais me permettre d’utiliser mon programme dans la limite des 2ko de SRAM, mais ne suis pas parvenu à la faire fonctionner avec ma Shield:

-J’ai remplacé la valeur de définition des Pins dans le fichier GSM3SoftSerial.cpp de la lib GSM en y mettant les pins de ma Shield (7 et 8 au lieu de 2 et 3):

#if defined(__AVR_ATmega328P__) 
#define __TXPIN__ 8
#define __RXPIN__ 7
#define __RXINT__ 3 //Cette ligne n'est pas utilisée il me semble

Mais cela n’a pas fonctionné, le programme se bloque dans la fonction setup au niveau de l’initialisation du GSM et GPRS, comme vous le verrez dans le code ci-dessous (j’ai mis un commentaire).

Je viens donc vers vous afin de recueillir vos idées concernant ces points:

-Puis-je faire fonctionner la librairie GSM officielle avec ma GPRS Shield V2 ?
-Autrement, est-il possible d’optimiser la lib GPRS de seeedstudio (diminution de la taille des buffers?) ?
-D’autre idées (mis à part le remplacement de ma Uno par une Mega :p) ?

Je vous remercie par avance !

Voici le code d’essai que j’ai fais pour l’utilisation de la librairie officielle GSM de Arduino:

#include <GSM.h>

// PIN Number
#define PINNUMBER ""

// APN data
#define GPRS_APN       "m2mdata" // replace your GPRS APN
#define GPRS_LOGIN     ""    // replace with your GPRS login
#define GPRS_PASSWORD  "" // replace with your GPRS password


// initialize the library instance
GPRS gprs;
GSM gsmAccess;     // include a 'true' parameter for debug enabled
GSMServer server(80); // port 80 (http default)

// timeout
const unsigned long __TIMEOUT__ = 10*1000;

void setup()
{
  // initialize serial communications
  Serial.begin(9600);

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    Serial.println(freeRam());
    if((gsmAccess.begin()==GSM_READY) &
        (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY)) //ON NE FRANCHI JAMAIS CETTE ETAPE
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("Connected to GPRS network");

  // start server
  server.begin();

  //Get IP.
  IPAddress LocalIP = gprs.getIPAddress();
  Serial.println("Server IP address=");
  Serial.println(LocalIP);
}

void loop() {


  // listen for incoming clients
  GSM3MobileClientService client = server.available();



  if (client)
  {  
    while (client.connected())
    {
      if (client.available())
      {
        Serial.println("Receiving request!");
        bool sendResponse = false;
        while(char c=client.read()) {
          if (c == '\n') sendResponse = true;
        }

     // if you've gotten to the end of the line (received a newline
     // character)
       if (sendResponse)
       {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(analogRead(analogChannel));
            client.println("
");      
          }
          client.println("</html>");
          //necessary delay
          delay(1000);
          client.stop();
        }
      }
    }
  }
}

int freeRam () 
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Bonjour

Je suis dans la même configuration que toi, as tu avancé sur ton probléme ? De mon coté je n'utilise pas la librairie officiel GPRS mais directement des AT command, ce qui m'allége beaucoup ! Cependant j'ai du mal a mettre en place toutes les fonctions notamment acces FTP ...