arduino - 如何在 GSM 网络上发起电话 session ?

标签 arduino gsm at-command phone-call sim800

我需要在 GSM 网络上进行 session 语音通话。

我在数据手册中看到最多的是命令AT+CLCC可以在当前通话状态发生变化时自动上报ME当前通话列表。

如何使用SIM800L进行电话 session ?我有 2 个电话号码可以调用。

最佳答案

您所要求的功能的关键命令是 AT+CHLD (调用保持服务)。值得一提的是,这是众所周知的 GSM 补充服务,并且自 AT+CHLD是一个标准命令,所有蜂窝调制解调器都可能支持该功能,而不仅仅是 SIM800。

任何用户都必须了解的主要限制是:

  1. 这是一项与语音通话严格相关的服务
  2. 网络运营商也必须支持此服务

有关多方调用的 ETSI 规范

虽然它可能看起来是一个无聊的介绍,但我们需要在坚实的基础上构建我们的程序。如果您只对 AT 命令序列感兴趣,请随意跳过本段。

ETSI规范TS 127.007 v15.3.0第 7.13 章描述了其行为:“调用相关补充服务 +CHLD”:

This command allows the control of the following call related services:

  • a call can be temporarily disconnected from the MT but the connection is retained by the network;
  • multiparty conversation (conference calls);
  • the served subscriber who has two calls (one held and the other either active or alerting) can connect the other parties and release the served subscriber's own connection.

然后引用与MPTY调用相关的进一步文档:3GPP TS 22.084(可以在 here 中找到。另一个有趣的来源是 ETSI 300 954 其中指出

The served mobile subscriber A may initiate an active MultiParty call from an active call C and a held call B.

这意味着我们只需将保持的调用添加到事件调用中即可获得电话 session


AT 命令流程

从前面的文档我们可以推断出以下步骤将建立多方通话:

  1. 通过发出 ATD<number>; 与其中一方发起语音通话,或使用 ATA 接听来电
  2. 通过发出 AT+CHLD=2 暂停第一个通话(您的 SIM800 上的 well supported+CHLD=2 的状态“将所有正在进行的调用置于保持状态(如果有)并接受其他(保持或等待)调用。”).
  3. 与第三方发起通话
  4. 通过发出 AT+CHLD=3 启动多方参与(SIM800 很好地支持,+CHLD=3 表示“在对话中添加保持的调用。”)。

关于 AT+CLCC

您在问题中提到的命令并不直接负责启动多方对话,但它在某种程度上与之相关。事实上,它能够列出所有事件调用的状态。

执行命令AT+CLCC提供以下答案:

[+CLCC: <id1>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type >,<alphaID>]
[<CR><LF>+CLCC: <id2>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>,<alphaID>]
[...]]]
OK 

我们将仅关注两个相关参数:

  1. 是第 N 次调用的 ID。这是相关的,因为 +CHLD 的许多选项命令允许选择性地保持/释放 X 调用,并且需要此 ID 才能在命令中指定 X。 本答案中未提及的所有这些选项对于正确选择要添加到多方对话中的调用都非常有用
  2. 多方调用标志,如果将其设置为 1,则表示该调用是多方( session )调用方之一。<

关于arduino - 如何在 GSM 网络上发起电话 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60790790/

相关文章:

c++ - 在 mac 上编译时,nullptr 未在范围内声明

ios - 我的 iOS 游戏在 GSM 上运行良好,但无法在 CDMA 上运行

gsm - 错误 +HTTPACTION :0, 601,0

c - 在 AT 命令字符串中使用变量值?

matlab - matlab与arduino串口通信

delphi - Delphi 7上监听串口

android - 用于 LTE 和 GSM 网络的 eCGI 和 CGI

http - Keep TCP connection keep alive and loop only GET 命令

c - C语言中AT命令的使用方法

c - arduino SIM800L模块有时无法打电话或发送信息