appels.ino

Arduino MKR GSM 1400 · Fichier : appels.ino · Langage : Arduino · Usage : Recevoir un appel et déclencher une action

Le modem GSM comme télécommande : un appel depuis un numéro autorisé bascule l'état d'alarme de la carte MKR GSM 1400, qui répond puis raccroche aussitôt. La LED 6 clignote tant que l'alarme est active, sans consommer d'data SMS.

Matériel requis

Une Arduino MKR GSM 1400 (microcontrôleur SAMD21, modem cellulaire 2G/GPRS, antenne externe, alimentation par batterie LiPo sur le connecteur J6 ou par USB). Carte SIM avec numéro actif, antenne 2G, une LED avec résistance 330 Ω sur la broche 6.

Câblage

LED (+) via résistance 330 Ω vers la broche 6, cathode vers GND ; rien d'autre à câbler.

Fonctionnement

call.onRinging() enregistre une fonction rappelée sur signal d'appel. returnCaller() lit le numéro de l'appelant ; s'il correspond à la liste, pickUp/hangUp raccrochent proprement et un booléen d'état bascule.

Exécution

Dans l'IDE Arduino, installez le package Arduino SAMD Boards, sélectionnez la carte MKR GSM 1400, puis téléversez. Les exemples réseau supposent une carte SIM data active insérée, broche antenne vissée, et un réseau 2G encore couvert dans votre région.

Variantes

Gérez plusieurs numéros dans un tableau, envoyez un SMS de confirmation après bascule, ou utilisez DTMF pendant l'appel pour choisir parmi plusieurs commandes.

appels.ino

// Appel entrant = declencheur : la LED 6 clignote si numero connu.
#include <MKRGSM.h>

const char PIN_SIM[] = "0000";
const char NUMERO_AUTORISE[] = "+33612345678";

GSM gsm;
GSMCall call;

const int LED = 6;
bool alarme = false;

void setup() {
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  if (gsm.begin(PIN_SIM) != GSM_READY) while (true);
  call.begin();
  call.onRinging(appelEntrant);
  Serial.println(F("En attente d'appel..."));
}

void loop() {
  unsigned long t = millis();
  if (alarme && (t / 500) % 2 == 0) digitalWrite(LED, HIGH);
  else digitalWrite(LED, LOW);
}

void appelEntrant() {
  String emetteur = call.returnCaller();
  Serial.println("Appel de : " + emetteur);
  if (emetteur == NUMERO_AUTORISE) {
    alarme = !alarme; // bascule l'etat a chaque appel du numero autorise
    Serial.println(alarme ? F("ALARME ACTIVEE") : F("ALARME COUPEE"));
    call.pickUp();
    delay(500);
    call.hangUp();
  } else {
    Serial.println(F("Numero inconnu, ignore"));
    call.hangUp();
  }
}

← Retour à la fiche