掌桥专利:专业的专利平台
掌桥专利
首页

一种多机通信系统

文献发布时间:2023-06-19 09:36:59


一种多机通信系统

技术领域

本发明涉及通信技术领域,具体涉及一种多机通信系统。

背景技术

Wi-Fi设备是当下家庭上网的基本配置。基于Wi-Fi的可联网智能设备已经具有许多的解决方案,但是目前主要缺点是国内市场上的智能设备很多,暂时还没有形成完整、成熟的技术规范。同时各个厂商并没有统一的标准接口协议可以遵循,不同品牌的设备使用不同控制方式。家庭中的各个智能设备不能连接至统一的控制端口,进行集中管控,实现智能化管理。

发明内容

为此,本发明提供一种多机通信系统,以解决现有智能终端无法集中控制的问题。

为了实现上述目的,本发明提供如下技术方案:

本发明公开了一种多机通信系统,所述系统包括:云端服务器和ESP32模块,所述云端服务器与ESP32模块通过无线网络进行连接,云端服务器内设置有数据接收单元、数据存储单元、数据记录单元和数据回发单元,通过云端服务器实现数据的收集和处理,所述ESP32模块通过串口或I2C与多个终端设备进行连接,采集终端设备的数据,并向终端设备发送控制指令。

进一步地,所述云端服务器的数据接收单元用于创建UDP连接、建立UDP数据接收和发送的接口,以便系统在后期使用;所述数据存储单元接收到数据后将处理的结果存储在建立的存储区域上,按照接受到数据的不同类型来分别存储不同的信息;所述数据记录单元对数据进行记录用于后续的维护和管理。

进一步地,所述数据记录单元记录的数据主要有两种,一种是使用MySQL数据库存储以后可能会用到的数据,另一种数据是日志文件,生成的简单的日志文件可以便于管理员查看服务器的运行状态。

进一步地,所述云端服务器先初始化UDP通信,建立一个空的用户列表,所述用户列表后期用来存储每一个控制终端的基本信息,阻塞等待UDP数据,在每次UDP通信时都建立一个线程并进行处理,每收到一次数据就创建一个线程专门处理该数据。

进一步地,所述用户列表每使用一个数组来存储数据,利用控制终端的列表书库数据库或者文件的形式保存用户列表,使用简单的数组来简化程序的编写难度。

进一步地,所述云端服务器创建用户列表后,等待UDP数据,监听UDP端口并等待数据,接收到数据后对数据进行初步的校准验证,初步校验其实就是判断第一个字节是不是0XFE。如果是就在下一步创建新的线程来处理接收到的数据,否则就返回上一步继续等待UDP数据。

进一步地,所述线程的创建和数据锁,如果系统检测收到一个数据就建立一个线程,在线程中处理接收到的数据。数据锁的主要功能是为用户提供列表服务,防止用户列表在线程间由于同时读写的问题产生错误。

进一步地,所述云端服务器判断当前接收到的数据的发送方是否是在用户列表中存在,如果存在就进入下一步去判断接收方;不存在则在用户列表中加入该用户,在控制终端列表中加入控制终端前需要获取数据锁,加入控制终端的任务完成之后要释放该数据锁。

进一步地,所述云端服务器判断接收方是服务器还是控制终端,如果是发送给其他控制终端的则服务器起到数据中转和记录的作用;在数据中转之前要先判断接收方是否正确,即遍历控制终端列表中是否存在该终端机,存在则转发数据,转发完成结束线程;如果不存在记录错误就结束此线程,接收方式服务器则根据不同的数据进行处理。

进一步地,所述UDP通信遵循规则,每次进行通信的数据都是由若干个字节构成的,第一个字节用于初步校验,在服务器刚收到数据时就通过该字节是不是程序需要的数据,是需求的数据才将进入下一步,不是则直接丢弃该数据;第二个字节用来判断接收方,数据分为发送给服务器和转发给其他控制终端的数据;第三字节为0、1、2、3分别代表更改自己的描述信息、给服务器发送的信息、获取控制终端机列表、控制终端主动断开。

本发明具有如下优点:

本申请公开了一种多机通信系统,通过ESP32模块与多个终端设备进行连接,ESP32模块通过无线网络与云端服务器进行数据传输,使用ESP32的的无线功能连接到自己搭建的UDP服务器,在服务器上通过多线程的处理方式可以同时处理多个UDP连接,实现了客户机和服务器之间的通信以及客户机和客户机之间的通信。进而实现了系统最基本的功能。其次在于为通信过程规定了一定的数据格式,依照这个格式所有的设备都可以通过网络和服务器进行通信,服务器端只需要针对不同类型的设备和数据进行拓展就可以处理新的数据。实现对多个终端设备的集中控制。

附图说明

为了更清楚地说明本发明的实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是示例性的,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图引申获得其它的实施附图。

本说明书所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。

图1为本发明实施例提供的一种多机通信系统云端服务器工作流程图;

图2为本发明实施例提供的一种多机通信系统云端服务器对接收方进行判断的方法;

图3为本发明实施例提供的一种多机通信系统云端服务器UDP通信数据格式规则图;

图4为本发明实施例提供的一种多机通信系统的ESP32模块控制流程图

具体实施方式

以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例

本实施例公开了一种多机通信系统,所述系统包括:云端服务器和ESP32模块,所述云端服务器与ESP32模块通过无线网络进行连接,云端服务器内设置有数据接收单元、数据存储单元、数据记录单元和数据回发单元,通过云端服务器实现数据的收集和处理,所述ESP32模块通过串口或I2C与多个终端设备进行连接,采集终端设备的数据,并向终端设备发送控制指令。

ESP32模组既可以作为一个只负责通讯的模组,通过ESP32提供的如I2C,SPI以及串口等和控制模块建立通讯,做为控制模块的无线通信组件存在。但是ESP32本身可以做为一个控制器存在,它具有最高240M的主频以及4M的片上Flash基本可以处理大多数的非计算任务,而且ESP32模组还实现的低功耗模式,这对一些监测传感器,比如只需要在一定情况下唤醒采集数据的传感器有很大优势,本实施例中直接使用了ESP32做为控制终端的主控,负责所有的数据接收处理以及做出相应的控制动作。

云端服务器的数据接收单元用于创建UDP连接、建立UDP数据接收和发送的接口,以便系统在后期使用;所述数据存储单元接收到数据后将处理的结果存储在建立的存储区域上,按照接受到数据的不同类型来分别存储不同的信息;所述数据记录单元对数据进行记录用于后续的维护和管理。数据记录单元记录的数据主要有两种,一种是使用MySQL数据库存储以后可能会用到的数据,另一种数据是日志文件,生成的简单的日志文件可以便于管理员查看服务器的运行状态。

云端服务器尝试使用更简单的多线程方式处理系统中的并发服务,在每次UDP通信时都建立一个线程并对它进行处理。每收到一次数据就创建一个线程专门处理该数据,本实施例中服务器接受数据的频率交底,增加该设计主要为了在后期对本系统进行加强时更容易,而且只有在创建线程的的开销远小于现场任务开销时,多线程才可以节省更多的服务器资源。

参考图1,云端服务器先初始化UDP通信,建立一个空的用户列表,所述用户列表后期用来存储每一个控制终端的基本信息,阻塞等待UDP数据,在每次UDP通信时都建立一个线程并进行处理,每收到一次数据就创建一个线程专门处理该数据。

UDP通信的socket编程,UDP是本系统的基本通信方式,系统中所有的数据接收和发送都是基于UDP通信实现。如果在云服务器下则需要考虑开放端口的问题,首先要配置服务器的防火墙,开放系统后期将要进行通信的端口;其次还要配置服务器的一系列安全策略的组件,并开放所有的通信端口。

用户列表的创建和维护,用户列表每使用一个数组来存储数据,作为更好的解决方案应该使用数据库或者文件的形式保存用户列表,此处要考虑模型的验证则需要使用简单的数组来简化程序的编写难度。我们在系统中用的控制终端的列表数据的基本格式定义:

云端服务器创建用户列表后,等待UDP数据,监听UDP端口并等待数据,接收到数据后对数据进行初步的校准验证,初步校验其实就是判断第一个字节是不是0XFE。如果是就在下一步创建新的线程来处理接收到的数据,否则就返回上一步继续等待UDP数据。线程的创建和数据锁,如果系统检测收到一个数据就建立一个线程,在线程中处理接收到的数据。数据锁的主要功能是为用户提供列表服务,防止用户列表在线程间由于同时读写的问题产生错误。

判断当前接收到的数据的发送方是否是在用户列表中存在,如果存在就进入下一步去判断接收方;不存在则在用户列表中加入该用户,在控制终端列表中加入控制终端前需要获取数据锁,加入控制终端的任务完成之后要释放该数据锁。参考图2,判断接收方是服务器还是控制终端,如果是发送给其他控制终端的则服务器起到数据中转和记录的作用;在数据中转之前要先判断接收方是否正确,即遍历控制终端列表中是否存在该终端机,存在则转发数据,转发完成结束线程;如果不存在记录错误就结束此线程。接收方式服务器则根据不同的数据进行处理。

如图3所示,基本所有在网络间传输的数据都要遵循图3所示的规则。每次进行通信的数据都是由若干个字节构成的(最少3个字节)。

第一个字节用于初步校验,即在服务器刚收到数据时就通过该字节是不是程序需要的数据,是需求的数据才将进入下一步,不是则直接丢弃该数据。

第二个字节用来判断接收方,数据分为发送给服务器和转发给其他控制终端的数据。第二个字节如果是0,则表示该数据会交给服务器来进行处理;如果是非0则表示数据是要发送给其他控制终端来处理的,服务器在这一步里只起到了转发数据的功能。

以上两种情况对于不同的第三个字节以及第三个字节以后的数据,接收方为服务器时,第三字节为0、1、2、3分别代表更改自己的描述信息、给服务器发送的信息、获取控制终端机列表、控制终端主动断开。

更改自己的数据描述信息,从第四字节开始存储描述信息,描述信息的结构定义如下:

在给服务器发送信息时要保留数据的格式,数据格式并未给明确的定义。在服务器上,代码里会直接以字符串的形式对数据进行输出。

获取控制终端机列表,第三字节为2表示获取控制终端列表,这个通信过程只有三个字节。系统收到这个信号之后,服务器将开始以规定的数据格式向发起这个请求信号的控制终端回发一个控制终端的列表。

控制终端会主动断开,第三字节为3的时候表示控制终端会主动断开此时的连接,这个通信过程也只有三个字节。收到这个信号之后服务器会首先获取数据锁,获取到之后从控制终端列表中删除这个控制终端,释放数据锁,然后结束此刻进行的线程。

ESP32模组作为终端的控制核心,理论上需要负责从两个方面接收数据,一方面采集传感器的数据,另一方面从UDP接收数据;处理通过UDP发送来的数据和要通过UDP发送的数据、还有最后控制OLED输出提示信息以方便测试进行。在功能实现上,第一部分是关于网络的控制,ESP32要作为一个Station接入指定的Wi-Fi网络,然后配置ESP32的UDP通信;第二部分是显示设备的初始化,驱动外部的显示设备用来显示相关的信息或者为调试提供直观的输出途径。

参考图4,利用ESP32集成的片上系统FreeRTOS可以方便的实现多任务单片机程序的编写。首先对OLED进行初始化,本实施例的设计中采用了0.9寸的OLED显示屏作为输出显示模块,一般0.9寸的OLED显示屏模块都支持SPI和IIC通信,ESP32作为一个IO比较少的单片机使用这两种通信方式都可以很大程度上节约IO资源。

开启Station模式,即初始化ESP32的Station工作模式,使ESP32作为一个路由的终端接入网络。在ESP32中初始化Station工作模式之前需要初始化NVS存储系统,因为关于网络的硬件信息需要从NVS分区读取。

UDP的连接使用中,在使能Station模式之后就要开始创建UDP连接使得该设备可以连接到服务器,创建UDP连接可以使用类似Linux的socket网络编程,也可以使用esp-idf封装的UDP网络函数,这两种方法本质上没有差别,都可以实现我们设计中要求的网络连接,本实施例中使用了第二种方法。在使用后者时,创建UDP连接的过程中需要注册接收回调函数,该函数在UDP接收到数据后会被调用。具体注册如下:

//注册接收回调函数

udp_recv(my_udp_pcb,my_udp_recv,NULL);

my_udp_recv为注册的回调函数名,my_udp_pcb是关于UDP控制的数据结构体。

接收回调函数会在每一次UDP接收到数据之后被调用,在接收回调函数中处理接收到的数据,在实施例中的处理方式为通过OLED显示出相应的信息。依次发送测试数据,分别是更改描述信息、给服务器发送信息、获取客户机列表、主动断开连接的测试信息。

虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。

相关技术
  • 基于I2C总线的多机通信的实现方法及多机通信系统
  • 一种自适应组网的RS485多机通信系统
技术分类

06120112232334