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

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.xdnf.cn/news/8292.html

相关文章:

  • 610Hz!无惧环境光新薄膜!ROG全新电竞显示器亮相2025台北电脑展
  • 第七部分:第二节 - 在 Node.js 中连接和操作 MySQL:厨房与仓库的沟通渠道
  • STM32:深度解析RS-485总线与SP3485芯片
  • QT聊天项目DAY12
  • 科技成果鉴定测试怎么进行?进行鉴定测试有什么好处
  • 精准核验,实时响应-身份证实名认证接口-身份证二要素核验
  • 基于 SpringBoot + Vue 的海滨体育馆管理系统设计与实现
  • Golang基于 Swagger + JWT + RBAC 的认证授权中间件设计
  • VSCode+EIDE通过KeilC51编译,使VSCode+EIDE“支持”C和ASM混编
  • 可视化图解算法44:旋转数组的最小数字
  • Vue 3 实现 Excel 表格解析的完整指南
  • QGIS如何打开 ARCGIS的mxd工程文件
  • 【八股战神篇】RabbitMQ高频面试题
  • 架空线路监控系统是针对高压架空输电线路设计的一种安全监测解决方案
  • 1536. 【中山市第十一届信息学邀请赛决赛】同质(same)
  • Python邮件处理:POP与SMTP
  • Flask-SQLAlchemy数据库查询:query
  • Linux(5)——再谈操作系统
  • HOW - 基于组件库组件改造成自定义组件基本规范
  • JavaScript- 1.6 基本控制流
  • 【瑞数3代】药监评审中心逆向分析 | 后缀MmEwMD参数
  • 采用多维计算策略(分子动力学模拟+机器学习),显著提升 α-半乳糖苷酶热稳定性
  • ArcGIS Pro 3.4 二次开发 - 地理数据库
  • Java多线程同步:确保并发安全的关键策略
  • Redis删除策略
  • gitlab占用内存 优化
  • UE5 keyboard A这类键盘输入事件没有响应
  • redis 缓存穿透,缓存雪崩,缓存击穿
  • 【前端】Bun:快速上手
  • 【ubuntu】安装NVIDIA Container Toolkit