Bonjour à tous,
J'aurais besoin de vos conseils :
Je recherche à envoyer via le module GSM (SIM7600CE) un email avec un fichier .txt en pièce jointe.
Ce fichier texte se trouve sur une carte SD.
Ainsi j'essaye de trouver le moyen de dire à arduino uno :
- envoie les commandes AT au module GSM pour préparer le mail (connection au serveur/destinataire/emetteur/corps de l'email...)
- va chercher le fichier qui se trouve dans la carte SD via le port serial
- attache le fichier texte au mail puis envoie le mail.
Mon problème aujourd'hui :
- je parviens à envoyer un email classique avec un texte, mais SANS pièce jointe (grâce aux commandes "SMTP")
- je parviens à ouvrir le fichier texte dans la carte SD et lire son contenu.
Mais je ne parviens pas maintenant à dire au module GSM que je souhaite joindre au mail le fichier texte sur la carte SD.
Auriez-vous vous des conseils pour m'aiguiller sur la méthode à suivre?
Je vous joins le code commenté. Le module GSM me renvoie OK après chaque instruction AT reçu. Il y a juste pour l'avant-dernière instruction AT+SMTPFILE=1,"test.txt" pour laquelle le module GSM me renvoie "ERROR".
Je vous remercie pour votre aide et me tiens à disposition.
Martin
#include <SD.h>
const unsigned int delayGSMstep = 1000; //délai en ms pour laisser le temps au shield de se connecter du réseau
const unsigned int delayGSMenvoi = 10000; //délai en ms pour laisser le temps au shield de se connecter du réseau
String loginserveursmtp = "\"login\""; //login serveur smpt (site : sendinblue.com)
String passwordserveursmtp = "\"motdepasse\""; //password serveur smpt
String serveursmtp = "\"smtp-relay.sendinblue.com\""; //adresse serveur smpt
int portserveursmtp = 587; //port smtp à utiliser
String emailemetteur = "\"adresse\"";
String emaildestinataire = "\"adresse\"";
String objet = "\"GSMshield\""; //objet message
String bodyemail = "\"voir PJ\"";
int x = 0;
void setup()
{
Serial.begin(115200); //Initialize Arduino default serial port
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
if (!SD.begin(10)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
}
void loop() {
x = 0;
if (x == 0) { //pour executer une seule fois la boucle
Serial.begin(115200); //faire en sorte que le module GSM et le moniteur soit avec le meme baudrate
Serial.print("AT+IPREX=115200");
Serial.print(F("\r")); //ecrire cela à la fin de l'instruction
delay(delayGSMstep);
Serial.println();
retourserial(); //voir le retour du module GSM
Serial.print(F("AT+CFUN?")); //statut du module GSM
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CPIN?")); //statut de la carte SIM du module GSM
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+COPS?")); //pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CGATT?")); //pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CREG?")); //pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CGDCONT=1,\"IP\",\"sl2sfr\"")); //pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CGACT=1,1"));//pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CGPADDR=1")); //pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+CGREG?"));//pas sûr que cela soit utile
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPSRV=")); //adresse du serveur smtp non SSL
Serial.print(serveursmtp);
Serial.print(F(","));
Serial.print(portserveursmtp);
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPAUTH=1,")); //info pour autoriser la connection au serveur smtp
Serial.print(loginserveursmtp);
Serial.print(F(","));
Serial.print(passwordserveursmtp);
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPFROM=")); //info emetteur
Serial.print(emailemetteur);
Serial.print(F(","));
Serial.print(emailemetteur);
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPRCPT=0,0,")); //info destinataire
Serial.print(emaildestinataire);
Serial.print(F(","));
Serial.print("\"martin\"");
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPSUB=")); //objet du mail
Serial.print(objet);
Serial.print(F("\r"));
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPBODY=")); //corps du mail
Serial.print(bodyemail);
Serial.print(F("\r"));
Serial.println();
delay(delayGSMstep);
retourserial();
Serial.print(F("AT+SMTPFILE=1,\"test.txt\"")); //le module GSM retourne le statut "ERROR" pour cette instruction.
Serial.print("\r");
delay(delayGSMstep);
Serial.println();
retourserial();
Serial.print(F("AT+SMTPSEND")); //pour envoyer le mail
Serial.print("\r");
delay(delayGSMstep);
Serial.println();
retourserial();
}
x = 1;
}
void retourserial() {
while (Serial.available() > 0) {
//Serial.read();
Serial.write(Serial.read());//if Serial received data, output it via mySerial.
Serial.println();
}
}