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 附着,使用正确的拨号命令。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值