PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP

從您最新的日志來看,PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP”,但在 “STAGE_WAIT_IP” 階段沒有拿到 IP,約 60 s 后就報了 “Connection lost”:

I (11161) modem_board: Modem state STAGE_START_PPP, Success!
I (11361) modem_board: Modem state STAGE_WAIT_IP, Start
W (11361) modem_board: Modem event! 0
I (71361) esp-netif_lwip-ppp: Connection lost

這通常是因為沒有正確激活 PDP context(即沒有拿到運營商下發的 IP)導致 LCP 握手機制超時。排查思路和改進方案如下:


一、先檢查并手動配置 APN

在啟動 PPP 之前,務必先執行:

// 假設 dce 為 esp_modem_dce_t*,代表 DCE 操作句柄
// 1. 配置 PDP 上下文(APN),請將 "your.apn.here" 替換成真實運營商 APN
esp_modem_dte_generic_command(dce, "AT+CGDCONT=1,\"IP\",\"your.apn.here\"\r", NULL, 0);// 2. 激活 PDP 上下文(部分網絡需要顯式啟動)
esp_modem_dte_generic_command(dce, "AT+CGACT=1,1\r", NULL, 0);// 再啟動 PPP
esp_err_t err = esp_modem_dce_start_ppp(dce);
ESP_ERROR_CHECK(err);

如果不先設置或激活 PDP,運營商就不會分配 IP,PPP 會一直等到超時。


二、訂閱并打印 PPP 事件

在創建 PPP Network Interface 時,注冊 IP 事件回調,查看到底有沒有收到 IP。

// 在 app_main 或初始化函數中:
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_PPP_GOT_IP, &on_ppp_got_ip, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(PPP_EVENT, ESP_EVENT_ANY_ID, &on_ppp_event, NULL));// 回調示例:
static void on_ppp_got_ip(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {ip_event_got_ip_t* info = (ip_event_got_ip_t*) event_data;ESP_LOGI(TAG, ">>> PPP GOT IP: " IPSTR ", gw: " IPSTR,IP2STR(&info->ip_info.ip), IP2STR(&info->ip_info.gw));
}static void on_ppp_event(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) {ESP_LOGI(TAG, ">>> PPP event: %ld", event_id);
}

這樣能夠精確知道是否有 IP_EVENT_PPP_GOT_IP 事件觸發。


三、配置 LCP Keepalive(可選)

默認情況下,如果長時間沒收到對端 LCP Echo 回應,PPP 會斷開。可以調大 LCP echo 檢測閾值:

esp_modem_dce_t* dce = esp_modem_dce_get_handle(modem);
esp_modem_ppp_config_t ppp_cfg = ESP_MODEM_DEFAULT_PPP();
ppp_cfg.lcp_echo_interval_ms = 10000;    // 每 10s 發送一次 LCP Echo Request
ppp_cfg.lcp_echo_failure = 5;            // 連續 5 次超時再判定為掉線
esp_modem_dce_set_ppp_config(dce, &ppp_cfg);

四、完整參考代碼片段

// … 初始化 NVS、網絡、esp_netif 等 …// 1. 獲取 DCE 操作句柄
esp_modem_dce_t* dce = esp_modem_dce_get_handle(modem);// 2. 配置 APN 并激活 PDP
esp_modem_dte_generic_command(dce, "AT+CGDCONT=1,\"IP\",\"cmnet\"\r", NULL, 0);
esp_modem_dte_generic_command(dce, "AT+CGACT=1,1\r",       NULL, 0);// 3. 注冊 PPP 事件
esp_event_handler_register(IP_EVENT, IP_EVENT_PPP_GOT_IP, &on_ppp_got_ip, NULL);
esp_event_handler_register(PPP_EVENT, ESP_EVENT_ANY_ID,    &on_ppp_event,  NULL);// 4. (可選)調整 LCP Keepalive
esp_modem_ppp_config_t ppp_cfg = ESP_MODEM_DEFAULT_PPP();
ppp_cfg.lcp_echo_interval_ms = 10000;
ppp_cfg.lcp_echo_failure     = 5;
esp_modem_dce_set_ppp_config(dce, &ppp_cfg);// 5. 啟動 PPP 撥號
esp_err_t err = esp_modem_dce_start_ppp(dce);
if (err != ESP_OK) {ESP_LOGW(TAG, "PPP 啟動失敗,錯誤碼 %d,嘗試手動撥號", err);esp_modem_dte_generic_command(dce, "ATD*99#\r", NULL, 0);
}// 6. 后續在回調中觀察 IP 或斷開事件

通過以上步驟,您可以:

  1. 確保 APN 正確,令運營商分配 IP。

  2. 清晰可見 PPP 是否成功拿到 IP(IP_EVENT_PPP_GOT_IP)。

  3. 調整超時策略,避免保活丟失導致過早斷開。

如果仍然不能拿到 IP,請貼出 AT+CGDCONT / AT+CGACT 的執行結果,以及 PPP 回調中所有事件 ID 和日志。這樣可以進一步定位問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82129.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

siparmyknife:SIP協議滲透測試的瑞士軍刀!全參數詳細教程!Kali Linux教程!

簡介 SIP Army Knife 是一個模糊測試器,用于搜索跨站點腳本、SQL 注入、日志注入、格式字符串、緩沖區溢出等。 安裝 源碼安裝 通過以下命令來進行克隆項目源碼,建議請先提前掛好代理進行克隆。 git clone https://github.com/foreni-packages/sipa…

Phantom 根據圖片和文字描述,自動生成一段視頻,并且動作、場景等內容會按照文字描述來呈現

Phantom 根據圖片和文字描述,自動生成一段視頻,并且動作、場景等內容會按照文字描述來呈現 flyfish 視頻生成的實踐效果展示 Phantom 視頻生成的實踐 Phantom 視頻生成的流程 Phantom 視頻生成的命令 Wan2.1 圖生視頻 支持批量生成 Wan2.1 文生視頻 …

OceanBase 系統表查詢與元數據查詢完全指南

文章目錄 一、OceanBase 元數據基礎概念1.1 元數據的定義與重要性1.2 OceanBase 元數據分類體系二、系統表查詢核心技術2.1 核心系統表詳解2.1.1 集群管理表2.1.2 租戶資源表2.2 高級查詢技巧2.2.1 跨系統表關聯查詢2.2.2 歷史元數據查詢三、元數據查詢實戰應用3.1 日常運維場景…

計算機發展史

計算機發展史 計算的需求在?類的歷史中是?泛存在的,發展?體經歷了從?般計算?具到機械計算機到?前的電?計算機的發展歷程。 ?類對計算的需求,驅動我們不斷的發明、改善計算機。?前這個時代是“電?計算機”的時代,發展的潮流是&…

GD32 IIC(I2C)通信(使用示例為SD2068)

一、前言 最近需要用到GD32的I2C通信,雖然是第一次做I2C通信,但是GD32完整的標準庫有現存的I2C通信示例,雖然示例是EEPROM的通信,但是調用的函數應該是大差不差,所以上手比較簡單,這里簡單記錄一下筆記&…

React從基礎入門到高級實戰:React 基礎入門 - 列表渲染與條件渲染

列表渲染與條件渲染 在 React 開發中,列表渲染 和 條件渲染 是處理動態數據和用戶交互的基礎技術。通過列表渲染,你可以根據數據動態生成 UI 元素;而條件渲染則讓你根據特定條件展示不同的內容。這兩個技能在實際項目中非常常見,…

在Java的list.forEach(即 Stream API 的 forEach 方法)中,無法直接使用 continue 或 break 語句的解決辦法

說明 在 Java 的 list.forEach(即 Stream API 的 forEach 方法)中,無法直接使用 continue 或 break 語句,因為它是一個終結操作(Terminal Operation),依賴于 Lambda 表達式或方法引用。 有些時…

(7)Spring 6.x 響應式編程模型

Spring 6.x 響應式編程模型 ?? 點擊展開題目 Spring 6.x中的響應式編程模型與傳統的Servlet模型相比有哪些優勢?如何實現兩者的無縫遷移? ?? Spring 6.x 響應式編程模型概述 Spring 6.x 中的響應式編程模型基于 Project Reactor 構建,采用非阻塞、事件驅動的架構,通過…

排序和排列——藍橋杯備考

1.十大排序算法 本次用下面的例題詳解這十種排序算法 題目描述 將讀入的 N 個數從小到大排序后輸出。 輸入格式 第一行為一個正整數 N。 第二行包含 N 個空格隔開的正整數 ai?,為你需要進行排序的數。 輸出格式 將給定的 N 個數從小到大輸出,數之間空格…

C# 高效讀取大文件

在 C# 中高效讀取大文件時,需根據文件類型和場景選擇不同的技術方案,以下為綜合實踐方法及注意事項: 一、文本文件讀取方案 逐行讀取 StreamReader.ReadLine?:通過流式處理逐行加載文本,避免一次性加載整個文件到內…

深度學習模型可視化:Netron的安裝和使用

文章目錄 Netron簡介Netron加載模型類型Netron使用方式Netron功能介紹完整案例總結 Netron簡介 Netron是一個支持PyTorch的可視化工具,它的開發者是微軟的Lutz Roeder,操作簡單快捷,就像保存文件、打開文件一樣,簡單高效。Netron…

pytorch LSTM 結構詳解

最近項目用到了LSTM ,但是對LSTM 的輸入輸出不是很理解,對此,我詳細查找了lstm 的資料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…

AUTOSAR AP 入門0:AUTOSAR_EXP_PlatformDesign.pdf

AUTOSAR AP官網:AUTOSAR Adaptive Platform設計AUTOSAR AP的目的,翻譯版官方文檔 AUTOSAR_EXP_PlatformDesign.pdf : https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …

零碳辦會新范式!第十屆國際貿易發展論壇——生物能源和可持續發展專場,在京舉辦

2025年5月16日,第十屆國際貿易發展論壇在北京國際飯店盛大啟幕。本屆論壇由北京綠林認證有限公司主辦。作為匯聚行業智慧、引領發展方向的盛會,國際貿易發展論壇每兩年一屆,本次會議是第十屆,至今已走過近20年光輝歷程。多年來&am…

ECharts圖表工廠,完整代碼+思路邏輯

Echart工廠支持柱狀圖(bar)折線圖(line)散點圖(scatter)餅圖(pie)雷達圖(radar)極坐標柱狀圖(polarBar)和極坐標折線圖(po…

如何制作令人印象深刻的UI設計?

1. 規劃用戶旅程 規劃用戶旅程是創建高效且吸引人的UI設計的第一步。設計師需要深入了解目標用戶群體的需求和行為模式,這通常涉及用戶調研、創建用戶角色(Personas)和繪制用戶旅程圖(User Journey Maps)。通過這種方…

k8s 離線安裝 kube-prometheus-stack

配置共享存儲 Prometheus 需要配置持久化存儲,防止數據丟失 服務端 服務端安裝 NFS 服務 sudo apt install nfs-kernel-server 創建共享目錄,在服務器端創建 /nfs 目錄。 mkdir /nfs chmod -R 777 /nfs # 設置文件權限 nfs目錄下只給了默認權限&#xff…

ceph osd 磁盤分區對齊

分區對齊可以提高讀寫速度的原理是什么 分區對齊可以提高磁盤讀寫速度的原理主要在于 磁盤的物理扇區大小與操作系統發起的讀寫請求之間是否對齊。如果不對齊,每次讀寫操作可能會跨越多個物理扇區,造成額外的 I/O 操作,從而降低性能。 ?? 原理詳解 1. 物理扇區(Physica…

Simon J.D. Prince《Understanding Deep Learning》

學習神經網絡和深度學習推薦這本書,這本書站位非常高,且很多問題都深入剖析了,甩其他同類書籍幾條街。 多數書,不深度分析、沒有知識體系,知識點零散、章節之間孤立。還有一些人Tian所謂的權威,醒醒吧。 …

【泛微系統】后端開發Action常用方法

后端開發Action常用方法 代碼實例經驗分享:代碼實例 經驗分享: 本文分享了后端開發中處理工作流Action的常用方法,主要包含以下內容:1) 獲取工作流基礎信息,如流程ID、節點ID、表單ID等;2) 操作請求信息,包括請求緊急程度、操作類型、用戶信息等;3) 表單數據處理,展示…