🛠 Envoyer et recevoir des SMS
Objectifs
Utiliser la classe GSM_SMS de la bibliothèque MKRGSM pour envoyer un SMS d'alerte vers un numéro international et écouter les SMS entrants pour commander la carte à distance (texte « LED ON » / « LED OFF »). Le SMS reste le canal de secours idéal quand GPRS est coupé : il fonctionne même quand les données sont indisponibles, tant que la 2G existe.
Matériel
- Carte Arduino MKR GSM 1400 + antenne U.FL déployée
- Carte micro-SIM avec forfait incluant des SMS, code PIN désactivé
- Batterie LiPo ≥ 1500 mAh branchée
- Un téléphone pour les tests aller-retour
Code complet
#include <MKRGSM.h>
#include "arduino_secrets.h"
const char PINNUMBER[] = SECRET_PINNUMBER;
const char NUMERO_DEST[] = "+33612345678"; // format international
GSM gsmAccess;
GSM_SMS sms;
void setup {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
while (!Serial) {}
while (gsmAccess.begin(PINNUMBER) != GSM_READY) delay(1000);
Serial.println("GSM pret, ecoute SMS...");
// SMS de démarrage
sms.beginSMS(NUMERO_DEST);
sms.print("MKR GSM 1400 en ligne.");
sms.endSMS;
}
void loop {
if (sms.available) {
String msg;
char c;
while ((c = sms.read) != -1) msg += c;
msg.trim;
Serial.println(msg);
if (msg.equalsIgnoreCase("LED ON")) digitalWrite(LED_BUILTIN, HIGH);
if (msg.equalsIgnoreCase("LED OFF")) digitalWrite(LED_BUILTIN, LOW);
sms.beginSMS(sms.remoteNumber); // accuse de reception
sms.print("Recu : " + msg);
sms.endSMS;
}
delay(1000);
}
Vérification attendue
Au démarrage, le téléphone reçoit « MKR GSM 1400 en ligne. ». Envoyer « LED ON » allume la LED D6 et renvoie un accusé « Recu : LED ON » ; « LED OFF » éteint. endSMS bloque jusqu'à l'envoi ou l'échec : le premier envoi après enregistrement peut prendre plusieurs secondes.
Erreurs fréquentes
- Numéro au format national (06...) : utiliser le format international « +33... ».
- Boîte SMS pleine sur la SIM : les lectures
availablebloquent ou tournent en boucle ; vider la mémoire SIM (souvent 5 à 10 messages) ou effacer depuis un téléphone. - SMS longs (> 160 caractères) ou accents : l'encodage Unicode réduit la longueur utile ; rester en ASCII pour les commandes.
- Numéro d'expédition vide ou faux : selon l'opérateur, le numéro de l'expéditeur peut être absent — ne pas s'y fier pour autoriser un émetteur sans le vérifier.
- Tentative simultanée SMS + data : le module est en mode circuit commuté pendant un appel/SMS ; concevoir des priorités claires entre SMS et GPRS.
- Pic de courant à l'émission : encore une fois, LiPo obligatoire sous peine de redémarrage silencieux.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino