前几个帖子说了怎么使用蓝牙将数据传输出去,这篇帖子说说怎么接收数据。
首先需要大概说下蓝牙协议栈的结构。BLE设备中的数据是以 Service 分组,每个Server中可以包含若干个Characteristic 。我们的数据就是每个Characteristic中的值。主机通过向Characteristic 中写数据,实现了蓝牙数据的接收。
那么在例程中如何接收数据,并对数据做处理呢?
在ble_shell.c 的 void BleApp_DemoRpkWriteCallback(void *data) 函数中,实现对接收到的数据的处理。比如我们想把接收到的数据显示在屏幕上,那么就要在对应的Characteristic里添加函数。代码如下:
- else if (rcvData->AttributeWrittenEvent.Handle == hValueString)
- {
- if (rcvData->AttributeWrittenEvent.ValueLength >= 1){
- GUI_Clear();
- GUI_DispStringAt((char *)rcvData->AttributeWrittenEvent.Value,0,0);
- }else{
- status = 0xd;
- }
- }
复制代码
当我们对应的Characteristic接收到数据之后,就会调用BleApp_DemoRpkWriteCallback()回调函数,然后通过判断句柄AttributeWrittenEvent.Handle ,确定进入哪个处理函数中。
此内容由EEWORLD论坛网友manhuami2007原创,如需转载或用于商业用途需征得作者同意并注明出处