这是描述信息

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议

乐鑫科技官网无线wifi模组ble蓝牙soc常见的本地数据通信协议,介绍完如何在局域网内发现设备后,本节将介绍如何控制设备。以智能灯为例,简单的控制就是开关智能灯,对于软件层而言,就是 GPIO 引脚电平被拉高或拉低。通过其他设备来控制智能灯的开关,无非就是提供命令来进行 GPIO 的操作。那么这种命令是怎么通过智能手机发送到智能灯的呢?这种命令到底是什么格式? 采用什么协议呢? 本节将会一一解开疑惑,本节主要介绍通过乐鑫科技官网无线wifi模组ble蓝牙socWi-Fi 无线传输媒介来传输符合 TCP/IP 协议的数据,以及通过蓝牙无线传输媒介来传输符合蓝牙数据通信协议的数据。


1、TCP协议:
TCP/IP模型
应用层
传输层
网络层
数据链路层
物理层


传输控制协议(TCP,Transmission Control Protocol) 是Internet 协议族的主要协议之一。在 TCP/IP 模型中,TCP作为传输层协议,为应用层协议提供了可靠的数据传输,常用的应用层协议有 HTTP、MQTT、FTP 等。


TCP 协议介绍
乐鑫科技官网无线wifi模组ble蓝牙socTCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。

(1)面向连接。采用 TCP 协议发送数据前需要在发送方和接收方之间建立连接,也就是常说的三次握手。
(2)可靠的。采用 TCP 协议发送数据,可以保证接收方的接收,如果丢失了数据,则会重传丢失的数据。TCP 协议还可保证接收方按顺序接收数据。
(3)字节流。在采用TCP 协议发送数据时,首先将应用层数据写入 TCP 缓冲区中,然后由TCP协议来控制发送数据,是按字节流的方式发送数据的,和应用层写下来的报文长度没有任何关系,所以说是字节流。


TCP协议将上层应用数据发给接收方的流程如下:
(1)上层应用程序将应用数据写入 TCP 缓冲区。
(2)TCP缓冲区将数据打包成TCP 报文发往网络层。
(3)接收方接收到 TCP 报文,将其放入TCP 缓冲区。
(4)当收到一定数量的数据后,对数据进行排序与重组后告知给应用层。


使用 Socket 创建 TCP 服务器端
函数 esp_create_tcp_server()可创建一个TCP 服务器端,乐鑫科技官网无线wifi模组ble蓝牙soc包括TCP 套接字的创建、端口配置绑定、监听、接收数据和发送数据。相较于 TCP 客户端、UDP 服务器端和客户端,TCP服务器端的代码流程都要复杂一些,会涉及 listen 和 accept 两个套接字函数的使用,这是TCP服务器端特有的操作。


2、HTTP 协议
HTTP (HyperText Transfer Protocol,超文本传输协议)是基于传输层之上的应用协议。HTTP协议是万维网 (World Wide Web,www或 Web) 的数据通信基础,它规定了客户端与服器端之间数据传输的格式与方式。乐鑫科技官网无线wifi模组ble蓝牙soc客户端使用 HTTP 协议可以通过 HTTP 请求方式来获取智能灯的开关状态(GET)或者操作智能灯的亮灭 (POST),并且每个操作都会有对端的响应回复。因此,HTTP 协议在应用上比单纯的 TCP 协议更加完善与合理。


HTTP协议介绍
HTTP 协议是一个客户端(用户) 和服务器端(网站)之间请求和应答的标准。客户端通过网页浏览器、网络爬虫或者其他的工具与服务器端建立 TCP 连接,然后发送请求读取服务器端数据、上传数据或者表单到服务器端,并读取服务器端的响应状态,如“HTTP/1.1 200 0K”以及返回的内容(如请求的文件、错误消息或者其他信息)。乐鑫科技官网无线wifi模组ble蓝牙soc通过 HTTP 协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。


在 0.9 和 1.0 版本的 HTTP 协议中,TCP 连接在每一次请求和回应之后关闭。在 1.1 版本的HTTP 协议中,引入了保持连接的机制,一个连接可以重复多个请求和回应,这样可以在每次数据请求前减少 TCP 握手时间和网络开销
常见的 HTTP 请求方法有:
(1)GET。请求指定的 URI资源。
(2)POST。向指定 URI 资源提交数据,请求服务器端进行处理(如提交表单或者上传文件)
(3)DELETE。请求服务器端删除 URI所标识的资源。


在智能灯的本地控制中,可以使用 GET 方法来获取智能灯的状态,使用 POST 方法来操作智能灯的行为。


3、UDP协议
之前分别介绍了TCP 协议和 HTTP 协议,这两个协议的主要特点就是传输可靠。本节接下案介绍传输层的另一种协议,即 UDP 协议。与 TCP 协议相反,UDP 协议是一种可靠的传输协议。常见的基于 UDP 协议的应用协议有 DNS、TFTP、SNMP等。


UDP 协议介绍
用户数据报协议(UDP,User Datagram Protocol) 是一个简单的面向数据报的通信协议,TCP协议一样位于传输层。UDP 协议由 David P. Reed 在 1980 年设计且在 RFC 768 中被定义(摘录自维基百科)。UDP 是不可靠的传输协议,数据通过 UDP 协议发送出去后,底层不会负责保留数据来防止数据在传输过程中的丢失。UDP 协议本身不支持差错校正、队列管理和拥塞控制,但支持校验和。


乐鑫科技官网无线wifi模组ble蓝牙socUDP 是一种无连接的协议,在发送数据前无须像 TCP 协议那样建立连接,可直接将数据发送到对端。由于在传输数据时不需建立连接,因此也就不需要维护连接状态,包括收发状态等UDP 协议本身只负责传输,因此使用该协议的应用程序要做更多关于数据如何发送和处理的控制,例如,如何使对端的应用程序正确且有序地接收数据。


与TCP 协议相比,UDP 协议不能保证数据安全可靠地传输,您可能会有疑问,那为什么还要使用UDP 协议呢?UDP 协议的无连接特性,相比于 TCP 协议的网络和时间开销更少:UDP协议的不可靠传输(主要是 UDP 协议在包丢弃后无法保证重传的特性)更适合流媒体、实时多人游戏和 IP 语音之类的应用,丢失几个包不会影响应用:反而如果使用 TCP 协议重传,则会大大增加网络的延时。


使用 Socket 创建UDP 服务器端
使用 Socket 创建 UDP 服务器端和 8.2.2 节介绍的创建组播组接收方类似,都是先创建 UDP套接字,乐鑫科技官网无线wifi模组ble蓝牙soc再配置绑定的端口、接收和发送数据。函数 esp_create udp server()设置SO_ REUSEADDR 选项,允许服务器端绑定当前已建立连接的地址。


4、CoAP协议
随着物联网技术的飞速发展,诞生了一系列满足物联网设备的协议。物联网设备大都是资源限的,如 RAM、Flash、CPU、网络带宽等资源。对于物联网设备而言,如果要借助 TCP协议和HTTP 协议进行数据传输,往往需要更多的内存与网络带宽。如果能使用UDP协议进行数据传输,那么有没有一个类似 HTTP 的应用协议呢? 答案是有的,乐鑫科技官网无线wifi模组ble蓝牙socCoAP 协议就是按照HTTP 协议的 REST 架构设计的。


CoAP 协议介绍
受限制的应用协议 (Constrained Application Protocol,CoAP) 是一种在物联网设备中类似于Web 应用的协议,在 RFC 7252 中被规范定义,可用于资源受限的物联网设备,使那些被称为节点的资源受限设备能够使用类似的协议与更广泛的互联网进行通信。CoAP 协议被设计用于同一受限网络(如低功耗、有损网络) 上的设备之间、设备和互联网上的一般节点之间,以及由互联网连接的不同受限网络上的设备之间。


CoAP 协议是基于请求与响应模型的,类似于 HTTP 协议,这样可以弥补UDP 协议不可靠传输的缺陷,保证数据不丢失乱序。服务器端的资源用 URL(如 coap://[IP]/id/light_status)来标识访问某个智能灯的状态)。乐鑫科技官网无线wifi模组ble蓝牙soc客户端通过某个资源的 URL 来访问服务器端资源,通过4个请求方法 (GET、PUT、POST 和DELETE) 完成对服务器端资源的操作。
CoAP 协议还具有以下特点:
客户端和服务器端都可以独立地向对方发送请求。
支持可靠的数据传输。
支持多播与广播,可以实现一对多的数据传输。
支持低功耗、非长连接的通信。
相比于 HTTP协议,其包头更轻量。


使用ESP-IDF 组件创建 COAP 服务器端
下面的代码展示了如何使用 ESP-IDF 组件创建 COAP 服务器端,该服务器端提供了 GET 和PUT 操作,用于 CoAP 协议的资源获取与修改。CoAP 协议的操作一般都是固定的,我们只需要关心自己的资源 URI路径以及所需要提供的操作。通过函数 coap_resource_init()可以设置资源访问的 URI,通过函数 coap_register_handler()可以注册资源URI对应的GET和PUT 方法回调函数。


5、蓝牙通信协议

蓝牙通信协议介绍
之前文章介绍了蓝牙的协议与架构,蓝牙协议定义了完成特定功能的消息格式和过程,如链路控制、安全服务、服务信息交换和数据传输。本节只介绍蓝牙协议规范的 ATT属性协议。蓝牙的数据是以属性 (Attribute) 方式存在的,每条属性由4个元素组成。
(1)属性句柄(Attribute Handle)。正如使用内存地址查找内存中的内容一样,属性句也以协助找到相应的属性。例如,首一个属性句柄是 0x0001,第二个属性句柄是 0x0002,以类推,大为 OxFFFF。
(2)属性类型 (Attribute UUID)。每个数据有自己需要代表的意思,如智能灯可以有两个基本的属性,一个是设置智能灯开关的属性,另一个是读取智能灯开关状态的属性。
(3)属性值 (Atribute Value)。属性值是每个属性真正要承载的信息,其他3 个元素都是为了让对方能够更好地获取属性值。例如,对于智能灯而言,可以设置智能灯开关的属性值为1代表开灯,设置属性值为0代表关灯;读取智能灯开关状态的属性值,1 代表打开状态,0代表关闭状态。
(4)属性权限(Attribute Permissions)。每个属性对各自的属性值都有相应的访问限制,如有些属性是可读的、有些是可写的、有些是可读可写的。拥有数据的一方可以通过属性权限控制本地数据的属性权限。例如,对于智能灯而言,可以将智能灯的开关属性权限设置为可写不可读,将读取智能灯开关状态的属性权限设置为只读不可写。


通常将保存数据(即属性的设备称为服务器端(Server),将获取其他设备数据的设备称为客户端(Client)。对于智能灯和智能手机而言,智能灯相当于服务器端,智能手机相当于客户端。下面是服务器端和客户端间的常用操作:
(1)客户端向服务器端发送数据。通过对服务器端的数据进行写操作 (Write),可完成数的发送。写操作分两种:一种是写入请求 (Write Request): 另一种是写入命令 (Write Command)。两者的主要区别是前者需要对方回复响应 (Write Response),后者不需要对方复响应。对于乐鑫科技官网无线wifi模组ble蓝牙soc智能灯而言,智能手机发送开灯、关灯的命令就相当于写操作,而且这是一种写入请求,需要智能灯对写操作进行响应。这个响应不是简单的 ACK 响应,需要将开灯和关灯这个动作执行的结果返回给智能手机,告知智能手机此时的智能灯状态。
(2)服务器端向客户端发送数据。主要通过服务器端指示(Indication)或者通知(Notification)的形式,实现将服务器端的更新数据发给客户端。与写操作类似,指示和通知的主要区别是前者需要对方设备在收到数据指示后,进行回复 (Confirmation)。对于乐鑫科技官网无线wifi模组ble蓝牙soc智能灯而言,如果用户通过硬件开关按钮进行开灯和关灯后,需要主动将智能灯状态告知智能手机,此时就可以使用该模式。智能灯可以通过指示或者通知的形式告诉智能手机,智能手机显示智能灯的状态。
(3)客户端也可以主动通过读操作来读取服务器端的数据。主要是客户端通过读操作来获取服务器端相应属性的值。对于智能灯而言,类似于上述通过硬件操作改变智能灯的状态,智能手机如果想要获取正确的状态,则可以借助智能灯发送指示或者通知来告知智能手机,智能手机也可以通过读操作来获取智能灯的实时状态。


可以思考一下,乐鑫科技官网无线wifi模组ble蓝牙soc智能灯以通知的方式将其状态告知智能手机和智能手机主动去读智能灯的状态,这两种方法哪种更好呢?使用后一种方法时,智能手机每次读取智能灯都是需要传输时间的,而前一种方法可能在智能手机刷新智能灯状态时就已经完成了,可以省去传输时间。尽管前一种方法的速度更快,但仍建议使用后一种方法,这是因为如果智能灯在发送通知的时候,如果智能手机没有连接智能灯,则智能灯就无法将其状态更新到智能手机。除非在智能手机连接到智能灯的时候,智能灯就把其当前状态告知智能手机了。

地址:深圳市宝安区西乡街道麻布社区宝安互联网产业基地A区6栋7栋7706

邮箱:Sales@ferry-semi.com

版权所有©2020  深圳市飞睿科技有限公司  粤ICP备2020098907号    飞睿科技微波雷达wifi模块网站地图

 

免责声明:本网站部分图片和文字内容以及视频可能来源于网络,转载目的在于传递更多信息,并不代表本网站赞同其观点或证实其内容的真实性。如涉及作品内容、版权和其它问题,请在30日内与本网站联系,我们将在第一时间删除内容!本站拥有对此声明的最终解释权。