Demander des données de capteur via SMS en utilisant Arduino

Demander des données de capteur via SMS en utilisant Arduino

Dans ce projet, nous allons vous montrer comment demander des données de capteur via SMS avec l’Arduino. A titre d’exemple, nous allons demander la température et l’humidité d’un capteur DHT11. Pour envoyer et recevoir des SMS avec l’Arduino, nous allons utiliser le shield GSM SIM900.

Demander des donnees de capteur via SMS en utilisant Arduino

Lorsque vous envoyez un SMS à l’Arduino avec le message « STATE », il répond avec les dernières lectures de température et d’humidité.

Avant de poursuivre ce didacticiel, nous vous recommandons les ressources suivantes :

Tout d’abord, regardez la vidéo de démonstration

YouTube video

Bouclier GSM SIM900

Il existe plusieurs modules que vous pouvez utiliser pour envoyer et recevoir des SMS avec l’Arduino. Nous avons réalisé ce projet en utilisant le shield GSM SIM900 et c’est le shield que nous vous recommandons d’obtenir.

Le blindage SIM900 GSM est illustré dans la figure ci-dessous :

1641832567 159 Demander des donnees de capteur via SMS en utilisant Arduino

Pour une introduction au bouclier GSM et comment le configurer, lisez le Guide du bouclier SIM900 GSM GPRS avec Arduino.

Pièces requises

Voici une liste de tous les composants nécessaires à ce projet :

1641832567 265 Demander des donnees de capteur via SMS en utilisant Arduino

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Demander des donnees de capteur via SMS en utilisant Arduino

Étapes préliminaires

Avant de commencer avec votre module GSM SIM900, vous devez considérer certains aspects concernant la carte SIM et l’alimentation du shield.

Carte SIM prépayée

Nous vous recommandons d’utiliser un forfait prépayé ou un forfait avec SMS illimités à des fins de test. Sinon, si quelque chose ne va pas, vous devrez peut-être payer une facture énorme pour des centaines de messages texte SMS envoyés par erreur. Dans ce tutoriel, nous utilisons un forfait prépayé avec SMS illimités.

1641832567 574 Demander des donnees de capteur via SMS en utilisant Arduino

Le bouclier utilise la taille de la carte SIM d’origine, pas micro ou nano. Si vous avez un micro ou un nano, vous pouvez envisager d’obtenir un Adaptateur de taille de carte SIM.

Désactiver le verrouillage PIN

Pour utiliser la carte SIM avec le bouclier, vous devez désactiver le verrouillage des broches. Le moyen le plus simple de le faire est d’insérer la carte SIM dans votre smartphone et de désactiver le verrouillage des broches dans les paramètres de sécurité du téléphone.

Dans mon cas, je dois passer par : Réglages > Réglages avancés > Sécurité > Verrouillage SIM et éteignez la carte sim de verrouillage avec la broche.

1641832567 229 Demander des donnees de capteur via SMS en utilisant Arduino

Obtenir la bonne alimentation

Le blindage est doté d’une prise CC pour l’alimentation, comme illustré dans la figure ci-dessous.

1641832567 566 Demander des donnees de capteur via SMS en utilisant Arduino

À côté de la prise d’alimentation, il y a un interrupteur à bascule pour sélectionner la source d’alimentation. À côté de l’interrupteur à bascule sur la carte, il y a une flèche indiquant la position à bascule pour utiliser une alimentation externe – déplacez l’interrupteur à bascule pour utiliser l’alimentation externe comme indiqué ci-dessus.

Pour alimenter le shield, il est conseillé d’utiliser une alimentation 5V pouvant fournir 2A comme celle illustrée ci-dessous.

1641832567 57 Demander des donnees de capteur via SMS en utilisant Arduino

Vous pouvez trouver le bon adaptateur d’alimentation pour ce bouclier ici. Assurez-vous de sélectionner le modèle avec 5V et 2A.

Configuration du bouclier GSM SIM900

Les étapes suivantes vous montrent comment configurer le bouclier SIM900 GSM.

1) Insérez la carte SIM dans le support de carte SIM. Vous avez besoin d’une carte SIM de taille standard. Le shield n’est pas compatible avec les cartes micro ou nano SIM. Si vous en avez besoin, vous pouvez obtenir un adaptateur de taille de carte SIM. Aussi, il est conseillé d’utiliser une carte SIM avec un forfait prépayé ou des SMS illimités.

1641832567 243 Demander des donnees de capteur via SMS en utilisant Arduino

2) Vérifiez que l’antenne est bien connectée.

3) Sur la sélection du port série, assurez-vous que le capuchon du cavalier est connecté comme indiqué dans la figure ci-dessous pour utiliser la série logicielle.

1641832567 788 Demander des donnees de capteur via SMS en utilisant Arduino

4) Alimentez le blindage à l’aide d’une alimentation externe 5V. Vérifiez que vous avez sélectionné la source d’alimentation externe comme nous l’avons mentionné précédemment.

1641832567 163 Demander des donnees de capteur via SMS en utilisant Arduino

5) Pour allumer/éteindre le bouclier, appuyez sur la touche d’alimentation pendant environ 2 secondes.

1641832567 453 Demander des donnees de capteur via SMS en utilisant Arduino

6) Ensuite, la LED d’état s’allumera et la LED NetLight clignotera toutes les 800 ms jusqu’à ce qu’elle trouve le réseau. Lorsqu’il trouve le réseau, la LED NetLight commence à clignoter toutes les trois secondes.

1641832567 469 Demander des donnees de capteur via SMS en utilisant Arduino

sept) Vous pouvez tester si le bouclier fonctionne correctement en envoyant des commandes AT depuis l’IDE Arduino à l’aide d’un programmeur FTDI – comme nous le montrerons ci-dessous.

Test du Shield avec le programmeur FTDI

Vous n’avez pas besoin de suivre cette étape pour que le bouclier fonctionne correctement. Il s’agit d’une étape supplémentaire pour vous assurer que vous pouvez communiquer avec votre blindage GSM et envoyer des commandes AT à partir du moniteur série Arduino IDE. Pour cela, vous avez besoin d’un programmeur FTDI comme celui illustré dans la figure ci-dessous.

1641832567 602 Demander des donnees de capteur via SMS en utilisant Arduino

1) Connectez le programmeur FTDI au blindage GSM comme indiqué dans la figure ci-dessous.

1641832568 716 Demander des donnees de capteur via SMS en utilisant Arduino

2) Ouvrez l’IDE Arduino et sélectionnez le bon port COM.

3) Ouvrez le moniteur série.

1641832568 225 Demander des donnees de capteur via SMS en utilisant Arduino

4) Sélectionner 19200 débit en bauds – le paramètre par défaut du blindage est 19200 – et Retour chariot. Écrivez À dans la case surlignée en rouge, puis appuyez sur Entrée. Voir la figure ci-dessous.

1641832568 954 Demander des donnees de capteur via SMS en utilisant Arduino

5) Le bouclier répondra avec d’accord, si tout fonctionne correctement.

1641832568 994 Demander des donnees de capteur via SMS en utilisant Arduino

Maintenant que vous savez que le bouclier fonctionne correctement, vous êtes prêt à commencer à construire le projet.

Schémas

La figure ci-dessous montre les schémas de circuit pour ce projet.

Vous devez connecter le blindage GSM SIM900 et le capteur de température et d’humidité DHT11 à l’Arduino comme indiqué dans la figure ci-dessous.

1641832568 439 Demander des donnees de capteur via SMS en utilisant Arduino

Installation de la bibliothèque DHT

Pour lire à partir du capteur DHT, vous devez avoir installé la bibliothèque DHT. Si vous n’avez pas installé la bibliothèque DHT, suivez les instructions ci-dessous :

  1. Cliquez ici pour télécharger la bibliothèque de capteurs DHT. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir Dossier DHT-sensor-library-master
  3. Renommez votre dossier de DHT-sensor-library-master à DHT
  4. Bouge le DHT dossier dans votre dossier de bibliothèques d’installation Arduino IDE
  5. Enfin, rouvrez votre IDE Arduino

Installation de la bibliothèque Adafruit_Sensor

Pour utiliser le capteur de température et d’humidité DHT, vous devez également installer le Bibliothèque Adafruit_Sensor. Suivez les étapes suivantes pour installer la bibliothèque dans votre IDE Arduino :

  1. Cliquez ici pour télécharger la bibliothèque Adafruit_Sensor. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir le dossier Adafruit_Sensor-master
  3. Renommez votre dossier de Adafruit_Sensor-master à Adafruit_Sensor
  4. Bouge le Adafruit_Sensor dossier dans votre dossier de bibliothèques d’installation Arduino IDE
  5. Enfin, rouvrez votre IDE Arduino

Code

Le code suivant lit la température et l’humidité du capteur DHT et les envoie par SMS lorsque vous envoyez un SMS à l’Arduino avec le message « STATE ».

Vous devez modifier le code fourni avec le numéro de téléphone auquel votre Arduino doit répondre aux lectures. Le code est bien commenté pour que vous compreniez le but de chaque ligne de code. Ne téléchargez pas le code maintenant. Faites défiler vers le bas et lisez l’explication sous le code.

/*
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 */


// Include DHT library and Adafruit Sensor Library
#include "DHT.h"
#include <Adafruit_Sensor.h>
//Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Pin DHT is connected to
#define DHTPIN 2
  
// Uncomment whatever type of sensor you're using
#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);

// Create global varibales to store temperature and humidity
float t; // temperature in celcius
float f; // temperature in fahrenheit
float h; // humidity

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Create variable to store incoming SMS characters
char incomingChar;

void setup() {
  dht.begin();
  
  Serial.begin(19200); 
  SIM900.begin(19200);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0r");
  delay(100);
}

void loop(){
  if (SMSRequest()){
    if(readData()){
      delay(10);
      // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
      // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
      SIM900.println("AT + CMGS = "+XXXXXXXXXX"");
      delay(100);
      // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
      String dataMessage = ("Temperature: " + String
      // Uncomment to change message with farenheit temperature
      // String dataMessage = ("Temperature: " + String(f) + "*F " + " Humidity: " + String(h) + "%");      
      
      // Send the SMS text message
      SIM900.print(dataMessage);
      delay(100);
      // End AT command with a ^Z, ASCII code 26
      SIM900.println((char)26); 
      delay(100);
      SIM900.println();
      // Give module time to send SMS
      delay(5000);  
    }
  }
  delay(10); 
}

boolean readData() {
  //Read humidity
  h = dht.readHumidity();
  // Read temperature as Celsius
  t = dht.readTemperature();
  // Read temperature as Fahrenheit
  f = dht.readTemperature(true);

  // Compute temperature values in Celcius
  t = dht.computeHeatIndex(t,h,false);

  // Uncomment to compute temperature values in Fahrenheit
  //f = dht.computeHeatIndex(f,h,false);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan
    Serial.println("Failed to read from DHT sensor!");
    return false;
  }
  Serial.print("Humidity: "); 
  Serial.print(h);
  Serial.print(" %t");
  Serial.print("Temperature: "); 
  Serial.print
  Serial.print(" *C ");
  //Uncomment to print temperature in Farenheit
  //Serial.print(f);
  //Serial.print(" *Ft");
  return true;
}

boolean SMSRequest() {
  if(SIM900.available() >0) {
    incomingChar=SIM900.read();
    if(incomingChar=='S') {
      delay(10);
      Serial.print(incomingChar);
      incomingChar=SIM900.read();
      if(incomingChar =='T') {
        delay(10);
        Serial.print(incomingChar);
        incomingChar=SIM900.read();
        if(incomingChar=='A') {
          delay(10);
          Serial.print(incomingChar);
          incomingChar=SIM900.read();
          if(incomingChar=='T') {
            delay(10);
            Serial.print(incomingChar);
            incomingChar=SIM900.read();
            if(incomingChar=='E') {
              delay(10);
              Serial.print(incomingChar);
              Serial.print("...Request Received n");
              return true;
            }
          }
        }
      }
    }
  }
  return false;
}

Afficher le code brut

Importation de bibliothèques

Tout d’abord, vous incluez les bibliothèques nécessaires à ce projet : la bibliothèque DHT pour lire à partir du capteur DHT et la bibliothèque SoftwareSerial pour communiquer avec le module GSM SIM900.

#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <SoftwareSerial.h>

Capteur DHT

Ensuite, vous dites à l’Arduino que la broche de données DHT est connectée à la broche 2, sélectionnez le type de capteur DHT et créez une instance dht. Le code est compatible avec d’autres capteurs DHT tant que vous définissez celui que vous utilisez dans le code.

#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

Vous créez également des variables flottantes pour stocker les valeurs de température et d’humidité.

float t; // temperature in celcius
float f; // temperature in fahrenheit
float h; // humidity

Bouclier GSM

La ligne suivante configure le logiciel série sur les broches 7 et 8. La broche 7 est configurée en tant que RX et la broche 8 en tant que TX.

SoftwareSerial SIM900(7, 8);

Vous créez également une variable char pour stocker les caractères SMS entrants.

char incomingChar;

mettre en place()

Dans le mettre en place(), vous commencez le DHT et le shield SIM900. Le bouclier SIM900 est réglé en mode texte et vous configurez également le module pour envoyer les données SMS au moniteur série lorsqu’il les reçoit. Cela se fait avec les deux lignes suivantes, respectivement :

SIM900.print("AT+CMGF=1r"); 
SIM900.print("AT+CNMI=2,2,0,0,0r");

Les fonctions

Nous créons une fonction pour lire la température et l’humidité appelée readData(). Cette fonction stocke les valeurs sur le t et h variables. Le code utilise la température en degrés Celsius, mais il est préparé si vous voulez plutôt Fahrenheit – le code est commenté sur l’endroit où vous devez apporter les modifications.

Nous créons également une fonction qui vérifie si le message entrant est égal à STATE – le SMSRequête() une fonction. Cette fonction renvoie vrai si l’Arduino reçoit un message avec le texte STATE et faux si non. Vous lisez les caractères entrants du SMS en utilisant :

incomingChar = SIM900.read();

boucler()

Dans le boucler(), vous vérifiez s’il y a eu une demande de SMS avec le SMSRequête() fonction – vous vérifiez si l’Arduino a reçu un message STATE. Si vrai, il lira la température et l’humidité et vous l’enverra par SMS.

Le numéro auquel l’Arduino répond est défini sur la ligne suivante :

SIM900.println("AT + CMGS = "XXXXXXXXXXXX"");

Remplace le XXXXXXXXXXXX avec le numéro de téléphone du destinataire.

Noter: vous devez ajouter le numéro selon le format de numéro de téléphone international. Par exemple, au Portugal, le numéro est précédé de +351XXXXXXXXX.

Ensuite, vous stockez le message que vous souhaitez envoyer dans le dataMessage variable. Enfin, vous envoyez le SMS en utilisant :

SIM900.print(dataMessage);

Manifestation

Lorsque vous envoyez le message STATE à l’Arduino, il répond avec les données du capteur.

1641832568 382 Demander des donnees de capteur via SMS en utilisant Arduino

Regardez la vidéo au début de l’article pour une démonstration de projet plus approfondie.

Conclusion

C’est un excellent projet pour vous aider à démarrer avec le bouclier SIM900 GSM. Vous avez appris à lire et à envoyer des SMS avec l’Arduino.

Vous pouvez appliquer les concepts appris dans à peu près n’importe quel projet. Voici quelques idées de projets :

  • Système de surveillance qui envoie un SMS lorsqu’il détecte un mouvement
  • Contrôler un relais par SMS
  • Demander des données de capteur spécifiques à partir d’une collection de capteurs en ajoutant plus de conditions au code

Si vous aimez Arduino, vous aimerez certainement ces 25 projets Arduino étape par étape.