Envoyer un SMS depuis Arduino avec SIM800L GSM/GPRS
Sponsorisé par: DigitSpace
Produit utilisé: SIM800L Module Replace SIM900A GSM GPRS 5V Serial with Antenna
Bonjour, et bienvenue à un autre tutoriel facile et étape par étape, cette fois nous allons voir comment envoyer des SMS/Text depuis la carte Arduino Uno vers votre téléphone en utilisant le module SIM800L, nous allons voir comment envoyer un texte simple, puis nous allons envoyer quelques données acquises par le capteur de température et d’humidité DHT11.
Si vous voulez savoir comment utiliser le DHT 11, veuillez visiter ce lien:
Mesurer la température et l’humidité avec DHT11 et Arduino + Afficheur LCD i2c
HALT ! !!! N’oubliez pas que ce type de modules nécessite une carte SIM, de taille micro-Sim, et assurez-vous que la carte n’a pas de « code pin » (mettez-la d’abord dans votre téléphone et enlevez la fonction « SIM Lock »), et enfin assurez-vous que vous avez assez de crédit pour pouvoir envoyer des SMS, cela dépend de votre fournisseur de services.
Nous pouvons maintenant continuer… Il existe plusieurs versions du module mais j’ai utilisé celle-ci :
Cela a très bien fonctionné, et très facilement, il peut être alimenté directement par l’Arduino, mais je ne le recommande pas, c’est pas stable… Il vaut mieux l’alimenter avec une batterie Lithium et un convertisseur.
Celui-ci est également livré avec une antenne 3dBi et son convertisseur uFL-SMA, ce qui améliore considérablement la réception du signal.
Il a 7 broches, j’en ai utilisé deux pour l’alimentation (5V/GND), puis TXD/RXD/GND pour la communication UART, vous pouvez avoir besoin ou non d’ajouter le GND, cela dépend de votre câblage.
Vous pouvez communiquer avec le module en utilisant certaines commandes AT, nous allons en voir quelques-unes.
Voici la liste complète des commandes.
N.B : Pour la puissance, j’utiliserai une batterie Li de 7,4V avec un convertisseur buck (en fait un buck-boost), c’est plus stable.
Notez également que le module possède deux LED, une pour l’alimentation (ON/OFF) et une autre qui clignote :
- Clignote toutes les 1s : Signifie qu’il recherche la réception d’un signal.
- Clignote toutes les 2 secondes : Signifie qu’il communique des données GPRS.
- Clignote toutes les 3 secondes : Signifie qu’il est connecté au réseau et prêt.

Test
Dans le test 1, nous allons câbler le module avec la carte Arduino Uno, ajouter un bouton poussoir, l’idée est que lorsque nous appuyons sur le bouton, l’Arduino enverra un simple SMS (chaîne) à un numéro de téléphone via le SIM800l.
Schéma de câblage
Le câblage est simple, l’Arduino est également alimenté par la « batterie » ou la source 5VDC, le bouton est toujours sur le niveau HAUT parce que j’utilise le pull up interne, quand on le presse il devient bas… puis RX/TX avec TXD/RXD (à partir de Sim800l).

Librairies
On aura pas besoin de librairies additionnelles. “SoftwareSerial” est déjà installée.
Code
Copier ci dessous, ou télécharger en bas de la page.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/* Ceci est un code à utiliser avec SIM800L et un bouton poussoir * On appuie sur le bouton poussoir pour envoyer un message prédéfinie * Veuillez visiter https://SurtrTech.com pour plus de détails */ #include <SoftwareSerial.h> //Librairie de comm série SoftwareSerial sim800l(2, 3); //RX/TX pour Arduino et pour le module c'est TXD/RXD, ils doivent être croisés #define button1 7 //Bouton poussoir sur D7 bool button_State; //Etat du bouton void setup() { pinMode(button1, INPUT_PULLUP); //Au lieu d'ajouter une résistance pulldown, j'utilise le pullup interne et le bouton s'appuie sur le niveau BAS sim800l.begin(9600); //Taux du module dépend de votre version Serial.begin(9600); delay(1000); } void loop() { button_State = digitalRead(button1); //Lire l'état du bouton, appuyé/non if (button_State == LOW) { //Si le bouton est appuyé Serial.println("Button pressed"); //Afficher ce message sur le moniteur série delay(200); //délai SendSMS(); //Et on appelle la fonction qui envoie le SMS } if (sim800l.available()){ //Si il y a une communication avec le Module on affiche les infos sur le moniteur série Serial.write(sim800l.read()); } } void SendSMS() { Serial.println("Sending SMS..."); sim800l.print("AT+CMGF=1\r"); //Mettre le module sur mode SMS delay(100); sim800l.print("AT+CMGS=\"+*********\"\r"); //Le numéro de téléphone auquel vous voulez envoyer le SMS avec le code du pays "+212123456789" delay(500); sim800l.print("SIM800l is working"); //Message à envoyé, soyez court!! delay(500); sim800l.print((char)26); //Il faut ajouter cette ligne (datasheet) delay(500); sim800l.println(); Serial.println("Text Sent."); delay(500); } |
Résultat
L’Arduino et le module sont câblés et tous deux alimentés en 5VDC à l’aide d’une pile au lithium + le convertisseur que vous voyez en haut à droite. Après avoir attendu que le module soit connecté au réseau (en attendant que le module clignote toutes les 3s), il suffit d’appuyer sur le bouton pour envoyer le SMS/texte que nous avons déjà écrit dans le code.

Le SMS/Text est reçu sur le téléphone.

Le bouton définit le cas général… Vous pouvez utiliser n’importe quel déclencheur : Tripwire (alarme), seuil d’un certain capteur…
Envoyer les valeurs d’un capteur
Le test numéro 2 est vraiment similaire au premier, maintenant au lieu d’un simple message, nous allons pouvoir envoyer une valeur de capteur, et ici j’ai choisi le DHT11, parce que c’est très facile et un classique.
Schéma de câblage
Comme dans le premier cas, nous ajoutons maintenant le DHT11 et sa broche de données est sur la broche 8.

Librairies
Ca depend du capteur que vous utilisez, puisque j’utilise le DHT11, j’utilise la librairie “DHT”, vous pouvez la télécharger ici.
Code
Copier ci dessous, ou télécharger en bas de la page.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
/* Ceci est un code à utiliser avec SIM800L, DHT11 et un bouton poussoir * On appuie sur le bouton poussoir pour envoyer un message qui contient la température et l'humidité mesurées par DHT11 * Veuillez visiter https://SurtrTech.com pour plus de détails */ #include <SoftwareSerial.h> //Librairies comm série et DHT #include "DHT.h" #define DHTpin 8 //Broche signal DHT #define DHTTYPE DHT11 //Type DHT #define button1 7 //Bouton poussoir bool button_State; //Etat du bouton String Data_SMS; //Chaine à envoyer par SMS float t,h; //Température et humidité SoftwareSerial sim800l(2, 3); //RX/TX pour Arduino et pour le module c'est TXD/RXD, ils doivent être croisés DHT dht(DHTpin, DHTTYPE); void setup() { pinMode(button1, INPUT_PULLUP); //Au lieu d'ajouter une résistance pulldown, j'utilise le pullup interne et le bouton s'appuie sur le niveau BAS sim800l.begin(9600); Serial.begin(9600); dht.begin(); delay(1000); } void loop() { h = dht.readHumidity(); //Mesurer l'humidité et température in % and °C t = dht.readTemperature(); button_State = digitalRead(button1); //Lire l'état du bouton if (button_State == LOW) { //Si le bouton est appuyé Serial.println("Button pressed"); delay(200); Send_DHT_Data(); //Et on appelle la fonction qui envoie le SMS } Serialcom(); //Si aucun SMS n'est envoyé, nous appelons constamment cette fonction, qui permet la communication entre vous et le module via le moniteur série. //Vous pouvez essayer les commandes AT et vérifier le retour d'information. L'envoi d'un message est également une commande AT. } void Send_DHT_Data() { Serial.println("Sending Data..."); sim800l.print("AT+CMGF=1\r"); //Mode SMS delay(100); sim800l.print("AT+CMGS=\"+***********\"\r"); //Le numéro de téléphone auquel vous voulez envoyer le SMS avec le code du pays "+212123456789" delay(500); Data_SMS = "Temperature = "+String(t,1)+" C" + " \nHumidity ="+String(h,1)+ " %"; //Une chaîne pour regrouper l'ensemble du message, composé de chaînes et de flottants, en une seule chaîne, //Exemple : Température 23,1 C //Humidité 40 % sim800l.print(Data_SMS); //Cette chaîne est envoyée par SMS delay(500); sim800l.print((char)26); //Il faut ajouter cette ligne (datasheet) delay(500); sim800l.println(); Serial.println("Data Sent."); delay(500); } void Serialcom() { delay(500); while (Serial.available()) { sim800l.write(Serial.read()); //Transférer les données reçues par le port série au port série du logiciel } while(sim800l.available()) { Serial.write(sim800l.read()); //Transférer au port série ce que le logiciel a reçu en série } } |
Résultat
Vous pouvez communiquer avec le module et tester toutes les commandes AT que vous voulez lorsque vous êtes en mode veille, mais lorsque vous appuyez sur le bouton, un SMS contenant les valeurs actuelles de température et d’humidité est envoyé au numéro de téléphone.

Lorsque l’on appuie sur le bouton, la lecture des données du DHT commence et les envoie au numéro de téléphone défini.

Voilà, c’est tout pour ce tutoriel, j’espère qu’il vous sera utile, maintenant vous pouvez envoyer facilement un SMS à votre téléphone… Il ne vous reste plus qu’à choisir quelle information envoyer et quel est votre seuil de déclenchement préféré.
Merci à DigitSpace pour leur sponsoring.

Télécharger les codes utilisés ici
Categories
Yassine View All
Automation and Electrical Engineer, Electronics amateur trying to share my little projects.

2 thoughts on “Envoyer un SMS depuis Arduino avec SIM800L GSM/GPRS” Leave a comment ›