Arduino module SIM800L problème avec les commndes AT Résolu

Bonjour,
j’utilise Arduino et le module SIM800L pour l’envoi et la réception de SMS et tout marchait très bien hier mais aujourd’hui, la commande AT me retourne: A⸮C⸮H⸮

J’utilise le code de test suivant:

#include <SoftwareSerial.h>

String Arsp, Grsp;
SoftwareSerial gsm(10, 11); // RX, TX

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);
  Serial.println("Testing GSM SIM800L");
  gsm.begin(4800);

}

void loop() {
  // put your main code here, to run repeatedly:

  if(gsm.available())
  {
    Grsp = gsm.readString();
    Serial.println(Grsp);
  }

  if(Serial.available())
  {
    Arsp = Serial.readString();
    gsm.println(Arsp);
  }

}

Merci de votre aide.

Bonjour

Mauvais contact sur Rx et/ou Tx ?

Est ce que vous pouvez détailler un peut?

oui, volontiers :

je me demande si depuis hier un mauvais contact ne serait pas apparu sur une des liaisons Tx ou Rx avec pour conséquence une mauvaise transmission de certains caractères et l'apparition de points d'interrogations à la place des caractères attendus. Un mauvais contact sur l'alimentation peut aussi perturber les signaux échangés entre Arduino et SIM800

Le plus drôle c’est que j’arrive à envoyer un SMS avec le code suivant:

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM800L
SoftwareSerial mySerial(10, 11); //SIM800L Tx & Rx is connected to Arduino #3 & #2

void setup()
{
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  
  //Begin serial communication with Arduino and SIM800L
  mySerial.begin(9600);

  Serial.println("Initialisation..."); 
  delay(1000);

  mySerial.println("AT"); //Once the handshake test is successful, it will back to OK
  updateSerial();

  mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CMGS=\"ZZxxxxxxxxxxx\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
  updateSerial();
  mySerial.print("Salam talla"); //text content
  updateSerial();
  mySerial.write(26);
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}

Je n’y comprend plus rien !

le SMS part , c'est donc que la liaison TX ARduino -> Rx SIM800L est bonne (le SIM800 a bien compris l'ordre)

le pb subsiste peut être dans la liaison TX SIM800 -> Rx Arduino et le Treminal Arduino n'aime pas certains caractères que le SIM800 lui envoie

commande AT me retourne: A⸮C⸮H⸮

En résumé : l'aller serait bon , pas le retour

Comment je peut résoudre ce problème ?

verifier de très près , d’un bout à l’autre , le fil qui relie le TX du SIM800L au RX Arduino

Si le montage est sur plaque d’essais débrancher puis rebrancher ce fil
Si la laiason est soudée bien regarder les soudures

virez les readString et remplacez votre code par cela (et passez la console Série à 115200 bauds, aucune raison d’aller lentement):

#include <SoftwareSerial.h>
SoftwareSerial gsm(10, 11); // RX, TX

void setup()
{
  Serial.begin(115200);
  Serial.println("Testing GSM SIM800L");
  gsm.begin(4800);
}

void loop()
{
  while (gsm.available()) {
    int c = gsm.read();
    if (c != -1) Serial.write((char) c);
  }

  while (Serial.available()) {
    int c = Serial.read();
    if (c != -1) gsm.write((char) c);
  }
}

histoire d’éviter tous les soucis de timeout et remplissage des buffers.

Merci beaucoup vous tous shannon j'ai fait comme tu as dit mais toujours le même problème, la commande AT donne: A⸮⸮

Problème résolu. J'ai réécrit la fonction setup comme suit:

void setup()
{
  Serial.begin(9600);
  Serial.println("Testing GSM SIM800L");
  gsm.begin(9600);
}

Cependant je ne comprend pas comment ça a pu résoudre le problème. Quelqu'un peut-il expliquer SVP?

visiblement le

gsm.begin(4800);

ne permettait pas un bon échange des données dans les deux sens.... Faire l'essai avec divers débits pour constater le résultat !!

Mais hier seulement ça marchait bien avec

gsm.begin(4800);

.

je ne m'appelle pas shannon :)

Votre GSM a du reprendre sa valeur par défaut de communication qui est 9600 bauds... vous aviez du la changer non ?

je ne m’appelle pas shannon :slight_smile: Désolé

En effet je l’avais fixer à 9600 bauds.
J’ai taper la commande AT+IPR=0 puis AT&W et ça à résolu le problème.
Merci pour tout J-M-L (sans faute).