0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TCP-UART数据透传威廉希尔官方网站 ,居然如此简单!

青山老竹农 来源:jf_82863998 作者:jf_82863998 2024-12-30 16:46 次阅读

今天,来分享下TCP-UART透传示例,源码开放,可根据实际需求灵活应用。

一、TCP协议概述

TCP(Transmission Control Protocol,传输控制协议)——是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。

TCP通过三次握手建立连接,使用滑动窗口进行流量控制,以及通过校验和确认应答、超时重传等机制来保证数据的可靠性。它是互联网协议套件(TCP/IP协议族)的核心组成部分,广泛应用于各种网络应用中。

▼ TCP工作原理

连接建立:

TCP协议使用三次握手协议来建立连接。

客户端发送一个SYN(同步序列编号)报文给服务端,并携带一个随机生成的初始序列号。

服务端收到SYN报文后,发送一个SYN+ACK(同步序列编号 + 确认应答)报文给客户端,表示确认收到了客户端的SYN报文,并携带自己的初始序列号。

客户端收到服务端的SYN+ACK 报文后,发送一个ACK(确认应答)报文给服务端,表示确认收到了服务端的SYN+ACK报文。至此,TCP连接建立完成。

数据传输:

在连接建立后,双方就可以开始传输数据了。TCP协议会将应用层发送的数据分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元MTU的限制),并为每个报文段分配一个序号。

接收端在收到报文段后,会按照序号进行排序,并发送确认应答(ACK)给发送端。如果发送端在合理的往返时延(RTT)内未收到确认应答,则会重传对应的报文段。

连接释放:

TCP协议使用四次挥手协议来终止连接。

客户端发送一个FIN(结束)报文给服务端,表示自己想要关闭连接。

服务端收到FIN报文后,发送一个ACK报文给客户端,表示确认收到了客户端的FIN报文。此时,客户端到服务端的连接关闭,但服务端到客户端的连接仍然打开。

服务端在发送完所有剩余数据后,也发送一个FIN报文给客户端,表示自己也想要关闭连接。

客户端收到服务端的FIN报文后,发送一个ACK报文给服务端,表示确认收到了服务端的FIN报文。至此,TCP连接完全关闭。

二、TCP-UART透传示例

本小节教你使用LuatOS脚本语言,让Air201模组连接上一个TCP服务器,并且实现模组和服务器之间数据的双向传输。

wKgZPGdyW6uAdHISAAJCjv0QY_g668.png

软硬件相关准备工作及最新示例源码下载详见:

https://docs.openluat.com/air201/luatos/app/socket/tcp/

2.1 本教程实现的功能定义:

通过网页端启动一个TCP服务器;

Air201模组插卡开机后,连接上TCP服务器;

Air201模组向TCP服务器发送:TCP CONNECT,服务器可以收到数据并且在网页端显示;

TCP服务器网页端向Air201模组发送:data from TCP server,Air201模组可以收到数据并且通过串口输出显示。

2.2 核心脚本代码详解

2.2.1 串口初始化

本文示例:串口使用MAIN_UART(uart1)。

wKgZO2dyW8eAQtSCAADP3s-j55Q413.png

2.2.2 数据接收回调:搭建响应桥梁

这里使用uart.rx接口,和以zbuff的方式存储从uart1外部串口收到的数据--收取数据会触发回调。

注意:这里的"receive"是固定值不要修改。

wKgZPGdyW9WAcuEmAAIXQ-U3V3k756.png

2.2.3 TCP网络配置:铺就数据通道

wKgZO2dyW-KAMu6CAAPxcQda8eQ995.png

2.2.4 TCP至串口透传:数据无缝流转

wKgZPGdyW--AULbRAAGeMxxQTz8320.png

2.2.5 串口至TCP反透传:信息双向传递

wKgZO2dyW_uANRgfAAIUn5l7Fxg252.png

2.3 完整代码及运行结果

2.3.1 完整代码

wKgZO2dyXBeAOmRPAAZ_U-ep_Tw834.png

wKgZPGdyXCuAOweDAAWPXu5-8PI053.png

wKgZO2dyXEGAOp8yAASNR5CjG8c814.png

wKgZO2dyXFaAJYmtAATBtbUEWi8972.png

wKgZPGdyXGeAcOHSAAIbvNlkmH0956.png

2.3.2 运行结果

使用TCP/UDP web测试工具及SSCOM串口工具,运行结果如下图所示:

wKgZO2dyXIGAAaa2AAPVpVn8iQ4970.png


今天的内容就分享到这里了~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7073

    浏览量

    89144
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1370

    浏览量

    79128
  • 透传
    +关注

    关注

    0

    文章

    10

    浏览量

    6834
收藏 人收藏

    评论

    相关推荐

    TCP-UART示例~看完就会源码开放!

    今天,来分享下TCP-UART示例,源码开放,可根据实际需求灵活应用。   一、TCP协议概述 TCP(Transmission Con
    的头像 发表于 12-30 16:43 126次阅读
    <b class='flag-5'>TCP-UART</b><b class='flag-5'>透</b><b class='flag-5'>传</b>示例~看完就会源码开放!

    DTU终端CATCOM-100云端转发应用

    本文介绍DTU设备数据转发应用,实现点对点通信。应用场景DTU设备数据
    的头像 发表于 10-13 08:05 297次阅读
    DTU终端CATCOM-100云端<b class='flag-5'>透</b><b class='flag-5'>传</b>转发应用

    网络和非是什么区别是什么

    :适用简易、立即的数据传输,留意数据的完整性和低延迟。非:适用必须进行
    的头像 发表于 08-07 16:19 835次阅读

    请问ESP32-S3-WROOM-1U模组可以做串口或者SPI接口的数据吗?

    请问下,ESP32-S3-WROOM-1U模组可以做串口或者SPI接口的数据吗?还需要额外对模组进行编程下载吗?还是模组默认的程序就可以实现
    发表于 07-19 06:54

    请问AT支持UDP吗?

    做了测试,SDK V1.00 AT文件烧写后,设定为TCP时,是可以了, 但是设定为UDP后,传出现发送不成功,但是接收是可以的,是不是AT不支持UDP
    发表于 07-17 08:28

    ESP8266模式是如何工作的?

    有人能告诉我传输模式是如何发送数据的吗?文档 (https://www.espressif.com/sites/default/files/documentation
    发表于 07-15 07:48

    请问SDK固件如何实现网络

    您好,想请问一下,我们现在一个项目需要用SDK来实现网路数据,但是调用 官方API :espconn_send()会自动把HTTP报文头部给添加上去了,没有有办法实现像AT固件一样直传?
    发表于 07-10 06:59

    蓝牙模块无线世界的传输

    在数字化、智能化的今天,蓝牙威廉希尔官方网站 已成为我们生活中不可或缺的一部分。蓝牙无处不在,连接着我们的每一个智能设备。而在这些设备的背后,有一个神秘的角色在默默付出,那就是蓝牙模块。今天,就让我们一起走进
    发表于 07-03 18:40

    请问ESP32 BLE如何主动发送数据

    我在做ESP32 BLE,通过串口数据。看到的例程都是手机app端读操作时触发ESP_GATTS_READ_EVT事件,然后发送
    发表于 06-21 11:25

    ESP32-S3使用tcp_server例程,将网络数据和串口数据延迟过高怎么解决?

    使用tcp_server例程修改,将tcp数据与串口数据进行,串口→
    发表于 06-06 06:06

    轻松搞懂和非的区别

    和非数据通信中的两种不同模式,各自有其适用场景和优势。
    的头像 发表于 06-05 12:03 9845次阅读
    轻松搞懂<b class='flag-5'>透</b><b class='flag-5'>传</b>和非<b class='flag-5'>透</b><b class='flag-5'>传</b>的区别

    esp32-c3作为中转站实现数据?

    如题,想用esp作为中转站实现数据
    发表于 06-05 08:16

    关于博达工具新版本升级公告

    感谢您一直以来对博达智联自主研发的远程工具的支持与信任!为提升广大用户的操作体验,博达智联团队经过不懈努力,不断优化产品功能,将工具进行了全面的升级,即刻发出全新版本。相比于之
    的头像 发表于 03-19 08:33 475次阅读
    关于博达<b class='flag-5'>透</b><b class='flag-5'>传</b>工具新版本升级公告

    PSoC通过wifi模组的UART bootload经常失败怎么解决?

    我工程中有个应用,需要通过TCP/IP连接wifi模组,wif模组通过UART升级PSOC, 发现经常升级失败,成功率不到10%。每次都是刚开始的时候返回err 0x0004.
    发表于 02-22 06:32

    数据选择低功耗WiFi模块还是选择低功耗蓝牙模块?

    WiFi模块和蓝牙模块,针对部分领域的低功耗数据需求,工程师是该选择低功耗WiFi模块还是低功耗蓝牙模块呢?   数据
    的头像 发表于 01-10 18:44 756次阅读
    <b class='flag-5'>数据</b><b class='flag-5'>透</b><b class='flag-5'>传</b>选择低功耗WiFi模块还是选择低功耗蓝牙模块?