Utiliser un module SIM800C pour envoyer et recevoir des SMS

De Wiki de Mémoire Vive
Révision datée du 28 février 2024 à 13:47 par 192.168.2.1 (discussion)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Le module SIM800C est un composant compact dédié aux communications mobiles, offrant une connectivité GSM/GPRS. Il permet l'envoi et la réception de messages SMS, ainsi que la transmission de données via le réseau mobile. En plus de gérer la carte SIM, le module prend en charge des fonctionnalités telles que l'enregistrement sur le réseau, la sélection d'opérateur, et la configuration du contexte de données pour établir des connexions IP. Sa compacité en fait une solution idéale pour l'intégration dans des projets électroniques divers, offrant une connectivité cellulaire efficace pour des applications telles que la surveillance à distance et le suivi d'objets. En résumé, le SIM800C enrichit les capacités de communication des dispositifs électroniques grâce à sa connectivité cellulaire intégrée.

Ainsi, on peut imaginer plusieurs instances Home Assistant qui communiquent entre elles et se synchronisent. Et donc pouvoir gérer plusieurs sites.

Exemple : lorsque le drone MV décolle, il envoie un message au serveur HA de l'asso, sur lequel on suit le drone en temps réel avec sa position.

Ce module se connecte en USB, ce qui assure d'une part l'alimentation et d'autre part l'émulation d'un port série. On y glisse une carte SIM.

Voici comment se déroule le test, avec juste des commandes envoyées avec PuTTY depuis un PC.

- insérer la carte SIM dans le module, l'angle coupé vers l'extérieur et les contacts vers l'intérieur.

- relever le port COM utilisé (il s'agit d'une émulation)

- paramétrer PuTTY avec le mode Serial, en mettant le bon port (COM1 ou COM2, etc.) et en laissant la vitesse 9600

Ci-dessous le déroulé du test, avec la documentation ChatGPT en suivant.

AT
ERROR
AT
OK
AT+CSQ
+CSQ: 16,0

OK
AT+CGATT?
+CGATT: 1

OK
AT+CGDCONT?
+CGDCONT: 1,"IP","","0.0.0.0",0,0
+CGDCONT: 2,"IP","","0.0.0.0",0,0
+CGDCONT: 3,"IP","","0.0.0.0",0,0

OK
AT+CPIN?
+CPIN: READY

OK
AT+CREG?
+CREG: 0,5

OK
AT+CGDCONT=1,"IP","free","0.0.0.0",0,0
OK
AT+COPS=?
+COPS: (2,"Orange F","Orange","20801"),(3,"SFR","SFR","20810"),(3,"BOUYGUES TELE                                  COM","BYTEL","20820"),,(0-4),(0-2)

OK
AT+COPS=1,2,"20801"
OK
AT+COPS?
+COPS: 1,2,"20801"

OK
AT+CGATT?
+CGATT: 1

OK

AT+CMGF=1
OK
AT+CMGS="0760410279"
> message pour denis (terminer par ctrl z)
+CMGS: 9

OK
AT
OK
AT+CMGS="0760420279"
> message pour denis
+CMGS: 10

OK
AT+CGDCONT?
+CGDCONT: 1,"IP","free","0.0.0.0",0,0
+CGDCONT: 2,"IP","","0.0.0.0",0,0
+CGDCONT: 3,"IP","","0.0.0.0",0,0

OK

+CMTI: "SM",11
AT+CMGR=1
+CMGR: "REC UNREAD","+33760420279","Braux D","22/08/19,09:02:34+08"
Messagerie "666" Free: le 19/08 ▒ 09:31, ce correspondant a appel▒ 5 fois sur votre mobile sans laisser de message

OK
AT+CMGR=1
+CMGR: "REC READ","+33760420279","Braux D","22/08/19,09:02:34+08"
Messagerie "666" Free: le 19/08 ▒ 09:31, ce correspondant a appel▒ 5 fois sur votre mobile sans laisser de message

OK
AT+CMGD=1
OK
AT+CMGR=1
OK

+CMTI: "SM",1
AT+CMGR=1
+CMGR: "REC UNREAD","+33760420279","Braux D","23/11/10,21:34:01+04"
Trop bien

OK

Configuration initiale[modifier]

  • AT - Vérifie la connexion avec le modem. Le modem renvoie OK si la communication est établie.
  • AT+CSQ - Interroge la qualité du signal (Commande Signal Quality). Résultat : +CSQ: 16,0 indiquant une qualité de signal de 16.

Attachement GPRS[modifier]

  • AT+CGATT? - Interroge l'état de l'attachement au réseau (Commande GPRS Attach). Résultat : +CGATT: 1 indiquant que le module est attaché au réseau.

Configuration du contexte de données (non nécessaire pour les SMS)[modifier]

  • AT+CGDCONT? - Interroge les paramètres de contexte de données (Commande GPRS PDP Context). Affiche plusieurs enregistrements de contexte de données.
  • AT+CGDCONT=1,"IP","free","0.0.0.0",0,0 - Configure le contexte de données pour utiliser le profil free avec l'adresse IP 0.0.0.0.

Vérification de l'état du module SIM[modifier]

  • AT+CPIN? - Interroge l'état du code PIN du module SIM. Résultat : +CPIN: READY indiquant que le code PIN est prêt.

Vérification de l'enregistrement au réseau[modifier]

  • AT+CREG? - Interroge l'état de l'enregistrement du réseau. Résultat : +CREG: 0,5 indiquant que le réseau est enregistré en mode itinérance.

Sélection de l'opérateur réseau (semble automatique)[modifier]

  • AT+COPS=? - Interroge la liste des opérateurs disponibles.
  • AT+COPS=1,2,"20801" - Sélectionne l'opérateur avec le code 20801.
  • AT+COPS? - Interroge l'opérateur actuellement sélectionné. Résultat : +COPS: 1,2,"20801" indiquant la sélection de l'opérateur Orange F.

Nouvelle vérification de l'attachement GPRS[modifier]

  • AT+CGATT? - Interroge à nouveau l'état de l'attachement GPRS. Résultat : +CGATT: 1 confirme que le module est attaché au réseau.

Configuration des messages SMS[modifier]

  • AT+CMGF=1 - Configure le mode de texte pour les messages SMS.

Envoi de messages SMS[modifier]

  • AT+CMGS="0760420279" - Envoie un message SMS au numéro de téléphone 0760410279 avec le texte message pour
  • AT+CMGS="0760420279" - Envoie un autre message SMS au numéro de téléphone 0760420279 avec le même texte.

Vérification du contexte de données après envoi de messages SMS[modifier]

  • AT+CGDCONT? - Interroge à nouveau les paramètres de contexte de données après l'envoi des messages.

Lecture des messages SMS[modifier]

  • AT+CMGR=1 - Lit le premier message SMS non lu.

Suppression des messages SMS[modifier]

  • AT+CMGD=1 - Supprime le premier message SMS.

Tentative de lecture après suppression[modifier]

  • AT+CMGR=1 - Tente de lire à nouveau le premier message (maintenant supprimé).

Lecture d'un nouveau message SMS[modifier]

  • AT+CMGR=1 - Lit un nouveau message SMS non lu avec le texte Trop bien.


PRECISION : Configuration du Contexte de Données avec AT+CGDCONT[modifier]

La commande AT+CGDCONT=1,"IP","free","0.0.0.0",0,0 est utilisée pour configurer le contexte de données (PDP context) sur le module GSM/GPRS. Cette commande indique au module comment établir une connexion IP avec le réseau mobile. La nécessité de cette commande dépend de votre cas d'utilisation spécifique.

Les paramètres de la commande sont les suivants :

  • 1: Identifiant du contexte de données.
  • "IP": Type de contexte de données, dans ce cas, IP.
  • "free": Nom du profil d'accès aux données.
  • "0.0.0.0": Adresse IP attribuée au module (en général, elle peut être attribuée dynamiquement par l'opérateur).
  • 0,0: Paramètres de protocole, généralement utilisés par l'opérateur pour définir les protocoles de communication.

Si votre application nécessite une connexion de données, alors la configuration du contexte de données est généralement nécessaire. Cela peut être le cas si vous envisagez d'utiliser des services tels que l'envoi ou la réception de données via GPRS.

Cependant, si votre application ne nécessite pas de connexion de données, vous pourriez ne pas avoir besoin de cette commande. Certains cas d'utilisation, comme l'envoi de messages SMS, ne nécessitent pas forcément une connexion de données active.

En résumé, l'inclusion de la commande AT+CGDCONT=1,"IP","free","0.0.0.0",0,0 dépend de l'objectif spécifique de votre application et de la manière dont vous prévoyez d'utiliser le module GSM/GPRS.

Envoi d'un SMS avec un script PYTHON[modifier]

Voici un exemple de script Python à envoyer, les temporisations pouvant être optimisées,

import serial
import time

# Paramètres du port série
port = "COM3"  # Remplacez par le port COM utilisé par votre module
baudrate = 9600

# Configuration du port série
ser = serial.Serial(port, baudrate, timeout=1)

# Attendez que le module soit prêt
time.sleep(2)

# Commande pour configurer le module en mode texte
ser.write(b'AT+CMGF=1\r\n')
time.sleep(1)

# Remplacez "NuméroDuDestinataire" par le numéro de téléphone du destinataire
# Remplacez "ContenuDuSMS" par le contenu de votre SMS
ser.write(b'AT+CMGS="0760420279"\r\n')
time.sleep(1)
ser.write(b'message pour DENIS\x1A\r\n')  # Ctrl+Z pour envoyer le SMS

# Attendez la réponse du module
time.sleep(10)
response = ser.read_all()
print(response.decode('utf-8'))

# Fermez le port série
ser.close()

POur envoyer, le script, ajouter ce code dans configuration.yaml

#commande shell pour création record dans Airtable, scan IP, 
shell_command:
  mon_commande_shell: python3 /config/scripts/sms.py
Pour aller plus loin, SMS et appels avec HA sans internet, https://hacf.fr/blog/esphome-sms-appels-sans-internet/
voir cette alternative, https://esp32.arduino-forth.com/
Et ceci, https://forum.hacf.fr/t/esphome-sim7600-4g-ou-sms/25463/21