🛠 Envoyer et recevoir des SMS
Objetivos
Utilizar la clase GSM_SMS de la biblioteca MKRGSM para enviar un SMS de alerta a un número internacional y escuchar los SMS entrantes para controlar la tarjeta de forma remota (texto « LED ON » / « LED OFF »). El SMS sigue siendo el canal de respaldo ideal cuando GPRS está cortado: funciona incluso cuando los datos no están disponibles, siempre que exista cobertura 2G.
Material
- Tarjeta Arduino MKR GSM 1400 + antena U.FL desplegada
- Tarjeta micro-SIM con tarifa que incluya SMS, código PIN desactivado
- Batería LiPo ≥ 1500 mAh conectada
- Un teléfono para las pruebas de ida y vuelta
Código completo
#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 demarrage
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);
}
Verificación esperada
Al iniciar, el teléfono recibe « MKR GSM 1400 en línea. ». Enviar « LED ON » enciende el LED D6 y devuelve un acuse de recibo « Recibido: LED ON »; « LED OFF » lo apaga. endSMS se bloquea hasta el envío o el fallo: el primer envío después del registro puede tardar varios segundos.
Errores frecuentes
- Número en formato nacional (06...): utilizar el formato internacional « +33... ».
- Bandeja de SMS llena en la SIM: las lecturas
availablese bloquean o entran en bucle; vaciar la memoria de la SIM (a menudo 5 a 10 mensajes) o borrarlos desde un teléfono. - SMS largos (> 160 caracteres) o acentos: la codificación Unicode reduce la longitud útil; mantenerse en ASCII para los comandos.
- Número de origen vacío o incorrecto: según el operador, el número del remitente puede no estar presente — no confiar en él para autorizar un emisor sin verificarlo.
- Intento simultáneo de SMS + datos: el módulo está en modo conmutado de circuitos durante una llamada/SMS; diseñar prioridades claras entre SMS y GPRS.
- Pico de corriente durante la transmisión: una vez más, la batería LiPo es obligatoria para evitar reinicios silenciosos.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino