首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用AT命令发送/接收短信?

如何使用AT命令发送/接收短信?
EN

Stack Overflow用户
提问于 2010-01-29 18:13:38
回答 4查看 50.6K关注 0票数 13

有没有人可以帮我用Python中的AT命令发送和接收短信?

如果重要的话,我使用的是Fedora 8。

哪款手机的Linux更好(诺基亚,索尼爱立信,三星,……)?是否所有手机都支持使用AT命令发送和接收SMS?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-29 00:58:15

下面是一些示例代码,可以帮助您入门(在Python 3000中):

代码语言:javascript
运行
复制
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()

你需要做两件额外的事情:

  • 以适当的格式对消息进行编码(主要是GSM 03.38,在unicode.org上有一个方便的translation table )。如果你真的不关心除ASCII码以外的任何字符,你可以只检查是否每个字符都是string.printable.
  • Check消息的长度(我不确定这是否与编码有关,但它有时是140个字符,有时是160个字符)。

您可以使用phone.readall()检查错误,但最好在将消息发送到电话之前确保消息是正确的。还要注意的是,睡眠似乎是必要的。

大多数手机都能理解这一点。为了让我的旧诺基亚C5打开串行连接,我必须从插入USB线时弹出的菜单中选择"PC Suite“。这在蓝牙上应该也能工作得很好。

代码使用PySerial包,该包可用于Python2和3。

另请参阅:

票数 10
EN

Stack Overflow用户

发布于 2013-10-21 23:18:23

要查看使用At命令发送sms,这将有所帮助。

代码语言:javascript
运行
复制
    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"

要使用At命令接收sms,这应该会有所帮助

代码语言:javascript
运行
复制
    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()
票数 6
EN

Stack Overflow用户

发布于 2010-01-29 18:31:41

与电话交谈很容易。您只需打开相应的/dev/ttyACM*设备并与其通信。哪一部手机更棘手。任何支持"tethering“和SMS消息的完整AT命令集的手机都应该没问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2161197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档