开发环境:
esp-idf:master分支
官方idf环境搭建文档:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html#get-started-set-up-env
硬件需求:
Esp32-s3开发板

ESP32-S3

TCP介绍
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP分为服务端Server和客户端Client,服务端创建服务等待客户端连接,客户端连接后即可与服务端相互发送消息,服务端只有一个,客户端可以是N个,可以同时连接服务端,服务器不能主动去连接客户端,必须客户端主动连接服务端才能相互发送消息。

Tcp_client整体流程:
1、编译官方tcp_client例程(需要配置下面会详细介绍),烧录到ESP32-S3开发板。
2、使用TCP调试助手创建TCP Server(电脑必须与开发板在同一路由器下)
3、重启ESP32,创建TCP Client,开始连接电脑创建的服务器
4、相互发送数据

一、Tcp_client例程分析:
1.初始化NVS、WiFi连接上WiFi后创建一个tcp_client任务。

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()); // WiFi作为STA模式,连接到配置的WiFi// 创建一个任务,用来进行tcp连接和通讯xTaskCreate(tcp_client_task, "tcp_client", 4096, NULL, 5, NULL);
}

WiFi连接函数:example_connect()WiFi信息通过menuconfig 配置

idf.py menuconfig 进入配置菜单

配置连接的WiFi名称和密码(要和服务器端连接到同一路由)

2.配置远程连接信息

struct sockaddr_in dest_addr;dest_addr.sin_addr.s_addr = inet_addr(host_ip); // 服务器ipdest_addr.sin_family = AF_INET;                 dest_addr.sin_port = htons(PORT);               // 服务器端口号addr_family = AF_INET;ip_protocol = IPPROTO_IP;

3.通过menuconfig配置服务器的IP以及端口号

配置完成后保存退出(服务器的IP及端口)

4.编译、烧录
编译:idf.py build
烧录:idf.py -p PORT [-b BAUD] flash
注:只有一个串口时可以直接 idf.py flash

5.电脑端或手机端打开TCP服务器

6.进入窗口监视页面
idf.py -p PORT monitor
1)从和日志可以看出,WiFi连接成功后,创建一个sock,sock连接成功。发送一条信息给服务器(Message from ESP32),发送成功后打印一句 数据发送成功。

2)服务器编辑内容发送给esp32,在窗口监视页面显示。
红色箭头是接收到的服务器的消息

二、tcp_server整体流程:
1、编译官方tcp_server例程(需要配置下面会详细介绍),烧录到ESP32-S3开发板。
2、打开tcp调试助手(电脑or手机必须与开发板在同一路由器下)
3、重启ESP32,创建TCP Client,开始监听模式等待tcp_client的连接
4、进行通讯发送数据

Tcp_server例程分析:
1.初始化NVS、WiFi连接上WiFi后创建一个tcp_server任务。

void app_main(void)
{ESP_ERROR_CHECK(nvs_flash_init());  // 初始化NVS分区ESP_ERROR_CHECK(esp_netif_init());  // 初始化底层TCP/P堆栈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()); // wifi连接函数,WiFi信息在menuconfig配置
#ifdef CONFIG_EXAMPLE_IPV4xTaskCreate(tcp_server_task, "tcp_server", 4096, (void*)AF_INET, 5, NULL); // 创建一个tcp_server的任务
#endif
#ifdef CONFIG_EXAMPLE_IPV6xTaskCreate(tcp_server_task, "tcp_server", 4096, (void*)AF_INET6, 5, NULL);
#endif
}
  1. 新建 socket、 bind、 listen 和 accept, 最后得到了通信的 socket:用于接收/发送数据。
socket(addr_family, SOCK_STREAM, ip_protocol);
bind(listen_sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
listen(listen_sock, 1);
accept(listen_sock, (struct sockaddr *)&source_addr, &addr_len);

对应log输出如下:

tcp_server操作流程
1.打开tcp_server工程,配置menuconfig WiFi、TCP服务器相关信息(服务器端口号,要连接的WiFi)


2.编译工程
idf.py build
编译成功输出固件信息,及烧录地址

3.烧录到开发板
idf.py -p PORT [-b BAUD] flash
注:只有一个串口时可以直接 idf.py flash

4.打开窗口监视器
idf.py monitor
可以看到esp32-s3上电以后连接到配置的WiFi,创建了一个tcp_server等待client的连接

5.打开TCP调试助手,设置为client模式 输入服务器IP及端口号,点击连接。

6.编辑文本,向服务器发送消息
如下图所示,服务器端收到消息。并将收到的信息回发给client端


启明去端分享| ESP32-S3如何实现tcp_client和tcp_server9-07相关推荐

  1. 手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(上)

    手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信--通过MQTT通信(上) 前言: 本次实验是通过MQTT来进行手机端-设 ...

  2. 移动端分享插件使用总结

    对于分享插件来说,大家肯定都很熟悉,最常用的就是百度分享.jiathis分享等,可分享的媒体也非常多,当然最常用的需求无非也就新浪微博.QQ空间.QQ好友.微信朋友圈.微信好友,其他什么乱七八糟的人人 ...

  3. ios 微信分享重新编码链接_微信民众号IOS端复制链接失足,安卓端分享链接翻开只能进入首页等题目的处理...

    近来在做某个需要在微信中翻开的项目,部份页面会经由过程微信分享或复制链接分享给其别人,然后就遇到了以下坑: 1.IOS端复制链接或在其他浏览器中翻开时,如果原网站链接原本应当是"http:/ ...

  4. web端 网页端分享功能的实现

    思路 web端 网页端分享功能的实现. 我们看微信的分享开发者文档,可以知道使用微信JS-SDK可以实现网页在微信里的分享. 微信JS-SDK说明文档 也就是说 在微信浏览器中打开的网页 才能调用 该 ...

  5. 基于北斗GPS模块,利用ESP32 S3蓝牙通讯的GPS系统

    1. 简介 使用ESP32 S3作为主控芯片,利用蓝牙功能给手机发送GPS定位信号,GPS模块使用的是北斗的HT1818Z3G5L GPS模块. 2. 代码 代码在ESP32 的蓝牙Gatt服务器模板 ...

  6. uniapp多端分享(app,小程序,公众号)

    前言 开发uniapp程序的项目,用它生成多端应用,由于兼容各种多端应用,程序代码需要相应的适配,在项目里分享功能是很常见的一个功能,但是在不同的端有不同的方法,我们如何实现多端分享呢?(app,小程 ...

  7. 移动端分享方式--链接分享

    移动端分享方式–链接分享 1.技术框架-vue 2.实现功能:点击拷贝按钮,复制下链接,可进行粘贴发送 3.应用插件 vue-clipboard2 4.使用方式 this.$copyText(this ...

  8. 启明云端分享|ESP32摄像头应用方案常遇到的问题

    提示:启明云端从2013年起就作为Espressif(乐鑫科技)大中华区合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用心整理了乐鑫新产品.新 ...

  9. 乐鑫代理启明云端分享| ESP32系列教程之五: Eclipse搭建esp-idf环境

    提示:前面小明已经为大家分享了4个章ESP32系列教程,今天继续为大家分享,希望大家多多关注我们!启明云端作为乐鑫代理,一直希望能帮到更多的开发者能快速上手乐鑫系列芯片的开发. 前言 提示:本文档为E ...

最新文章

  1. 奇异值分解 SVD 的数学解释
  2. Java历程-初学篇 Day01初识java
  3. SAP ABAP实用技巧介绍系列之将unicode字符转换成中文
  4. Android基本组件是什么?
  5. 基于Android新闻RSS阅读器客户端app
  6. android toast居中显示_Android Toast 设置到屏幕中间,自定义Toast的实现方法,及其说明...
  7. LUP分解法求解线性方程组
  8. pdn阻抗测试_非常详细的阻抗测试基础知识
  9. RxSwift 介绍与简单使用
  10. Windows中快速获取文件目录的方法
  11. MIUI系统 无法从非官方渠道安装系统应用
  12. 2021 苹果申请邓氏编码
  13. android拨号器(java版)
  14. steam上linux游戏下载速度慢,steam下载速度慢如何处理_steam下载游戏速度慢的解决教程-系统城...
  15. Sophus线性代数库学习大全
  16. 【6月比赛合集】103场可报名的数据挖掘大奖赛,任君挑选!
  17. 移动类型541(委外业务)不产生会计凭证的原因
  18. Oracle EBS R12 AP付款模块 帐龄表计算逻辑
  19. JPG免费转PDF的方法分享
  20. 重庆航天职业技术学院计算机宿舍,2020年重庆航天职业技术学院寝室宿舍条件与学校食堂环境图片...

热门文章

  1. leetcode- Sqrt(x)
  2. OpenGL ES 2兼容函数列表
  3. C与C++在const用法上的区别
  4. D触发器Verilog描述
  5. U2NET目标显著性检测,抠图去背景效果倍儿棒
  6. dummy.php 下载,internal dummy connection
  7. linux fedora设置开机自动挂载win磁盘
  8. 给Java程序员的Golang教程
  9. Scala模式匹配:变量声明中的模式匹配
  10. Python Django单表增删改操作