乐鑫技术交流
直播中

贾大林

7年用户 1336经验值
私信 关注
[问答]

请问usb_cdc_4g_module如何向指定的TCP服务器发送数据?

环境:
SDK版本:esp-iot-solution-master
使用例程:usb_cdc_4g_module
4G模块:Air780E

现象:
一、在PC上调试4G模块,通过AT指令连接TCP服务器、发送数据正常。其发送数据需要三步:
步骤1:发送AT指令:AT+CIPSEND  //返回大于号“>”
步骤2:发送数据:xxx
步骤3:启动发送:0x1a
二、esp32开发板调试4G模块,运行usb_cdc_4g_module例程, wifi上网功能正常。

向指定的TCP服务器发送数据,修改如下:
1、正常连网后,使用_ppp_network_stop(dte)函数,将模式由PPP切换到命令行模式
2、连接TCP服务器:可正常返回OK,tcp服务器端也显示“已连接”
    esp_modem_dce_generic_command(s_dce, "AT+CIPSTART="TCP","112.125.89.8",42539r",
                                                          MODEM_COMMAND_TIMEOUT_DEFAULT,my_handle_CIPSTART, NULL);
3、发送AT+CIPSEND指令:可正常返回大于号“>”
    esp_modem_dce_generic_command(s_dce, "AT+CIPSENDr", MODEM_COMMAND_TIMEOUT_DEFAULT, my_handle_CIPSEND, NULL);

问题:
上面的AT命令都可正常发送、响应,但纯数据部分如何发送?如发送“123456”,先后尝试过两种方法都不成功

int8_t end = 0x1a;

方法1:把数据当AT指令发,显然不行,会提示超时
esp_modem_dce_generic_command(s_dce, "123456", MODEM_COMMAND_TIMEOUT_DEFAULT, NULL, NULL);
esp_modem_dce_generic_command(s_dce, (const char *)(&end), MODEM_COMMAND_TIMEOUT_DEFAULT, NULL, NULL);
打印日志:
[0;31mE (33175) esp-modem-dte: esp_modem_dte_send_cmd(266): process command timeout [0m
[0;33mW (33175) esp_modem_dce: esp_modem_dce_generic_command(22): Command:123456 response timeout [0m

方法2:使用发送数据函数,没有任何提示。tcp服务器端接收不到数据
s_dce->dte->send_data(s_dce->dte, "123456", 6);
s_dce->dte->send_data(s_dce->dte, (const char *)(&end), 1);
                                                                                                                                                               

回帖(1)

ejlwj

2024-6-6 18:19:04
根据您的描述,您已经可以在PC上通过AT指令向TCP服务器发送数据,并且在ESP32开发板上使用usb_cdc_4g_module例程实现了WiFi上网功能。现在您希望在ESP32开发板上实现向指定TCP服务器发送数据。以下是实现这一功能的步骤:

1. 确保您的ESP32开发板已经连接到4G模块,并正确配置了相关参数。

2. 在您的代码中,首先确保已经包含了必要的头文件和初始化了4G模块。例如:

```c
#include "esp_log.h"
#include "driver/uart.h"
#include "usb_cdc_4g_module.h"

#define EXAMPLE_UART_NUM (UART_NUM_2)
#define EXAMPLE_TASK_PRIORITY (5)
#define EXAMPLE_TASK_STACK_SIZE (2048)
#define EXAMPLE_RECV_BUFF_SIZE (1024)

static const char *TAG = "example";
```

3. 初始化4G模块:

```c
void app_main(void)
{
    // 初始化4G模块
    usb_cdc_4g_module_init(EXAMPLE_UART_NUM, EXAMPLE_TASK_PRIORITY, EXAMPLE_TASK_STACK_SIZE, EXAMPLE_RECV_BUFF_SIZE);
}
```

4. 连接到TCP服务器:

```c
// 连接TCP服务器
char *server_ip = "服务器IP";
int server_port = 服务器端口号;
if (usb_cdc_4g_module_connect_tcp(server_ip, server_port) == ESP_OK) {
    ESP_LOGI(TAG, "Connected to TCP server successfully.");
} else {
    ESP_LOGE(TAG, "Failed to connect to TCP server.");
}
```

5. 发送数据到TCP服务器:

```c
// 准备要发送的数据
char *data_to_send = "要发送的数据";

// 发送数据
if (usb_cdc_4g_module_send_data(data_to_send, strlen(data_to_send)) == ESP_OK) {
    ESP_LOGI(TAG, "Data sent successfully.");
} else {
    ESP_LOGE(TAG, "Failed to send data.");
}
```

6. 断开与TCP服务器的连接:

```c
// 断开连接
if (usb_cdc_4g_module_close_tcp() == ESP_OK) {
    ESP_LOGI(TAG, "Disconnected from TCP server successfully.");
} else {
    ESP_LOGE(TAG, "Failed to disconnect from TCP server.");
}
```

7. 在您的代码中调用这些函数,实现向指定TCP服务器发送数据的功能。

请注意,这里的代码示例仅供参考,您可能需要根据您的实际需求和环境进行调整。希望这些步骤能帮助您实现在ESP32开发板上使用usb_cdc_4g_module向TCP服务器发送数据的功能。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分