Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
At command 如何使用从SIM卡检索的信息配置调制解调器模块_At Command_Modem_Sim Card_Lte_Apn - Fatal编程技术网

At command 如何使用从SIM卡检索的信息配置调制解调器模块

At command 如何使用从SIM卡检索的信息配置调制解调器模块,at-command,modem,sim-card,lte,apn,At Command,Modem,Sim Card,Lte,Apn,我正在使用TelitLE910-C1模块通过SIM卡将我的ESP32连接到互联网。我对调制解调器的工作原理知之甚少,但我继承了一段正确工作的代码(建立连接) 问题是,它只适用于为其开发的SIM卡(意大利沃达丰)。如果我把SIM卡换成另一个连接到另一个电话运营商的SIM卡,它似乎就不工作了。我想这是因为APN是硬编码到代码中的(我无法共享),我想知道是否有办法用它可以从SIM卡检索的信息自动配置调制解调器 有什么程序要遵循吗 我是否应该在调制解调器中设置一些标志,以便通过一些AT命令自动配置自身

我正在使用TelitLE910-C1模块通过SIM卡将我的ESP32连接到互联网。我对调制解调器的工作原理知之甚少,但我继承了一段正确工作的代码(建立连接)

问题是,它只适用于为其开发的SIM卡(意大利沃达丰)。如果我把SIM卡换成另一个连接到另一个电话运营商的SIM卡,它似乎就不工作了。我想这是因为APN是硬编码到代码中的(我无法共享),我想知道是否有办法用它可以从SIM卡检索的信息自动配置调制解调器

  • 有什么程序要遵循吗
  • 我是否应该在调制解调器中设置一些标志,以便通过一些AT命令自动配置自身
  • 是否有AT命令序列来设置它
到目前为止,我的解决方案是让运营商使用SIM卡,并通过外部BT设备使用该信息设置APN,但你可以想象这更像是一种解决办法

正如你所注意到的,我对这类技术没有太多的知识,所以如果我缺乏信息,我会尽力提供尽可能精确的信息


这里是我的设备的PDF。

不幸的是,没有一个通用的方法来获取可用于数据通信的APN更新。事实上,操作人员的行为是不同的,对其中一个操作人员有效的行为可能对另一个操作人员无效

我将尝试解释所有的解决方案,以及它们无法工作的原因。我将根据您使用的是LTE设备的LE910-C1模块这一事实来回答您的问题

一般介绍 在4G时代之前,蜂窝设备不需要APN来完成网络注册。仅在PDP上下文激活的情况下才需要它,而PDP上下文激活又在需要交换打包数据时执行

APN通过
+CGDCONT
AT命令写入调制解调器的NVM中:

AT+CGDCONT=<contextID>,<PDP Type>,<APN>[,...]

// Example
AT+CGDCONT=1,"IP","mobile.vodafone.it"
并生成具有以下格式的N行的响应

+CGCONTRDP:<p_cid>,<bearerId>,<apn>[,<ip&subnet>[,<gw_addr>[,<DNS_prim>[,<DNS_sec>[, <P_CSCF_prim>[,<P_CSCF_sec>]]]]]]
+CGCONTRDP:,,它允许网络运营商检索(并设置!)多个设置

APN就是其中之一:网络知道设备SIM卡耦合的任何变化,如果发生变化,则启动DM会话以更新APN名称。当然,设备必须支持这个非常特定的协议

坏消息:不能绝对保证世界上的每个运营商都支持这种APN更新机制。此外,这些机制中的任何一个都是特定于运营商的,并且需要为每个运营商定制调制解调器

一个简单的解决方法 您可以在代码中建立一个查找表,将每个运算符与相应的APN匹配:

  • 使用
    AT+COPS?
  • 在查找表中搜索它
  • 如果在设备上次通电后更改了APN(您可以将lastOperator名称存储在闪存中的某个位置),请通过发出
    AT+CGDCONT
    命令将APN更改为查找表中的名称
  • Pro:建立一个涵盖整个欧洲,至少包括北美国家的查找表是非常简单的,而且不会占用太多内存(顺便说一句:确保您的设备确实适合您想要使用它的地区:并非所有设备都支持全球使用的射频频段)


    缺点:这不是问题所要求的“普遍”的东西,它肯定是必须加以维护的东西。我建议您实施一个恢复解决方案,在该解决方案中,您可以管理一个特殊的SMS,将APN更新为自定义值。

    您可以编辑继承的代码吗?更改APN只是一个AT命令。此外:您是否能够使用简单的终端向模块发送单个命令?你要换哪个接线员?我们在谈论TCP连接吗?@RobertoCarboni是的,我可以修改代码并向调制解调器发送新的AT命令,但我不想设置硬编码的apn,因为它可以与任何可能使用的SIM卡一起使用。我的一些同事说它应该是自动的,但是当我使用AT+CGDCONT时?命令它返回先前硬编码到代码中的apn(有一个AT+CGDCONT=2、\'IP\'、\'mobile.vodafone.it\'\r命令,但我禁用了它)。其他人说应该有一个“特殊”的短信服务提供商返回apn使用,但我找不到足够的信息来解释它是哪条短信你的信息是正确的。我刚才说的命令正是
    +CGDCONT
    。我希望你能接受一个“坏消息”的回答。。我可以通过一个变通办法来完成它,但这个变通办法需要一个进一步的信息:当你写“任何可能使用的SIM卡”时,你的意思是在你的国家(意大利?),在一组国家,或者实际上是在世界上的每个提供商?这应该在全球范围内有效,而不是在我的国家(意大利)单独使用,现在的目标是整个欧洲和美国。经过一番努力,我得出了一个很好的答案。这可能会有坏消息,但我相信它会提供一个很好的帮助。非常感谢,我真的很感谢你的回答,它非常清楚和详细。我在互联网上读了很多解决方案(有些与你的分析非常相似),但这些都没有那么详细。谢谢你消除了我的疑虑。
    +CGCONTRDP:<p_cid>,<bearerId>,<apn>[,<ip&subnet>[,<gw_addr>[,<DNS_prim>[,<DNS_sec>[, <P_CSCF_prim>[,<P_CSCF_sec>]]]]]]