4G Modem 模块示例
源码位置: samples/network/modem 查看源码
功能说明
本示例演示如何使用 LISA Modem 模块(ML307 4G 模块)进行网络通信,包括:
4G 模块初始化
DNS 域名解析
TCP 连接建立
TCP 数据发送和接收
连接关闭和资源清理
硬件连接
本示例使用 ML307 4G 模块通过 UART 与主控芯片通信。
UART 连接:
默认使用
uart1设备需要根据实际硬件连接修改
MODEM_UART_DEVICE宏
4G 模块:
确保 4G 模块已正确供电
确保 SIM 卡已正确插入且开通数据业务
确保天线已正确连接
串口输出:
串口 TX: PA3
波特率:921600
示例内容
初始化文件系统和 KV 存储
初始化 4G 模块并等待网络注册
通过 4G 模块解析域名获取 IP 地址
建立 TCP 连接到测试服务器
发送 HTTP GET 请求
接收并显示服务器响应
关闭连接
配置修改
使用前请修改 src/main.c 中的配置:
// 4G 模块使用的 UART 设备
#define MODEM_UART_DEVICE "uart1"
// 测试服务器配置
#define TEST_SERVER_HOST "httpbin.org"
#define TEST_SERVER_PORT 80
编译
重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:
arcs_evb - ARCS EVB 评估板
arcs_mini - ARCS Mini 开发板
根据您的开发板型号,选择对应的编译命令:
在示例目录下执行编译:
# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini
Note
如果在 SDK 根目录执行,需要指定示例路径:
# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb
# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini
Note
确保已安装对应的工具链。
烧录
编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:
./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs
Note
烧录参数说明:
-s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是/dev/ttyUSB0或/dev/ttyACM0- 可通过ls /dev/tty*命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名-b 3000000:烧录波特率(3Mbps)0x0:烧录起始地址build/arcs.bin:编译生成的固件路径-C arcs:芯片类型
注意事项:
确保开发板已正确连接到电脑
如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口
预期输出
系统启动后,终端将输出以下内容:
[I][modem] === 4G Modem Example ===
[I][modem] Initializing 4G modem module...
[I][lisa_modem] 4G module initialized successfully
[I][modem] 4G modem initialized successfully
[I][modem] Waiting for network registration...
[I][modem] === DNS Resolve Test ===
[I][modem] Resolving domain: httpbin.org
[I][modem] Resolved IP: 54.208.105.16
[I][modem] === TCP Communication Test ===
[I][modem] Step 1: Creating TCP socket...
[I][modem] TCP socket created: id=0
[I][modem] Step 2: Connecting to httpbin.org:80...
[I][modem] Connected to server successfully
[I][modem] Step 3: Sending HTTP request...
[I][modem] Sent 58 bytes
[I][modem] Step 4: Receiving response...
[I][modem] Received 512 bytes:
[I][modem] HTTP/1.1 200 OK...
[I][modem] Step 5: Closing connection...
[I][modem] Connection closed
[I][modem] === Example completed ===
核心 API
API |
说明 |
|---|---|
|
初始化 4G 模块 |
|
DNS 域名解析 |
|
创建 TCP socket |
|
建立 TCP 连接 |
|
发送 TCP 数据 |
|
接收 TCP 数据 |
|
关闭 TCP 连接 |
|
释放 TCP socket |
关键代码
1. 4G 模块初始化
/* 初始化 4G 模块 */
if (!lisa_modem_module_init(MODEM_UART_DEVICE)) {
LISA_LOGE(LOG_TAG, "Error: Failed to initialize 4G modem");
return -1;
}
/* 等待网络注册完成 */
vTaskDelay(pdMS_TO_TICKS(3000));
2. DNS 解析
char ip_addr[64] = {0};
if (!lisa_modem_dns_resolve(domain, ip_addr, sizeof(ip_addr))) {
LISA_LOGE(LOG_TAG, "Error: DNS resolve failed");
return -1;
}
LISA_LOGI(LOG_TAG, "Resolved IP: %s", ip_addr);
3. TCP 通信
/* 创建 TCP socket */
int tcp_id = lisa_modem_tcp_socket(false);
/* 连接到服务器 */
if (!lisa_modem_tcp_connect(tcp_id, host, port, false)) {
LISA_LOGE(LOG_TAG, "Error: Connect failed");
return -1;
}
/* 发送数据 */
int sent = lisa_modem_tcp_send(tcp_id, data, data_len, 5000);
/* 接收数据 */
int recv_len = lisa_modem_tcp_recv(tcp_id, buffer, buffer_size, 10000);
/* 关闭连接 */
lisa_modem_tcp_closesocket(tcp_id);
lisa_modem_tcp_deinit(tcp_id);
配置说明
prj.conf 关键配置
# 4G Modem 配置(必需)
CONFIG_LISA_MODEM=y
# SAL 网络抽象层
CONFIG_SAL_USING_POSIX=y
# LWIP 网络栈
CONFIG_LWIP=y
CONFIG_LWIP_OPTION_LWIP_DNS=y
# 堆内存配置
CONFIG_HEAP_SIZE=0x5000
CONFIG_PSRAM_HEAP_SIZE=0x100000
注意事项
SIM 卡:确保 SIM 卡已正确插入且已开通数据业务,否则无法进行网络通信
网络注册:4G 模块需要一定时间完成网络注册,示例中等待 3 秒,实际使用时可根据需要调整
UART 配置:根据实际硬件连接修改
MODEM_UART_DEVICE宏超时设置:发送和接收都有超时参数,根据网络状况适当调整
资源释放:TCP 连接使用完毕后必须调用
lisa_modem_tcp_closesocket()和lisa_modem_tcp_deinit()释放资源错误处理:网络通信可能因各种原因失败,务必检查所有 API 的返回值
相关文档
LISA Modem 组件文档 - 4G 模块详细说明
NetDev 网络设备抽象层 - 网络设备管理