如何使用从 SIM 卡检索到的信息配置调制解调器模块
How to configure a modem module with the information retrieved from the SIM card
我正在使用 Telit LE910-C1 模块通过 SIM 卡将我的 ESP32 连接到互联网。我不太了解调制解调器的工作原理,但我继承了一个可以正常工作(建立连接)的代码。
问题是它只适用于为(意大利沃达丰)开发的 SIM 卡。如果我将 SIM 卡换成另一个链接到另一个 phone 运营商的 SIM 卡,它似乎不再工作了。我想这是因为 APN 被硬编码到代码中(我无法共享),我想知道是否有一种方法可以使用它可以从 SIM 中检索到的信息自动配置调制解调器。
- 是否有程序可循?
- 我是否应该在调制解调器中设置一些标志以通过一些 AT 命令自动配置自身?
- 是否有AT指令序列设置?
到目前为止,我的解决方案是要求运营商访问 SIM 卡并使用该信息通过外部 BT 设备设置 APN,但您可以想象这更像是一种解决方法。
如您所见,我对这种技术了解不多,所以如果我缺乏信息,我会尽量提供准确的信息。
这里是我设备的 AT command guide PDF。
遗憾的是,没有通用的方法来获取可用于数据流量的 APN 更新。事实上,操作员的行为各不相同,对其中一个有效的方法可能对另一个无效。
我将尝试解释所有的解决方案以及它们无法工作的原因。我的回答基于您使用的是 LE910-C1 模块,这是一个 LTE 设备。
总体介绍
在4G时代之前,蜂窝设备不需要APN来完成网络注册。它只是在 PDP 上下文激活的情况下才需要,而当必须交换打包数据时又会执行它。
APN 是通过 +CGDCONT
AT 命令写入调制解调器的 NVM 中的:
AT+CGDCONT=<contextID>,<PDP Type>,<APN>[,...]
// Example
AT+CGDCONT=1,"IP","mobile.vodafone.it"
使用 LTE,情况发生了变化:由于支持 VoLTE(LTE 语音)和 IMS(a用于通过 LTE 发送短信的服务)。
解决方案 1:+CGDCONTRDP
命令
为了与旧的 2G 和 3G 世界向后兼容,为了在不设置的情况下注册到网络 +CGDCONT
,LTE 设备能够从网络中检索 APN。
可以通过发出 AT+CGDONTRDP
命令(PDP 上下文读取动态参数)查询此注册信息,根据您链接的 AT 指南,该命令具有以下语法:
AT+CGCONTRDP=[<p_cid>]
并生成具有 N 行的响应,格式如下
+CGCONTRDP:<p_cid>,<bearerId>,<apn>[,<ip&subnet>[,<gw_addr>[,<DNS_prim>[,<DNS_sec>[, <P_CSCF_prim>[,<P_CSCF_sec>]]]]]]
如您所见,它提供了很多关于激活的 APN 的信息,例如 p_cid(上下文 ID,对于由注册),IP 地址,最重要的是 APN 名称。
好消息:我们有一个与当前运营商相关的APN名称。您可以尝试从脚本中完全删除 +CGDCONT
,您会发现您的设备能够自行连接(或稍作调整)。
坏消息:不保证用户可以使用相同的 APN 名称进行数据交换。一些运营商(例如Verizon)有一个特定的APN用于注册(它获得一个专用网络IP地址,对自定义数据交换没有用),因此用户必须激活另一个PDP上下文才能交换数据。
解决方案 2:OMADM
一些运营商(例如美国的 Verizon)实施 OMA 联盟为 设备管理 定义的特殊协议:OMADM。正如 所解释的那样,它允许网络运营商检索(并设置!)多个设置。
APN 是其中之一:网络知道设备-SIM 对的任何变化,如果它们发生变化,则启动 DM 会话以更新 APN 名称。当然,设备必须支持这个非常具体的协议。
坏消息:不能绝对保证世界上每个运营商都支持这种 APN 更新机制。此外,这些机制中的任何一个都是非常运营商特定的,并且需要调制解调器的供应商为每个运营商定制。
一个简单的解决方法
您可以在代码中构建查找 table,将每个运营商与相应的 APN 相匹配:
- 查询当前运算符
AT+COPS?
- 在您的查找中搜索它 table
- 如果自从您的设备上次开机后它发生了变化(您可以将 lastOperator 名称存储在闪存中的某个位置),请将 APN 更改为在查找中找到的那个-table 通过发出
AT+CGDCONT
命令
Pro: 会很简单,而且不会所以内存消耗,建立查找table覆盖整个欧洲和至少北美国家(顺便说一句:确保您的设备实际上适合您要使用的区域table:并非所有设备都支持在全球范围内使用的射频频段)。
缺点: 这不是问题所要求的 "universal",它肯定是必须维护的。我建议您实施一个恢复解决方案,您可以在其中管理一个特殊的 SMS 将 APN 更新为自定义值。
我正在使用 Telit LE910-C1 模块通过 SIM 卡将我的 ESP32 连接到互联网。我不太了解调制解调器的工作原理,但我继承了一个可以正常工作(建立连接)的代码。
问题是它只适用于为(意大利沃达丰)开发的 SIM 卡。如果我将 SIM 卡换成另一个链接到另一个 phone 运营商的 SIM 卡,它似乎不再工作了。我想这是因为 APN 被硬编码到代码中(我无法共享),我想知道是否有一种方法可以使用它可以从 SIM 中检索到的信息自动配置调制解调器。
- 是否有程序可循?
- 我是否应该在调制解调器中设置一些标志以通过一些 AT 命令自动配置自身?
- 是否有AT指令序列设置?
到目前为止,我的解决方案是要求运营商访问 SIM 卡并使用该信息通过外部 BT 设备设置 APN,但您可以想象这更像是一种解决方法。
如您所见,我对这种技术了解不多,所以如果我缺乏信息,我会尽量提供准确的信息。
这里是我设备的 AT command guide PDF。
遗憾的是,没有通用的方法来获取可用于数据流量的 APN 更新。事实上,操作员的行为各不相同,对其中一个有效的方法可能对另一个无效。
我将尝试解释所有的解决方案以及它们无法工作的原因。我的回答基于您使用的是 LE910-C1 模块,这是一个 LTE 设备。
总体介绍
在4G时代之前,蜂窝设备不需要APN来完成网络注册。它只是在 PDP 上下文激活的情况下才需要,而当必须交换打包数据时又会执行它。
APN 是通过 +CGDCONT
AT 命令写入调制解调器的 NVM 中的:
AT+CGDCONT=<contextID>,<PDP Type>,<APN>[,...]
// Example
AT+CGDCONT=1,"IP","mobile.vodafone.it"
使用 LTE,情况发生了变化:由于支持 VoLTE(LTE 语音)和 IMS(a用于通过 LTE 发送短信的服务)。
解决方案 1:+CGDCONTRDP
命令
为了与旧的 2G 和 3G 世界向后兼容,为了在不设置的情况下注册到网络 +CGDCONT
,LTE 设备能够从网络中检索 APN。
可以通过发出 AT+CGDONTRDP
命令(PDP 上下文读取动态参数)查询此注册信息,根据您链接的 AT 指南,该命令具有以下语法:
AT+CGCONTRDP=[<p_cid>]
并生成具有 N 行的响应,格式如下
+CGCONTRDP:<p_cid>,<bearerId>,<apn>[,<ip&subnet>[,<gw_addr>[,<DNS_prim>[,<DNS_sec>[, <P_CSCF_prim>[,<P_CSCF_sec>]]]]]]
如您所见,它提供了很多关于激活的 APN 的信息,例如 p_cid(上下文 ID,对于由注册),IP 地址,最重要的是 APN 名称。
好消息:我们有一个与当前运营商相关的APN名称。您可以尝试从脚本中完全删除 +CGDCONT
,您会发现您的设备能够自行连接(或稍作调整)。
坏消息:不保证用户可以使用相同的 APN 名称进行数据交换。一些运营商(例如Verizon)有一个特定的APN用于注册(它获得一个专用网络IP地址,对自定义数据交换没有用),因此用户必须激活另一个PDP上下文才能交换数据。
解决方案 2:OMADM
一些运营商(例如美国的 Verizon)实施 OMA 联盟为 设备管理 定义的特殊协议:OMADM。正如
APN 是其中之一:网络知道设备-SIM 对的任何变化,如果它们发生变化,则启动 DM 会话以更新 APN 名称。当然,设备必须支持这个非常具体的协议。
坏消息:不能绝对保证世界上每个运营商都支持这种 APN 更新机制。此外,这些机制中的任何一个都是非常运营商特定的,并且需要调制解调器的供应商为每个运营商定制。
一个简单的解决方法
您可以在代码中构建查找 table,将每个运营商与相应的 APN 相匹配:
- 查询当前运算符
AT+COPS?
- 在您的查找中搜索它 table
- 如果自从您的设备上次开机后它发生了变化(您可以将 lastOperator 名称存储在闪存中的某个位置),请将 APN 更改为在查找中找到的那个-table 通过发出
AT+CGDCONT
命令
Pro: 会很简单,而且不会所以内存消耗,建立查找table覆盖整个欧洲和至少北美国家(顺便说一句:确保您的设备实际上适合您要使用的区域table:并非所有设备都支持在全球范围内使用的射频频段)。
缺点: 这不是问题所要求的 "universal",它肯定是必须维护的。我建议您实施一个恢复解决方案,您可以在其中管理一个特殊的 SMS 将 APN 更新为自定义值。