当前位置:网站首页 > 编程语言 > 正文

udp 广播(esp32 udp广播)



距离实现一个完整的物联网小应用只差最后一步了,今天聊聊怎么样在手机上对ESP32芯片发送指令和接收数据,并借助ESP官方的接口——rainmaker,来实现远程控制和通信。我们也借由此进入智能家居时代1.0(部分物联网概念可以看看【序】在23年谈物联网)

目录

level 1:通过socket广播收发实现本地控制

建立TCP SCOKET CLIENT通信

建立TCP SCOKET SEVER通信

小结

level 2:更广泛的传输--UDP通信 & 通过远程控制实现点灯

总结


        虽然在上一篇中我们已经学习到了如何让ESP32-C3通过WiFi连接互联网,以及如何通过UDP广播的方式通过手机上的esp touch为ESP32轻松配置网络(链接指路→ESP32 从scan到smart config 讲透WIFI配置)但我们仍然需要更进一步,如果把互联网比作是不同端口之间的路线的话,处理器如何判断哪些数据是需要的,哪些数据是不需要的呢?这是我们今天所想要解决的问题。

所以这里我们就需要更进一步引入协议的概念。一般情况下基于WiFi和以太网的设备都会原生运行我们比较熟知的互联网TCP/IP协议栈,通过它,我们可以大大降低数据本身协议的适配和开发难度(but 虽然降低了,对于入门来说仍然有很多东西要学)

        TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议,分为服务器和客户端。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

ESP32接收UDP数据 esp32 udp广播_ESP32接收UDP数据

开始广播收发之前,我们需要下载一个网络调试工具(NetAssist)的软件。可以帮助我们调节端口的位置地址以及相关的参数的,我们可以通过它来进行内容的收发。下载链接指路(链接源于网络):NetAssist网络调试助手.exe

安装完成之后打开会看到如下的界面:

ESP32接收UDP数据 esp32 udp广播_ESP32接收UDP数据_02

        

        其实乍一看SOCKET概念的时候,我还是有一点懵的,因为之前没有做过网络通信相关的实验,花了好一阵子才开始理清整体的结构和概念,上面的图一定要结合代码多看几遍(当然,我下面的注释也会按照层级来详细解释)

        首先要解释一下这个client是什么,在上面TCP通信的框图里面,我们看到了左半部分作为客户端,右半部分作为服务端;connect之后客户端可以直接提交内容和接受信息,但服务端在收发信息之前,需要bind listen accept确立状态。

所以我们先从左半边相对简单的的客户端去分析~

建立TCP SCOKET CLIENT通信

首先我们从整体上对整个代码的概念进行认识,因为我们esp是client模式,所以要先去看电脑端的 网络调试助手选择的ip和端口,并且填入到最上面这里#define,不然则会无法配对。关于函数部分的详细原理会在后面的小结部分梳理,先从整体上对各个功能模块认知,建立宏观的基础概念更有利于理解(个人看法)。

ESP32接收UDP数据 esp32 udp广播_物联网_03

源代码如下:

因为调用了其他文件夹的文件,所以需要修改一下顶层的cmakelist(注意,不是main文件夹里面的),这样可以链接到通信所需要用到的两个头文件。

建立TCP SCOKET SEVER通信

作为SERVER端,其实代码中需要考虑的东西是更多的,不能仅仅看作只增加了bind()、listen()和accept();不过如果client部分有没看懂的部分也没关系,可能学完sever部分会有新的观念,还是老规矩,我们先从整体的角度出发:

ESP32接收UDP数据 esp32 udp广播_物联网_04

ESP32接收UDP数据 esp32 udp广播_vscode_05

ESP32接收UDP数据 esp32 udp广播_vscode_06

源代码如下:

小结

整体梳理一下所用到的函数部分,其实不难看出几乎每一个步骤都是围绕着socket操作的。

socket创建

ESP32接收UDP数据 esp32 udp广播_物联网_07

socket绑定

ESP32接收UDP数据 esp32 udp广播_ESP32接收UDP数据_08

socket监听

ESP32接收UDP数据 esp32 udp广播_网络协议_09

socket连接

ESP32接收UDP数据 esp32 udp广播_网络协议_10

发送数据

ESP32接收UDP数据 esp32 udp广播_网络协议_11

接受数据

ESP32接收UDP数据 esp32 udp广播_ESP32接收UDP数据_12

socket关闭

ESP32接收UDP数据 esp32 udp广播_vscode_13

socket释放

ESP32接收UDP数据 esp32 udp广播_vscode_14

        UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议, 是 OSI (Open System Interconnection, 开放式系统互联)参考模型中一种无连接的传输层协议,在网络中它与 TCP 协议一样用于处理数据包,是一种无连接的协议。

        在 OSI 模型中,UDP和TCP一样,在传输层(第四层),处于 IP 协议的上一层。UDP 协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前 8 个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP 有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

        简单来说UDP就是没有确TCP协议。TCP每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。TCP数据包和UDP一样,都是由首部和数据两部分组成,唯一不同的是,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

        UDP 用来支持那些需要在计算机之间传输数据的网络应用。 包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。 UDP 协议从问世至今已经被使用了很多年, 虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天 UDP 仍然不失为一项非常实用和可行的网络传输层协议。

下图是UDP的传输过程,可以看到相比于TCP协议,UDP简化了一些步骤:

ESP32接收UDP数据 esp32 udp广播_vscode_15

        这一部分原理和TCP部分大致相同,因为网上找到的例程有点小bug还没有解决,所以暂时先简单分享一下UDP方面的思路,后续理解了会更新完整代码,关键实现代码如下(led灯在另一个文件中已经定义,此处也可以删掉):

ESP32接收UDP数据 esp32 udp广播_物联网_16

参考代码如下:

对于第一次接触本地控制来说,tcp/ip真的可以算是一个难啃的骨头,会有很多新的概念,会综合很多部分的使用;最重要的是,不同例程的思路也迥然不同,官方的例程不够全面也没有注解,而第三方的例程有时候的定义和用法又需要重新理解,还有一些嵌套的思路有时候就像解一团绳结一样,如果不是对整体特别熟练,理解起来也会非常头大。

        从全局的角度一点点入手,分解、拆开之后,会清晰很多;有些小块不懂的地方其实也不用死磕,可以先记录下来,之后再一点点看,慢慢会有一些思路,很多问题在不知不觉中就明白了。

到此这篇udp 广播(esp32 udp广播)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • pass平台是怎么实现的啊(pass平台是怎么实现的啊知乎)2025-09-26 17:36:09
  • 圈一圈写一写图解一年级圆圈(小学一年级 圈一圈 填一填)2025-09-26 17:36:09
  • 蓝牙地址是什么(蓝牙地址是不是唯一的)2025-09-26 17:36:09
  • tpami投稿难度(tpami投稿日期)2025-09-26 17:36:09
  • samba密码查看(samba 密码错误)2025-09-26 17:36:09
  • tpnd全称(tpi全称)2025-09-26 17:36:09
  • 学籍认证码在哪里找(学籍认证码如何查询)2025-09-26 17:36:09
  • 阻塞队列有哪些(阻塞队列有哪些实现?各有什么优缺点)2025-09-26 17:36:09
  • 虚拟机识别不了u盘(虚拟机识别不了u盘怎么解决)2025-09-26 17:36:09
  • 圈一怎么用键盘打出来(圈一符号怎么打出来)2025-09-26 17:36:09
  • 全屏图片