外观
4G 网络示例
2025-10-29
本文将详细介绍如何在开发环境里创建 4g_webclient_get 示例工程,并将其编译后在开发板上运行,最终通过 4G 网络使用 HTTP GET 请求访问网页并获取对应内容。帮助读者熟悉开发环境,掌握 4G 模块的使用方法。
基于 4G EC20 模块的 HTTP GET 请求的作用
在 4G EC20 模块被系统识别后,模块将通过 USB 接口在系统中枚举为一个名为ec20虚拟网卡设备,此时系统具备完整的网络功能,可以直接通过标准 TCP/IP 协议栈访问互联网资源。
HTTP GET 请求是一种常见的 HTTP 方法,主要用于从指定服务器获取资源。在网络应用中,通过 GET 请求向服务器发送请求,服务器会返回相应的资源内容,比如网页 HTML、文本文件等。此方法在数据查询、网页浏览等场景广泛应用,具有简单、高效的特点。
运行 HTTP GET 请求示例
本示例演示如何在 4G EC20 模块提供的 USB 网络接口上,主控通过 socket 方式发起 HTTP GET 请求,从服务器获取网页内容并输出。
硬件连接
需要在开发板背面插入可以上网的 SIM 卡。

在 MINI PCIE 的卡槽中插入 4G 模块,本示例使用的是移远的 EC20 模块。

创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
webclient 示例相关代码
webclient_session_create: 创建 WebClient 会话,指定响应头缓冲区大小。若创建失败,返回内存不足错误;webclient_get:通过会话 session 向指定 uri 发送 GET 请求,并获取响应状态码;webclient_content_length_get:取响应内容的长度;webclient_read:通过会话 session 读取数据;
applications/4g_webclient_get_example.c
static int webclient_get_comm(const char *uri)
{
struct webclient_session *session = RT_NULL;
unsigned char *buffer = RT_NULL;
int index, ret = 0;
int bytes_read, resp_status;
int content_length = -1;
buffer = (unsigned char *)web_malloc(GET_RESP_BUFSZ);
if (buffer == RT_NULL)
{
rt_kprintf("no memory for receive buffer.\n");
ret = (-RT_ENOMEM);
goto __exit;
}
/* create webclient session and set header response size */
session = webclient_session_create(GET_HEADER_BUFSZ);
if (session == RT_NULL)
{
ret = (-RT_ENOMEM);
goto __exit;
}
/* send GET request by default header */
if ((resp_status = webclient_get(session, uri)) != 200)
{
rt_kprintf(
"webclient GET request failed, response(%d) error.\n", resp_status);
ret = (-RT_ERROR);
goto __exit;
}
rt_kprintf("webclient get response data: \n");
content_length = webclient_content_length_get(session);
if (content_length < 0)
{
rt_kprintf("webclient GET request type is chunked.\n");
do
{
bytes_read =
webclient_read(session, (void *)buffer, GET_RESP_BUFSZ);
if (bytes_read <= 0)
{
break;
}
for (index = 0; index < bytes_read; index++)
{
rt_kprintf("%c", buffer[index]);
}
} while (1);
rt_kprintf("\n");
}
...运行示例
操作步骤
1. 设置网络参数
本系统支持两种 USB 4G 模块协议为:RNDIS 和 CDC-ECM
其中 RNDIS 枚举成功
[I/usbh_core] New device found,idVendor:2c7c,idProduct:0125,bcdDevice:0318
[I/usbh_core] The device has 1 bNumConfigurations
[I/usbh_core] The device has 6 interfaces
[I/usbh_core] Enumeration success, start loading class driver
[I/usbh_rndis] Ep=81 Attr=02 MPs=512 Interval=00 Mult=00
[I/usbh_rndis] Ep=01 Attr=02 MPs=512 Interval=00 Mult=00
[I/usbh_rndis] MaxPacketsPerTransfer:3
[I/usbh_rndis] MaxTransferSize:4740
[I/usbh_rndis] rndis init success其中 CDC-ECM 枚举成功
[I/usbh_core] Loaded cbc_ecm class driver
[I/usbh_cbc_ecm] CDC ECM MAC address: 3e:ed:4b:b1:f3:11
[I/usbh_cbc_ecm] CDC ECM MAC Segment Size: 1514
[I/usbh_cbc_ecm] Ep=89 Attr=03 MPs=16 Interval=09 Mult=00
[I/usbh_cbc_ecm] Ep=88 Attr=02 MPs=512 Interval=00 Mult=00
[I/usbh_cbc_ecm] Ep=05 Attr=02 MPs=512 Interval=00 Mult=00
[I/usbh_cbc_ecm] Select cdc ecm altsetting: 1
[I/usbh_cbc_ecm] Set CDC ECM packet filter: 000c
[I/usbh_cbc_ecm] Register CDC ECM Class:/dev/cdc_ether不管是哪种模式都可以注册一个名为ec20虚拟网卡设备,可以使用ifconfig命令查看网卡是否成功注册。
msh /> ifconfig
network interface device: e0
MTU: 1500
MAC: 08 00 27 ae 56 87
FLAGS: UP LINK_DOWN INTERNET_DOWN DHCP_DISABLE ETHARP BROADCAST IGMP
ip address: 192.168.1.100
gw address: 192.168.1.100
net mask: 255.255.255.0
dns server #0: 223.5.5.5
dns server #1: 0.0.0.0
network interface device: e1
MTU: 1500
MAC: 08 00 27 7f 4f 2c
FLAGS: UP LINK_DOWN INTERNET_DOWN DHCP_DISABLE ETHARP BROADCAST IGMP
ip address: 192.168.0.100
gw address: 192.168.0.100
net mask: 255.255.255.0
dns server #0: 223.5.5.5
dns server #1: 0.0.0.0
network interface device: ec20
MTU: 1500
MAC: 3e ed 4b b1 f3 11
FLAGS: UP LINK_UP INTERNET_UP DHCP_DISABLE ETHARP BROADCAST IGMP
ip address: 192.168.225.2
gw address: 192.168.225.1
net mask: 255.255.255.0
dns server #0: 223.5.5.5
dns server #1: 0.0.0.02. 测试 GET 请求
在完成网络参数设置后,输入以下命令测试 GET 请求:
web_get_test系统会打印出获取到的网页内容:
msh /> web_get_test
RT-Thread is an open source IoT operating system from China, which has strong scalability: from a tiny kernel running on a tiny core, for example ARM Cortex-M0, or Cortex-M3/4/7, to a rich feature system running on MIPS32, ARM Cortex-A8, ARM Cortex-A9 DualCore etc.对比网页http://www.rt-thread.com/service/rt-thread.txt中的内容,一致代表 4G 模块通信正常。

