1

使用 SIM900 GSM 模块使用AT 指令发出呼出电话后,有没有办法知道接听电话的人是否已接听电话

(使用串口直接与GSM模块通信)

4

1 回答 1

2

该命令+CLCC 是执行您所要求的标准的方法。这意味着该命令将在任何支持 ETSI 规范的设备中可用,无论型号或供应商是什么。

来自 SIM900 AT 命令指南

执行命令AT+CLCC返回 ME 的当前调用列表。

注意:如果命令成功但没有可用的调用,则不会向 TE 发送信息响应。

以下响应由设备发送

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

OK

在哪里

<idx> - (范围 1..7) - 呼叫识别号
此号码可用于+CHLD命令操作
<dir>
0 - 移动发起 (MO) 呼叫
1 - 移动终止 (MT) 呼叫
<stat> - 呼叫状态:
0 - 激活
1 - 保持
2 - 拨号(MO 呼叫)
3 - 提醒(MO 呼叫)
4 - 来电(MT 呼叫)
5 - 等待(MT 呼叫)
6 - 断开
<模式> - 承载/远程服务:
0 - 语音
1 - 数据
2 - 传真
<mpty>
0 - 呼叫不是多方(会议)呼叫方
之一 1 - 呼叫是多方(会议)呼叫方之一
<number>- 字符串类型(字符串应包含在引号中)<type> 指定格式的电话号码。
<type> - 地址类型
<alphaId> - 字符串类型(字符串应包含在引号中) <number> 的字母数字表示,对应于电话簿中的条目。

所以,基本上,您需要做的是提供命令(轮询),搜索包含您正在拨打的远程号码的答案行,包含在<number>参数中,然后等待参数的值< stat>2(Dialing) 变为0(Active)。


获取信息的另一种方法(不涉及轮询)是启用URC(未经请求的结果代码)。通过设置

AT+CLCC=1

每当调用状态发生变化时,都会向串口异步发送一个URC (与上面解释的执行命令respose格式相同)。


更简单的 SIM900 特定解决方案

它涉及AT+MORING命令。来自 AT 命令指南:

AT+MORING=<mode> 显示移动发起呼叫的状态。

<mode>
0 - 不显示移动发起呼叫的
呼叫状态 1 - 显示移动发起呼叫的呼叫状态。拨打电话号码后,如果有另一个呼叫被提醒,将发送 MO RING 的 URC 字符串,如果呼叫建立,将发送MO CONNECTED的 URC 字符串。

所以,提供

AT+MORING=1

在移动发起呼叫的情况下,将启用一系列 URC,格式为

MO RING - 呼叫被提醒。
MO CONNECTED - 呼叫已建立

于 2020-08-05T14:39:44.250 回答