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