GSM - envoyer un SMS

Bonjour à tous,

Je suis un peu perdu avec mon module GSM, je me tourne vers vous !
J'essaye d'envoyer un simple SMS mais rien ne se passe.

L'objectif final est de pouvoir utiliser une carte multi-opérateurs mais dans un premier temps j'utilise ma propre carte SIM pour simplifier. Mais mon programme ne fonctionne pas de toute façon. ;D

Le module que j'utilise est le GSM Click, même si on s'en fiche un peu étant donné qu'ils ont à peu près tous le même fonctionnement selon la puce qu'il abritent... La mienne est une SIM800H.

Le tout est monté sur une carte Flip&Click, la encore, ça n'a pas beaucoup d'importance, c'est un équivalant de l'Arduino DUE.

J'ai un retour sur le moniteur série qui me permet de voir ce qui ne va pas, c'est très pratique.
J'envoie les commandes suivantes (+ la réponse associée à la ligne suivante) :


AT+CPIN="ABCD" //Je rentre mon code Pin (ABCD étant mon code Pin...)
AT+CPIN="ABCD"
OK


AT+COPN //Je lis le nom des opérateurs, étrange qu'il n'y ai pas SFR ?
AT+COPN
+COPN: "20201","COSMOTE"
+COPN: "20205","vodafone"
+COPN: "20209","Q-TELECOM"

OK


AT+COPS? // Retourne l'opérateur actuel, bon ok ici on a SFR...
+COPS: 0,0,"SFR"

OK


AT+CSCS? // Retourne l'encodage (il me semble)
+CSCS: "IRA"

OK


AT+CMGF=1 // Pour être en mode texte
AT+CMGF=1
OK


AT+CMGS="+336xxxxxxxx"\r // Je lui donne mon numéro
AT+CMGS="+336xxxxxxxx"


Test sms from BLE2\n Click !" + (char)26 // Mon message
!


J'ai essayé en mode GSM plutôt que text, ça fonctionne encore moins, la commande CMGS retourne ERROR.
Je le laisse allumé 30 bonnes secondes avant d'envoyer les commandes.
J'ai cherché dans le guide des commandes AT, je ne vois pas ce qui cloche.
CMGS retourne "!" (la fin de mon message) et n'envoie pas le message :sob:
Je ne reçoit même pas "!".

Voici mon code :

      // Enter pin code
      delay(30000);
      commandStringGSM = "AT+CPIN=\"XXXX\"";
      Serial1.print(commandStringGSM + "\n");
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);


      // Read operator names
      delay(3000);
      commandStringGSM = "AT+COPN";
      Serial1.print(commandStringGSM + "\n");
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);

      
      // Return the currently selected operator
      delay(3000);
      commandStringGSM = "AT+COPS?";
      Serial1.print(commandStringGSM + "\n");
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);


      // Return the current character set (GSM, or IRA, or HEX etc)
      delay(3000);
      commandStringGSM = "AT+CSCS?";
      Serial1.print(commandStringGSM + "\n");
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);

      // Set text mode
      delay(3000);
      commandStringGSM = "AT+CMGF=1";
      Serial1.print(commandStringGSM + "\n");
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);


      // Phone number to send message
      delay(3000);
      commandStringGSM = "AT+CMGS=\"+336XXXXXXXX\"\r";
      Serial1.print(commandStringGSM);
      delay(1000);
      readFromGsm();
      delay(1000);
      Serial.print(inputStringGSM);


      // Message
      delay(1000);
      commandStringGSM = "Test sms from BLE2\n Click !" + (char)26;
      Serial1.print(commandStringGSM+'\n');
      delay(1000);
      readFromGsm();
      delay(1000);

      Serial.print(inputStringGSM);

//Et ma fonction Read qui est ailleurs mais qui fonctionne bien 
void readFromGsm(){

  incomingByteGSM = 0;
  inputStringGSM = "";
  delay(1000);
    while(Serial1.available() > 0){
      incomingByteGSM = Serial1.read();
      inputStringGSM += String(incomingByteGSM);
      delay(50);
    }
}

Quelqu'un à une idée ? Il y a quelque chose que je fais mal ? Ou d'autres tests que je pourrais faire ?
Je précise que ma carte SIM fonctionne quand j'envoie un sms avec mon téléphone.

Merci !