Envoie sms via un fichier .txt sur un serveur

Bonjour tout le monde!!!

J’ai besoin de votre aide :blush: … Je voudrai récupérer un fichier .txt qui se trouve sur un serveur pour ensuite envoyer le contenu par sms.
Ma plate forme se compose:

  • Arduino Uno
  • GPRS Shield v1.2
  • Music Shield v2.0

J’ai trouvé un code qui récupère bien le fichier .txt sur le serveur.

 #include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 8);

void setup()
{
  gprsSerial.begin(19200);
  Serial.begin(19200);
  //fonction SIM900power
  SIM900power();
  Serial.println("Config SIM900...");
  //delai de 30s secondes
  delay(30000);
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();

  // attach or detach from GPRS service 
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();


  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"wapsfr\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
}

void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   //lien vers le fichier txt
   gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://........./text.txt\"");
   delay(2000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(1000);
   toSerial();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

//focntion pour allumer la carte gsm
void SIM900power()
{
  
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

Et j’ai modifié un code pour récupérer un fichier .txt qui se trouve dans ma carte sd puis qu’il l’envoie par sms

#include <SoftwareSerial.h>
#include <SD.h>
SoftwareSerial SIM900(7, 8);
const int chipSelect = 10;
File dataFile;
char messageRead[300];


void setup()
{
  Serial.begin(19200);
  Serial.print("Initialisation serie");
  SIM900.begin(19200);
  SIM900power();  
  delay(30000);  // give time to log on to network. 
  
  Serial.print("Initialisation de la SD card");

  pinMode(10, OUTPUT);
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Echec initialisation ou carte inexistant");
    // don't do anything more:
    return;
  }
  Serial.println("Initialisation reussie !");
  
  //Ouvre le fichier
  dataFile = SD.open("text.txt");
  int mi = 0;
  // Si le fichier est invalide
  if (dataFile) {
    while (dataFile.available()) {
      
      messageRead[mi++] += ((char)dataFile.read());
      Serial.write(messageRead[mi-1]);
      messageRead[mi] += (char)'\0';
      
    }
    
    //dataFile.close();
  }  
  
  else {
    Serial.println("Erreur d'ouverture");
  } 
}

void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
  
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
}

void sendSMS()
{
  SIM900.print("AT+CMGF=1\r");
  delay(100);
  SIM900.println("AT + CMGS = \"+33######\""); 
  delay(100);
  
  Serial.println("sending sms ");
  Serial.println(messageRead);
  SIM900.println(messageRead);
  delay(100);
  SIM900.println((char)26);
  delay(100); 
  SIM900.println();
  delay(5000);
  
  Serial.println("sent sms ");
  SIM900power();
}

void loop()
{
  sendSMS();
  do {} while (1);
}

Voila, je n’arrive pas à fusionner c’est deux codes (récupérer le fichier sur le serveur, l’enregistrer sur la carte sd puis l’envoyer en sms) …
Merci de votre aide!

Vas-y ! go !!! fusionne et on t'aidera à pointer ce qui ne va pas

As-tu besoin d'écrire le fichier ? Je pensais qu'il suffit de le lire de la carte SD et puis de l'envoyer par SMS (chacune des deux parties).

Pour lire et écrire sur une carte SD: http://arduino.cc/en/Tutorial/ReadWrite

Il faut ouvrir le fichier en mode write, puis utiliser print() ou println() pour y écrire.

Grâce au premiere code, il arrive à lire ce fichier, mais je ne vois dans le code où il le lit pour que je puisse lui dire File theFile; theFile = SD.open("fichier.txt", FILE_WRITE);..

FILE_WRITE, c'est pour écrire. Si on ne mentionne pas le mode, c'est FILE_READ par défaut.

Regarde les lignes après "// re-open the file for reading:"

Je suis d'accord avec toi et je comprends le fonctionnement mais je ne vois pas où mettre ces instructions dans mon code...

Mets-les dans le bon ordre ; c'est comme un puzzle, prends des morceaux de l'un et de l'autre, et imbrique-les, de telle façon à ce que le code résultant te semble logique à la lecture.

Voila j’ai essayé d’enregistrer sur la carte SD mais ca ne marche pas

#include <SoftwareSerial.h>
#include <SD.h>

File myFile;
const int chipSelect = 10;
SoftwareSerial gprsSerial(7, 8);

void setup()
{
  gprsSerial.begin(19200);
  Serial.begin(19200);
  //fonction SIM900power
  SIM900power();
  Serial.println("Config SIM900 en cours");
  
  //delai de 20s secondes
  delay(20000);
  
  pinMode(10, OUTPUT);
  
   if (!SD.begin(chipSelect)) {
    Serial.println("Echec initialisation ou carte inexistant");
    // don't do anything more:
    return;
  }
  Serial.println("Initialisation SD reussie !");
  
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();
  
  //Création du fichier
  myFile = SD.open("test.txt", FILE_WRITE);

  // attach or detach from GPRS service 
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();


  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"wapsfr\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
}


////////////////LOOP/////////////////////
void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000); 
   toSerial();

   //lien vers le fichier txt
   gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://forefire.univ-corse.fr/repondeur.txt\"");
   delay(2000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD"); 
   delay(1000);
   toSerial2();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

//focntion pour allumer la carte gsm
void SIM900power()
{
  
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

void toSerial2()
{
  while(gprsSerial.available())
  {
    Serial.write(myFile.read());
  }
}

Je ne vois nulle part sd.print()