Question

Quelqu'un peut me aider à envoyer et recevoir des SMS en utilisant les commandes AT en Python?

Dans le cas où il importe, j'utilise Fedora 8.

Quel téléphone sera mieux avec Linux (Nokia, Sony Ericson, Samsung, .....)? Est-ce que tous les téléphones prennent en charge l'envoi et la réception de SMS à l'aide des commandes AT?

Était-ce utile?

La solution

Voici quelques exemples de code que si vous commencer (en Python 3000):

import time
import serial

recipient = "+1234567890"
message = "Hello, World!"

phone = serial.Serial("/dev/ttyACM0",  460800, timeout=5)
try:
    time.sleep(0.5)
    phone.write(b'ATZ\r')
    time.sleep(0.5)
    phone.write(b'AT+CMGF=1\r')
    time.sleep(0.5)
    phone.write(b'AT+CMGS="' + recipient.encode() + b'"\r')
    time.sleep(0.5)
    phone.write(message.encode() + b"\r")
    time.sleep(0.5)
    phone.write(bytes([26]))
    time.sleep(0.5)
finally:
    phone.close()

Vous devez faire deux choses supplémentaires:

  • Coder le message dans le format approprié (la plupart GSM 03.38 , il y a une pratique de à unicode.org). Si vraiment vous ne se soucient pas des caractères autres que ASCII, vous pouvez simplement vérifier si chaque caractère est string.printable.

  • Vérifiez la longueur du message (je ne suis pas sûr que ce soit à voir avec l'encodage, mais il est parfois 140 caractères, parfois 160).

Vous pouvez utiliser phone.readall() pour vérifier les erreurs, mais il est préférable de vous assurer que votre message est OK avant de l'envoyer au téléphone. Notez également que les sommeils semblent nécessaires.

La plupart des téléphones comprendront cela. Afin d'obtenir mon vieux Nokia C5 pour ouvrir la connexion série, je devais sélectionner « PC Suite » dans le menu qui apparaît lorsque vous insérez le câble USB. Cela devrait fonctionner aussi bien sur Bluetooth.

Le code utilise le package pyserial , disponible pour python 2 et 3.

Voir aussi:

Autres conseils

pour voir envoyer des SMS à l'aide à la commande cela vous aidera.

    import serial
    import time

    class TextMessage:
        def __init__(self, recipient="+2348065777685", message="TextMessage.content not set."):
            self.recipient = recipient
            self.content = message

        def setRecipient(self, number):
            self.recipient = number

        def setContent(self, message):
            self.content = message

        def connectPhone(self):
            self.ser = serial.Serial('COM70', 460800, timeout=5, xonxoff = False, rtscts = False, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE)
            time.sleep(1)

        def sendMessage(self):
            self.ser.write('ATZ\r')
            time.sleep(1)
            self.ser.write('AT+CMGF=1\r')
            time.sleep(1)
            self.ser.write('''AT+CMGS="''' + self.recipient + '''"\r''')
            time.sleep(1)
            self.ser.write(self.content + "\r")
            time.sleep(1)
            self.ser.write(chr(26))
            time.sleep(1)

        def disconnectPhone(self):
            self.ser.close()

    sms = TextMessage("+2348063796720","Mummy i sent this message from my computer")
    sms.connectPhone()
    sms.sendMessage()
    sms.disconnectPhone()
    print "message sent successfully"

Pour recevoir des sms à l'aide à la commande ce qui devrait aider

    import serial
    import time
    import sys


    class HuaweiModem(object):

        def __init__(self):
            self.open()

        def open(self):
            self.ser = serial.Serial('COM70', 406800, timeout=5)
            self.SendCommand('ATZ\r')
            self.SendCommand('AT+CMGF=1\r')


        def SendCommand(self,command, getline=True):
            self.ser.write(command)
            data = ''
            if getline:
                data=self.ReadLine()
            return data 

        def ReadLine(self):
            data = self.ser.readline()
            print data
            return data 



        def GetAllSMS(self):
            self.ser.flushInput()
            self.ser.flushOutput()



            command = 'AT+CMGL="REC UNREAD"\r\n'#gets incoming sms that has not been read
            print self.SendCommand(command,getline=True)
            data = self.ser.readall()
            print data


    h = HuaweiModem()
    h.GetAllSMS()

Parler au téléphone est facile. Vous avez juste besoin d'ouvrir le dispositif de /dev/ttyACM* approprié et lui parler. Quel téléphone est plus délicat. Tout téléphone qui prend en charge « tethering » et le plein jeu de commandes pour les messages SMS devrait être bien.

Je suggère de remplacer le time.sleep avec boucle condition en attente de la réponse du modem « OK » avant de continuer état suivant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top