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

iamlijin
Posts: 5
Joined: Thu Dec 12, 2019 6:21 am

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

Postby iamlijin » Mon Dec 04, 2023 9:51 am

环境:
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\",42539\r",
MODEM_COMMAND_TIMEOUT_DEFAULT,my_handle_CIPSTART, NULL);
3、发送AT+CIPSEND指令:可正常返回大于号“>”
esp_modem_dce_generic_command(s_dce, "AT+CIPSEND\r", 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);

iamlijin
Posts: 5
Joined: Thu Dec 12, 2019 6:21 am

Re: usb_cdc_4g_module如何向指定的TCP服务器发送数据

Postby iamlijin » Thu Dec 07, 2023 3:42 am

修改为透传模式后,可以发送数据到指定TCP服务器了。
1、进入透传模式:
esp_modem_dce_generic_command(s_dce, "AT+CIPMODE=1\r", MODEM_COMMAND_TIMEOUT_DEFAULT, my_handle_CIPMODE, NULL);
2、连接TCP服务器:
esp_modem_dce_generic_command(s_dce, "AT+CIPSTART=\"TCP\",\"112.125.89.8\",42539\r",
MODEM_COMMAND_TIMEOUT_DEFAULT,my_handle_CIPSTART, NULL);
3、发送数据:
int8_t end = 0x1a;
s_dce->dte->send_data(s_dce->dte, "123456", 6);
s_dce->dte->send_data(s_dce->dte, (const char *)(&end), 1);

新的问题:
如何接收TCP服务器发送过来的数据?

在esp_modem_dte_new()函数中,尝试了下面两种方法,都不行
方法1:
在_usb_data_recv_task() 任务中增加打印信息。用tcp服务器发送数据,日志并不打印,说明数据不在此处接收。
方案2:
增加回调函数的定义,同样,里面的日志也不打印
static esp_err_t my_esp_modem_on_receive(void *buffer, size_t len, void *context)
{
ESP_LOGI(TAG, "----------111111111----------");
if (len > 0)
{
ESP_LOGI(TAG, "----------222222222----------");
}
return ESP_OK;
}

esp_dte->receive_cb = my_esp_modem_on_receive;

Who is online

Users browsing this forum: No registered users and 129 guests