当前位置: 首页 > 面试题库 >

如何使用AT命令发送/接收SMS?

陈瀚玥
2023-03-14
问题内容

有人可以帮助我使用Python中的AT命令发送和接收SMS吗?

万一重要,我正在使用Fedora 8。

哪款手机搭配Linux(诺基亚,索尼爱立信,三星等)会更好?所有电话都支持使用AT命令发送和接收SMS吗?


问题答案:

以下是一些示例代码,可以帮助您入门(在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()

您还需要做两件事:

  • 用适当的格式编码消息(主要是GSM 03.38,unicode.org上有一个方便的翻译表)。如果您真的不在乎ASCII以外的其他任何字符,则只需检查是否每个字符都在中即可string.printable

  • 检查消息的长度(我不确定是否与编码有关,但有时为140个字符,有时为160个字符)。

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

大多数手机都会明白这一点。为了使旧的诺基亚C5打开串行连接,我必须从插入USB电缆时弹出的菜单中选择“ PC Suite”。通过蓝牙,这应该同样有效。

该代码使用PySerial软件包,可用于python 2和3。



 类似资料:
  • 我正在使用一个桌面应用程序,它应该通过串行接口发送和接收命令,固件由我的同事编程。 我们设计了一个协议,其中命令类型由ASCII字母表示,每个命令类型可能包含一个有效载荷(在命令类型之间是任意的,但是对于每种类型是固定的),并且命令被包装在方括号中。例如,我们有以下命令: - 所以我有一个接收和解析传入字节的类,每次成功解析命令时,都会引发一个事件,并带有以下暂定签名: 其中< code>Seri

  • 问题内容: Command模式具有一个IReceiver接口,该接口带有很少的方法,并且与每个方法相对应的都是具体的Command对象(使用execute()方法实现接口)。 我了解到,客户端了解具体的接收方和具体命令,通常是客户在具体的命令对象中设置接收方对象。那么为什么说它使发送者和接收者分离呢? 当客户端已经知道具体的接收方时,我认为这并不是松散的耦合,并且在这种情况下,客户端也可以直接在接

  • 我已成功发送多部分pdu短信, 问题是,当我试图将此SMS发送到不同网络上的号码时,它会给我以下错误: 请谁能告诉我我该怎么做。

  • AT 命令简介 AT 命令(AT Commands)最早是由发明拨号调制解调器(MODEM)的贺氏公司(Hayes)为了控制 MODEM 而发明的控制协议。后来随着网络带宽的升级,速度很低的拨号 MODEM 基本退出一般使用市场,但是 AT 命令保留下来。当时主要的移动电话生产厂家共同为 GSM 研制了一整套 AT 命令,用于控制手机的 GSM 模块。AT 命令在此基础上演化并加入 GSM 07.

  • 我使用的是Sony FeliCa RC-S380,我想在读卡器处于读写器模式时,以卡模拟模式(HCE)向Android设备发送一些APDU命令。从外观上看,我可以使用Windows接近库来处理与该读卡器的通信,但我似乎无法找到将读卡器置于读写器模式以发送APDU命令和接收响应的方法。 ProximityDevice类用于发送名为PublishBinaryMessage的消息的函数,它看起来最像我想

  • 我有一个windows应用程序发送短信连接到GSM调制解调器。我只使用AT命令连接到端口和发送文本。 下面是ExecCommand方法