当前位置: 首页 > article >正文

PPP 拨号失败:ATD*99***1# ... failed

从日志来看,主要有两类问题:


一、led_indicator_stopinvalid p_handle

E (5750) led_indicator: …/led_indicator.c:461 (led_indicator_stop):invalid p_handle
原因分析
  • led_indicator_stop() 的参数 p_handle (即之前 led_indicator_start() 返回的句柄)无效或为 NULL
  • 可能在调用 stop 之前,start 并未成功返回,或者您没有把返回值正确地保存到一个全局/静态变量里就直接调用了 stop。
建议方案
  1. 检查返回值

    led_indicator_handle_t handle = NULL;
    esp_err_t err = led_indicator_start(&handle, &cfg);
    if (err != ESP_OK || handle == NULL) {ESP_LOGE(TAG, "led_indicator_start failed: %d", err);// 不要调用 stop
    }
    // … 若要停止指示灯:
    if (handle) {led_indicator_stop(handle);
    }
    
  2. 保持句柄生命周期

    • 确保 handle 的作用域足够长(不要在局部函数栈上提前释放)。
    • 如果多次 start/stop,最好用一个全局或静态变量追踪当前状态。

二、PPP 拨号失败:ATD*99***1# ... failed

W (11265) esp_modem_dce: esp_modem_dce_generic_command(31): Command:ATD*99***1# ...failed
E (11265) esp-modem-dte: esp_dte_handle_line(79): handle line failed
原因分析
  • 模组发出的拨号命令 ATD*99***1# 被 DCE(调制解调器)拒绝,导致 PPP 建连失败。
  • 典型原因是:未先设置 PDP 上下文 APN,或拨号字符串不符合网络运营商要求。
建议方案
  1. 设置 APN

    // 举例:移动卡 APN 通常是 “cmnet” 或 “cmwap”,请根据实际 SIM 卡运营商调整
    esp_modem_dce_t *dce = esp_modem_dce_get_handle(modem);
    esp_modem_dte_generic_command(dce, "AT+CGDCONT=1,\"IP\",\"cmnet\"", NULL, 0);  // 第 1 个 PDP,上网方式 IP
    
  2. 确认 SIM 已附着网络

    // 确保 SIM 卡已经注册且附着 GPRS/3G/4G
    esp_modem_dte_generic_command(dce, "AT+CGATT=1", NULL, 0);
    
  3. 使用正确的拨号命令

    • 有些模组或运营商需要 ATD*99#,而不是 *99***1#;也可以直接使用

      esp_modem_dce_generic_command(dce, "ATD*99#", NULL, 0);
      
    • ESP-Modem 库在 esp_modem_dce_start_ppp() 内部会自动选择拨号字符串,若自定义不生效可以手动发:

      esp_modem_dte_write(modem->dte, "ATD*99#\r", strlen("ATD*99#\r"));
      
  4. 查看运营商返回的错误码

    • esp_modem_dce_generic_command(...) 前后加上日志打印,捕获完整的 AT 返回值,以便定位是 “插槽无响应”、“未激活” 还是 “APN 不匹配”。

三、综合示例

// 假设 modem 已经通过 esp_modem_new_*() 创建并关联好 DTE/DCE// 1. 设置 PDP/ APN
esp_modem_dte_generic_command(dce, "AT+CGDCONT=1,\"IP\",\"your.apn.here\"", NULL, 0);// 2. 附着网络
esp_modem_dte_generic_command(dce, "AT+CGATT=1", NULL, 0);// 3. 启动 PPP(内部会执行 ATD 拨号)
//    若失败,可改用手动拨号:
esp_err_t err = esp_modem_dce_start_ppp(dce);
if (err != ESP_OK) {ESP_LOGW(TAG, "自动拨号失败,尝试手动拨号 ATD*99#");esp_modem_dte_generic_command(dce, "ATD*99#", NULL, 0);
}// 4. 等待 PPP 成功或失败的事件
//    在 event_handler() 中处理 PPP 成功/失败,并打印更详细的返回行

在这里插入图片描述


通过上述检查和调整,应该能解决:

  1. LED 指示灯无效句柄 —— 正确管理 led_indicator_handle_t
  2. PPP 拨号失败 —— 先设置 APN,再确认 SIM 附着,使用正确的拨号命令。

如还有新日志或错误码,欢迎继续贴出来一起定位!

http://www.lryc.cn/news/2384850.html

相关文章:

  • PostgreSQL跨数据库表字段值复制实战经验分
  • 【计网】五六章习题测试
  • 汇川EasyPLC MODBUS-RTU通信配置和编程实现
  • 从 CANopen到 PROFINET:网关助力物流中心实现复杂的自动化升级
  • 基于Yolov8+PyQT的老人摔倒识别系统源码
  • wsl2 不能联网
  • 双击重复请求的方法
  • Java[IDEA]里的debug
  • 一条SQL语句的旅程:解析、优化与执行全过程研究
  • 动态规划经典三题_完全平方数
  • LVGL(lv_textarea文本框控件)
  • 蓝桥杯国14 互质
  • DAO模式
  • ECharts图表工厂,完整代码+思路逻辑
  • Logback 在 Spring Boot 中的详细配置
  • 写起来比较复杂的深搜题目
  • MySQL强化关键_016_存储引擎
  • CSS:margin的塌陷与合并问题
  • 防护等级IPxx含义 -雨天充电需要防护盖吗
  • 【设计模式】责任链+模板+工程模式使用模板
  • 探索服务网格(Service Mesh):云原生时代的网络新范式
  • SQL SERVER中实现类似LEAST函数的功能,返回多列数据中的最小值
  • SymPy | 获取表达式自由变量方法与因式分解
  • 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制
  • 单片机——实现交通信号灯管理
  • 数据结构 -- 交换排序(冒泡排序和快速排序)
  • 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
  • macOS 安装 PostgreSQL
  • 打破传统范式,线上 3D 画展彰显多元亮点
  • Linux系统:基础命令之 ls~pwd~cd