Pb envoi sms avec un SIM800C

Bonjour,

J’essaye d’envoyer un SMS via un Zero et un SIM800 en python
Lorsque j’envoie la commande:

phone = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=1)
phone.write(b’AT\r\n’)
time.sleep(2)
reply = phone.read(phone.inWaiting())
print (reply)

Il me répond: b’AT\r\r\nOK\r\n’
Apparemment c’est ok

Ensuite:
phone.write(b’AT+CMGF=1\r\n’)
time.sleep(3)
reply = phone.read(phone.inWaiting())
print (reply)

Il me répond: b’AT+CMGF=1\r\r\nERROR\r\n’

Je ne trouve pas de solution
Comment récupérer le code erreur ?
Meri d’avance

hello,

cette commande nécessite d’avoir au préalable saisie le code pin
( CME ERROR: 11 SIM PIN required )

pour avoir un code plus précis que error ! AT+CMEE=2

source :
https://www.smssolutions.net/tutorials/gsm/gsmerrorcodes/

Merci pour votre aide
Ma carte sim était mal positionnée
Donc plus d’erreur de carte

Par contre la transmission de SMS ne se fait toujours pas et plus de message d’erreur
Voici le pg complet:

import serial
import RPi.GPIO as GPIO
import time

phone = serial.Serial("/dev/ttyS0", baudrate=115200, timeout=1)

phone.write(b’AT\r\n’)
time.sleep(2)

phone.write(b’AT+CMEE=2\r\n’) # ERROR
time.sleep(2)

reply = phone.read(phone.inWaiting())
print (reply)

phone.write(b’AT+CMGF=1\r\n’)
time.sleep(3)

phone.write(b’AT+CNMI=2,1,0,0,0\r\n’)
time.sleep(2)

phone.write(b’AT+CMGS="+336xxxxxxxxx"\r\n’)
time.sleep(2)

phone.write(b’Hello cher utilisateur, je suis ton Raspberry Pi\r\n’) #message
time.sleep(2)

phone.write(b’\x1A’) #Envoi du SMS
time.sleep(2)

pour savoir si tu es connecté à ton opérateur:
AT+COPS?
il doit te donner l’opérateur

si il est ok avec le code pin
AT+CPIN?
il doit répondre ready

J’ai testé la carte SIM dans un téléphone avec la suppression du code PIN
Commande AT+CPIN? => ok
Tout est ok jusqu’à cette commande:
phone.write(b’AT+CMGS="+336xxxxxxxxx"\r\n’)
La commande AT+COPS? n’apporte pas de réponse
Quel émulateur peut on utilisé pour lancer les commandes AT en direct du PI ?

chez moi il a fallu que j’insiste pour avoir un retour…

minicom : Sending AT Commands

pour la qualité du signal : AT+CSQ
(https://m2msupport.net/m2msupport/atcsq-signal-quality/)

tu ne précises pas si tu utilises un hat (plugé sur les pins du Rpi ) ou directement un module (via usb ou gpio )

dans le premier cas j’avais bien galéré avec un switch pour contrôler l’UART
dans le second il pourrait y avoir un problème d’alimentation ( apparemment des pics qui demande de l’ampérage - mais les modules sim800C que j’ai vu sur le net semble avoir le bon condensateur (?) )

un problème d’antenne ?

J’ai un HAT
Quel problème as tu rencontré ?
J’ai installé minicom
Il plante lorsque j’envoi des commandes !!
J’ai branché le PI et SIM800 avec une alim de 5A
L’antenne était livré avec le SIM

J’ai fait un essai sur un PI4 et zero w avec Bluetooth
Apparemment d’après ce que j’ai lu le bluetooth pose problème
Il faut le désactiver d’après le tuto: raspberry-pi.fr/activer-port-serie-raspberry-pi/
Qu’en penses tu ?

et aussi rediriger le PL011 aux broches 14 et 15 du connecteur GPIO.

J’ai lancé les commandes ci-dessous pour désactiver le bluetooth et rediriger le PL011:
echo « dtoverlay=disable-bt » | sudo tee -a /boot/config.txt
sudo systemctl disable hciuart
sudo reboot
phone = serial.Serial("/dev/serial0", baudrate=115200, timeout=1)

Du coup minicom fonctionne correctement:
Welcome to minicom 2.7.1

OPTIONS: I18n
Compiled on Aug 13 2017, 15:25:34.
Port /dev/serial0, 15:17:21

Press CTRL-A Z for help on special keys

AT
OK
AT+CMGF=1
OK
AT+CNMI=2,1,0,0,0
OK
AT+CSQ=?
+CSQ: (0-31,99),(0-7,99)

OK
AT+CMGS="+336xxxxxxxxx"

Hello cher utilisateur, je suis ton Raspberry Pi (ctrl Z)
ERROR

Voilà cela bloque à ce niveau

le truc c’est qu’on sait toujours pas si ton hat se connecte a l’opérateur…
sur le mien j’obtiens le signal de qualité même sans code pin:

AT+CSQ=?
+CSQ: (0-31,99),(0-7,99)
OK

pour me connecter je suis obligé de saisir un code pin; en le vérifiant il me sort
ready
sinon
+CPIN: SIM PIN

AT+CPIN?
+CPIN: SIM PIN
OK

normalement il devrait pas te donner sim pin

as tu essayer creg ?

le hat pas connecté ça donne :

AT+CREG?
+CREG: 2,0
OK

le hat connecté ça donne :

AT+CREG?
+CREG: 2,5,"2505","FECA"
OK

il me semble que le chiffre signifiant c’est le deuxième ( 0 = pas connecté, 5 : connecté )

Voilà la réponse à un AT+CREG?
+CREG: 0,2
OK
0 → disable network registration unsolicited result code
2 → not registered, but ME is currently searching a new operator to register to

Je suis chez FREE
Apparemment je ne suis pas enregistrée sur le réseau
AT+CREG?
+CME ERROR: 604

AT+CSQ
+CSQ: 0,0
Aucun réseau trouvé

AT+CSCA? service provider sms center number
+CSCA: « +33695000695 »,145
OK
J’habite une zone isolée et le pylône assez récemment installé (zone blanche) est low cost. Il n’y a pas d’antenne FREE.
Je crois que FREE utilise le réseau ORANGE

ok clair !
donc ton hat fonctionne !
as tu essayer d’autres endroit dans la maison si possible en hauteur ( grenier ?)

il y a des solutions genre Femto Freebox si j’ai bien compris autour de la box il y a du réseau et la communication passe par internet ( pas trouvé de tarif ! et apparemment solution en fin de vie…)

ou des amplificateur de signal (StellaHome - Amplification de la couverture du réseau mobile dans votre maison - Stelladoradus)

mais je ne sais pas ce que vallent ces solutions !

et oui free peut utiliser le réseau orange ( c’est mon cas )

Je ne pense pas que ce soit un pb de couverture car j’ai utilisé la carte SIM dans un téléphone portable et j’arrive à envoyer des SMS.

AT+CPIN? il répond quoi ?

READY
OK

Il faut que j’essai une carte sim d’un autre opérateur

ok pour le code pin …
j’ai essayé ce script python3 sur mon hat tu peux le copier et le coller ds un fichier:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import serial
import time
ser = serial.Serial("/dev/ttyS0", 9600, timeout=5)

# envoie AT
ser.write(b'AT+CMGF=1\r')
time.sleep(5)
# lecture retour
while ser.inWaiting()>0:
   res = ser.readline(None)
   print (res)
# envoie AT
ser.write(b'AT+CMGS=\"+33nnnnnnnnn\"\r')
time.sleep(5)
# lecture retour
while ser.inWaiting()>0:
   res = ser.readline(None)
   print (res)
# envoie AT
ser.write(b'this is a sms (python3).\x1A\r')
time.sleep(5)
# lecture retour
while ser.inWaiting()>0:
   res = ser.readline(None)
   print (res)
ser.close()

après un
chmod +x sms_send.py
tu devrais obtenir ça;

./sms_send_p3.py
b'AT+CMGF=1\r\r\n'
b'OK\r\n'
b'AT+CMGS="+33nnnnnnnnn"\r\r\n'
b'> '
b'this is a sms (python3).\r\n'
b'> \r\n'
b'+CMGS: 143\r\n'
b'\r\n'
b'OK\r\n'
b'\r\n'
b'+CMTI: "SM",2\r\n'

par rapport a python 2.7 il génère des \r\n en pagaille mais ça fonctionne (l"import serial pour python3 doit les rajouter)
c’est peut être la temporisation qui lui permet de mieux digérer les commandes ? (
time.sleep(5) ) ainsi que l’attente avec la boucle while.
j’ai aussi baisser le baudrate ( 9600 vs 115200)

avec cette vitesse de connexion serie et une grosse tempo ça vaudrait peut être le coup de refaire les CREG, CSQ etc.

Voici ce qu’il me réponds:

b’AT+CMGF=1\r\r\n’
b’OK\r\n’
b’AT+CMGS="+336xxxxxxxxxx"\r\r\n’
b’> ’
b’this is a sms (python3).\r\n’
b’> ’

pas cool ! aucun retour des commande !
dansla doc des commande AT j’ai trouvé ça
AT+CMGS=?
il doit repondre OK
et chez toi ?
l’idée c’est que quand c’est pas ok il envoie un message d’erreur CME

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import serial
import time
ser = serial.Serial("/dev/ttyS0", 9600, timeout=5)
# envoie AT
ser.write(b'AT+CMEE=2\r\n')
time.sleep(2)
# lecture retour
while ser.inWaiting()>0:
   res = ser.readline()
   print (res)
# envoie AT
ser.write(b'AT+CMGS=?\r\n')
time.sleep(2)
# lecture retour
while ser.inWaiting()>0:
   res = ser.readline()
   print (res)
ser.close()

Oui il répond OK
J’ai essayé avec un autre opérateur SFR c’est pareil