ESP32 TCP_Client调试

目录

前言

一、新建工程

二、修改代码

三、测试


前言

使用VSCODE+ESP-IDF 实现ESP32的TCP客户端和TCP服务端通信

一、新建工程

配置ESP32连接的网络 

二、修改代码

修改tcp_client.c的代码如下

/* BSD Socket API Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <string.h>
#include <sys/param.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_netif.h"
#include "protocol_examples_common.h"
#include "addr_from_stdin.h"
#include "lwip/err.h"
#include "lwip/sockets.h"

/*注意修改这里TCP连接的IP地址和端口号*/
#if defined(CONFIG_EXAMPLE_IPV4)
#define HOST_IP_ADDR CONFIG_EXAMPLE_IPV4_ADDR
#elif defined(CONFIG_EXAMPLE_IPV6)
#define HOST_IP_ADDR CONFIG_EXAMPLE_IPV6_ADDR
#else
#define HOST_IP_ADDR ""
#endif

#define PORT CONFIG_EXAMPLE_PORT

static const char *TAG = "example";
static const char *payload = "hello world\r\n";


typedef struct 
{       
    unsigned char TCP_ClientTag[1024 * 100];     
    // unsigned char TCP_DataBuffer[50];
    char *pData;
} _TCP_Data ;
_TCP_Data TCP_Data;
void tcp_client_task(void *pvParameters)
{
    char rx_buffer[128];
    char host_ip[] = HOST_IP_ADDR;
    int addr_family = 0;
    int ip_protocol = 0;

    while (1) {

        struct sockaddr_in dest_addr;
        dest_addr.sin_addr.s_addr = inet_addr(host_ip);
        dest_addr.sin_family = AF_INET;
        dest_addr.sin_port = htons(PORT);
        addr_family = AF_INET;
        ip_protocol = IPPROTO_IP;

        int sock =  socket(addr_family, SOCK_STREAM, ip_protocol);
        if (sock < 0) {
            ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
            break;
        }
        ESP_LOGI(TAG, "Socket created, connecting to %s:%d", host_ip, PORT);

        int err = connect(sock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr_in6));
        if (err != 0) {
            ESP_LOGE(TAG, "Socket unable to connect: errno %d", errno);
            break;
        }
        ESP_LOGI(TAG, "Successfully connected");
        // int err = 0;
        static unsigned int SendDataCnt = 0;
        static unsigned int Time1 = 0;
        static unsigned int Time2 = 0;
        while (1) {
            
            unsigned int LocalUserID = 1;
            unsigned int FarUserID   = 2;
            unsigned int DataLen     = 1024 * 40;
            
            TCP_Data.TCP_ClientTag[0] = 0xA1;
            TCP_Data.TCP_ClientTag[1] = 0xA2;

            TCP_Data.TCP_ClientTag[2] = LocalUserID;
            TCP_Data.TCP_ClientTag[3] = LocalUserID>>8;
            TCP_Data.TCP_ClientTag[4] = LocalUserID>>16;
            TCP_Data.TCP_ClientTag[5] = LocalUserID>>24;

            TCP_Data.TCP_ClientTag[6] = FarUserID;
            TCP_Data.TCP_ClientTag[7] = FarUserID>>8;
            TCP_Data.TCP_ClientTag[8] = FarUserID>>16;
            TCP_Data.TCP_ClientTag[9] = FarUserID>>24;

            TCP_Data.TCP_ClientTag[10] = DataLen;
            TCP_Data.TCP_ClientTag[11] = DataLen>>8;
            TCP_Data.TCP_ClientTag[12] = DataLen>>16;
            TCP_Data.TCP_ClientTag[13] = DataLen>>24;

            TCP_Data.TCP_ClientTag[14] = 0xA3;
            TCP_Data.TCP_ClientTag[15] = 0xA4;
            // strcpy(&TCP_Data.TCP_DataBuffer,payload);
            err = send(sock,&TCP_Data,1024 * 100, 0);
            //send(sock,payload,strlen(payload), 0);
            if (err < 0) {
                ESP_LOGE(TAG, "Error occurred during sending: errno %d", errno);
                break;
            }
            Time2 = esp_log_timestamp();
            SendDataCnt+=err;
            if((Time2 - Time1) > 1000)
            {
                float TCP_Speed = ((float)SendDataCnt)/((float)(Time2 - Time1)/1000.0f); /*bytes/s*/
                ESP_LOGI(TAG,"TCP speed = %f kb/s\r\n",TCP_Speed / 1024.0f);

                Time1 = Time2;
                SendDataCnt = 0;
            }
            // int len = recv(sock, rx_buffer, sizeof(rx_buffer) - 1, 0);
            // // Error occurred during receiving
            // if (len < 0) {
            //     ESP_LOGE(TAG, "recv failed: errno %d", errno);
            //     break;
            // }
            // // Data received
            // else {
            //     rx_buffer[len] = 0; // Null-terminate whatever we received and treat like a string
            //     ESP_LOGI(TAG, "Received %d bytes from %s:", len, host_ip);
            //     ESP_LOGI(TAG, "%s", rx_buffer);
            // }

            vTaskDelay(1);//1 / portTICK_PERIOD_MS
        }

        if (sock != -1) {
            ESP_LOGE(TAG, "Shutting down socket and restarting...");
            shutdown(sock, 0);
            close(sock);
        }
    }
    vTaskDelete(NULL);
}

void app_main(void)
{
    ESP_ERROR_CHECK(nvs_flash_init());
    ESP_ERROR_CHECK(esp_netif_init());
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig.
     * Read "Establishing Wi-Fi or Ethernet Connection" section in
     * examples/protocols/README.md for more information about this function.
     */
    ESP_ERROR_CHECK(example_connect());

    xTaskCreate(tcp_client_task, "tcp_client", 4096, NULL, 5, NULL);
}

编译下载后

 

三、测试

随便下载一个TCP/UDP网络助手TCP/UDP网络助手

 

需要注意的是,买的模块质量参差不齐,距离远的时候可能会连接不到WIFI,或者通信的速度非常的慢!巨坑!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值