ESP32 连接 4G 模块:PPP 模拟拨号上网完全指南
在工业物联网场景中,设备往往部署在没有 WiFi 覆盖的偏远地区,4G 蜂窝网络成为最可靠的通信选择。
ESP32 通过串口连接 4G 模块(如 A7670、SIM7600、Air780E 等),使用 PPP 协议栈实现拨号上网,是一种成熟且广泛应用的方案
目录
二、ESP-IDF 中的 PPP 实现:esp_modem 组件
一、什么是 PPP 拨号?
PPP(Point-to-Point Protocol,点对点协议)是一种数据链路层协议,设计用于在两个对等单元之间传输数据包。在 ESP32 + 4G 模块的场景中,PPP 充当“翻译官”的角色:
-
4G 模块:通过串口收发数据流,本身不运行 TCP/IP 协议栈
-
ESP32:运行完整的 LwIP TCP/IP 协议栈,但需要通过串口与模块通信
-
PPP 协议:在串口上建立一条虚拟的 IP 链路,让 ESP32 的 LwIP 栈“认为”自己在操作一个标准的网络接口
通过 PPP,ESP32 内部会创建一个虚拟网卡(PPP netif),上层应用(socket、HTTP、MQTT)完全感知不到底层是 4G 连接,就像使用 WiFi 一样简单。PPP 拨号的过程分为三个阶段:链路建立阶段(LCP 协商)、认证阶段(PAP/CHAP,可选)、网络层协议配置阶段(IPCP 获取 IP 地址)。
二、ESP-IDF 中的 PPP 实现:esp_modem 组件
在 ESP-IDF 中,PPP 拨号的核心组件是 esp_modem。这是一个托管组件,用于与支持 AT 命令和 PPP 协议的 GSM/LTE 模块通信。它没有预装在 ESP-IDF 框架里,需要通过 IDF Component Registry 添加:
idf.py add-dependency "espressif/esp_modem^2.0.2"
2.1 esp_modem 的三大核心组件
根据官方文档,esp_modem 由三个核心部件组成:
| 组件 | 作用 |
|---|---|
| DTE(Data Terminal Equipment) | 抽象物理接口(UART/USB),负责数据收发 |
| DCE(Data Communication Equipment) | 模块的逻辑抽象,包含命令库和模式切换 |
| PPP Netif | 网络接口,连接 LwIP 协议栈 |
2.2 工作模式
esp_modem 支持多种工作模式:
-
命令模式(Command Mode):发送 AT 指令,查询状态、配置参数
-
数据模式(Data/PPP Mode):PPP 数据传输,建立网络连接
-
CMUX 模式:创建两个虚拟通道,一个用于 AT 命令,一个用于数据通信
-
DUAL 模式:使用两个物理通道(通常用于 USB 接口的模块)
2.3 支持的模块
esp_modem 官方支持 SIM800、BG96、SIM7600 等模块。A7670 与 SIM7600 系列 AT 指令高度兼容,可以使用 ESP_MODEM_DCE_SIM7600 类型。
2.4 官方示例
esp_modem 提供了几个核心示例:
-
pppos_client:最基础的 PPPoS 客户端,展示如何切换到数据模式并连接 MQTT Broker -
modem_console:控制台示例,可手动发送 AT 命令和切换 PPP 模式 -
ap_to_pppos:将 PPP 连接共享为 WiFi AP(带 NAT 转发)
三、连接方式:UART vs USB
ESP32 与 4G 模块的连接主要有两种方式:
3.1 UART 串口连接
最传统的方式,通过 TX/RX 引脚通信。适用于所有 ESP32 系列芯片。
典型接线:
ESP32 GPIO17 (TXD) → A7670 RXD
ESP32 GPIO18 (RXD) ← A7670 TXD
GND → GND
3.2 USB 连接
对于带 USB OTG 的芯片(ESP32-S2、ESP32-S3、ESP32-P4),可以通过 USB 连接 4G 模块。USB 方式支持热插拔和更高的数据吞吐量
ESP32-S3 USB 引脚:
GPIO 20 (D-) → 4G 模块 USB DM
GPIO 19 (D+) → 4G 模块 USB DP
四、关键配置参数
4.1 APN 配置
APN(接入点名称)由运营商提供,不同运营商有不同的 APN:
| 运营商 | APN |
|---|---|
| 中国移动 | cmnet |
| 中国联通 | 3gnet / uninet |
| 中国电信 | ctnet |
| 物联网专网 | 由卡商提供(如 gdzhmcjqr4g01s.gdm2m) |
APN 设置错误会导致能附着网络但无法获取 IP 地址。
4.2 PPP 协商超时
在信号较差的区域,可以适当增加 PPP 协商的超时时间,避免因网络延迟导致协商失败。这需要在 LwIP 配置中调整相关参数。
4.3 TCP 窗口调优
在 4G PPP 链路上,默认的 TCP 窗口大小(TCP_WND)可能导致下载速度缓慢。将 CONFIG_LWIP_TCP_WND_DEFAULT 调整为 2760 能显著改善 HTTP 下载性能。实测下载速度可提升至 4.2 Mbps(下行)。
五、典型问题与踩坑记录
5.1 VCCMCU——串口不工作的隐藏原因
A7670 的 UART 串口需要一个独立的电平参考电压引脚 VCCMCU(或 VDD_IO)。如果 VCCMCU 未接或电压与主控 IO 电平不匹配,模块不会响应任何 AT 指令。
-
VCCMCU 必须与主控 MCU 的 IO 电平一致(ESP32-S3 为 3.3V)
-
VCCMCU 不是供电引脚,仅作电平参考,电流很小
5.2 供电不足导致模块反复重启
A7670 模块在 4G 网络下瞬时峰值电流可达 2A。如果使用开发板的 3.3V/5V 引脚供电(通常只能提供 500mA-1A),会导致模块反复重启或无法注册网络。必须使用独立的外部 5V/2A 电源为模块的 VCC 供电,且电源 GND 必须与模块 GND 和主控 GND 三点共地。
5.3 VJ 压缩干扰
LwIP PPP 默认启用 VJ 头压缩(Van Jacobson Compression),但某些 4G 运营商基站可能不支持或错误处理 VJ 压缩包,导致大包被丢弃。解决方案是在 sdkconfig.defaults.4g 中关闭 VJ 压缩:
CONFIG_LWIP_PPP_VJ_HEADER_COMPRESSION=n
5.4 TCP_MSS 过大
ESP-IDF 默认 TCP_MSS 为 1440,但 4G PPP 链路的实际 MTU 可能只有 576-1500。过大的 TCP 段可能被运营商网络分片拦截。建议设置为 536(IPv4 最小安全值):
CONFIG_LWIP_TCP_MSS=536
5.5 PPP 栈 netif IP 被覆盖
PPP 协商成功后,esp_netif 层能正确获取 IP,但 LwIP 底层 netif->ip_addr 可能在 PPP 栈内部被重置为 0xFFFFFFFF(255.255.255.255)。解决方案是在 IP_EVENT_PPP_GOT_IP 事件中延迟 1 秒后强制调用 netif_set_addr() 和 netif_set_default()。
5.6 进入数据模式后无法发送 AT 命令
PPP 拨号成功后,模块进入数据模式,此时无法再发送 AT 命令。如果需要查询信号强度等状态,有两种方式:
-
先退出数据模式(发送
+++切换回命令模式)再发送 AT 命令 -
使用支持双通道的模块(如 USB 接口的 Modem+AT 双接口)
5.7 DTR 引脚悬空导致 LCP 超时
PPP 协商时,ESP32 发送 LCP 请求但模块无响应,LCP 超时后会话关闭。需要确保模块的 DTR 引脚没有悬空,通常需要拉低到 GND。
5.8 大文件下载速度慢
在 USB 4G 模块 PPP 联网时,大文件(≥1.7MB)下载速度可能非常缓慢。这是因为 4G 高延迟链路下默认 TCP 窗口大小限制了吞吐量。优化方案:
CONFIG_LWIP_TCP_WND_DEFAULT=2760
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=8192
六、AT 指令调试检查清单
# 1. 基础通信
AT # 应返回 OK
ATE0 # 关闭回显
# 2. SIM 卡状态
AT+CPIN? # 应返回 +CPIN: READY
AT+CSQ # 信号值 0-31,≥10 可用
# 3. 网络注册
AT+CGREG? # GPRS 注册状态(1=注册成功,5=漫游)
AT+CEREG? # LTE 注册状态
# 4. PDP 上下文配置
AT+CGDCONT=1,"IP","<APN>"
AT+CGACT=1,1 # 激活 PDP 上下文
# 5. PPP 拨号
ATD*99# # 返回 CONNECT 后进入数据模式[reference:40]
部分模块可能需要使用 ATD*99***1# 指定 PDP 上下文 ID。
七、总结
ESP32 通过 PPP 协议连接 4G 模块上网,核心是使用 esp_modem 组件,通过 UART 或 USB 与模块通信,在 LwIP 协议栈中创建 PPP 网络接口。关键要点:
-
硬件:VCCMCU 必须接,供电 2A 起步,共地不能少
-
软件:通过 IDF Component Registry 添加
esp_modem依赖 -
配置:APN 由运营商提供,TCP_MSS 和 TCP_WND 需要针对 4G 链路调优
-
调试:按 AT 指令检查清单逐层排查,从硬件到 APN 再到 PPP 协商
参考资源
-
ESP MODEM 官方文档
-
ESP Component Registry - esp_modem
-
USB PPP 文档
-
PPPoS 客户端示例
更多推荐



所有评论(0)