Rapid iot套件是如何使用蓝牙进行通讯的呢?通过在MK64FN这颗主MCU中
模拟出蓝牙协议栈来进行蓝牙通讯。
那么是如何模拟的呢?
我们知道这个套件是双MCU的,MKW41Z负责蓝牙,MK64FN则是主MCU。通常我们编写的代码都是MK64FN的代码。这两个MCU使用FSCI(Framework Serial Communication Interface)互相通讯。这个FSCI是一个串行通讯的协议框架。这两个MCU间通讯不是简单的数据透传,而是
通过串口命令在MK64FN芯片上模拟出蓝牙协议栈。也就是说不同的串口命令,对应着协议栈中GAP、GATT等协议的不同操作,我们想要执行协议中的那个操作,MK64FN就要向MKW41Z发送对应的命令。这样也就相当于在MK64FN上实现了蓝牙的协议栈。
在BLE的通讯中,我们的套件是服务器,电脑或者手机是客户端,这是因为数据都在套件上,是套件在提供服务。但是从通讯的角度看,电脑或者手机却是主机,而套件是从机。这两个概念需要搞清楚。
数据的组织形式是服务和特性。我们可以依据不同的传感器类型建立不同的服务,然后再在服务下建立多个特性。比如说我们以电池的数据建立1个服务,而电池有多种数据,比如是否充电、电量是多少。根据这两个数据,我们能够在电池的服务下再建立2个特性。
我们的提供的数据对于蓝牙就是不同的服务以及服务中不同的特性。那么这些服务又是如何添加到程序中的呢?
在蓝牙栈中,有两个方式来添加服务和特性。静态添加服务和动态添加服务。这就类似于变量,静态变量和动态申请的变量。由于我们的代码是在MK64FN中的,它独立于MKW41Z,因此服务和特性只能等MKW41Z启动之后动态的进行添加。
添加了服务和特性之后做什么?
之后套件开始广播,使得主机能够发现套机的蓝牙。当主机发现套件后就要向套件发起连接请求,这时候套件就要响应连接请求。
那么蓝牙的数据是何时写入和读出的呢?
首先说套件提供的蓝牙数据是当蓝牙连接建立之后,会有1个定时函数,定时的读取各传感器的参数,然后写入蓝牙服务的特性中。
而我们在手机或者电脑上写入数据后,会触发1个事件GATTServer-AttributeWritten,当收到这个事件之后,套件回去读取写入的数据是什么。
此内容由EEWORLD论坛网友manhuami2007原创,如需转载或用于商业用途需征得作者同意并注明出处
本帖最后由 manhuami2007 于 2019-1-20 20:15 编辑