ESP32做TCP客户端(client)与PC通信(socket)

ESP32做TCP客户端(client)与PC通信(socket)

本文作为学习记录描述基于esp32已经连接WiFi上,实现esp32作为tcp客户端跟pc端进行数据收发。

配置环境:

  1. ESP32开发板
  2. vscode
  3. ESP-IDF
  4. TCP工具 获取链接

1.什么是通信

我们在聊微信或QQ时,我们发一条信息过去,对方收到信息,并返回一条。在这个过程中,发信息和收信息这个进程是怎么跟微信或QQ这个服务器进行通信的。在网络中进程之间互相通信,我们需要列出唯一的标记来表示目前的进程。实际上,TCP/IP协议很好的帮助我们解决这个问题,利用ip地址+协议+端口号标记网络进程。网络中的进程一般都使用socket接口进行通信。个人理解socket相当于一个传话筒,每个人都把自己要发的信息交给socket,然后socket通过上面的标记分别发送给对应到的接收方。

2.socket工作基本流程

1.初始化socket()
2.连接(客户端client 连接 服务端server)connect()
3.数据交互(communicate)send()和recv()一直循环
4.断开连接(disconnect)shutdown() close()

在乐鑫文档里支持以下的API:

乐鑫支持的API
官方示例(tcp client)
所有示例都在esp-idf的example里
乐鑫的示例
因为本文只描述tcp作为客户端的情况,所以服务端配置流程暂不描述。

3.TCP(client)流程

  1. 创建socket()
  2. 连接服务端connect()
  3. 发送数据send()
  4. 接收数据recv()
  5. 关闭socket close()

以下是根据示例移植到自己的工程下,所以略有改动(因为有些是官方给的示例函数,不建议直接使用)

#include "usertcp_client.h"
#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 "sdkconfig.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"
#include "lwip/errno.h"
#include "lwip/prot/dns.h"


// #if defined(CONFIG_EXAMPLE_IPV4)//如果选择IPV4 可以直接设置HOST_IP_ADDR
// #define HOST_IP_ADDR CONFIG_EXAMPLE_IPV4_ADDR
// #elif defined(CONFIG_EXAMPLE_IPV6)//如果选择IPV6 可以直接设置HOST_IP_ADDR
// #define HOST_IP_ADDR CONFIG_EXAMPLE_IPV6_ADDR
// #else
// #define HOST_IP_ADDR "198.20.10.13"
// #endif
// #define CONFIG_EXAMPLE_IPV4 "198.20.10.13"//电脑连接WiFi(esp也连同一个)时的ip
#define HOST_IP_ADDR CONFIG_EXAMPLE_IPV4_ADDR
#define PORT CONFIG_EXAMPLE_PORT //端口号(自己定)

static const
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值