本帖最后由 skyworth74 于 2021-7-4 15:29 编辑
实现了单线归零驱动以后需要开始编写手机APP和BLE通讯的程序,onsemi提供的demo程序里面选择了
freertos_ble_peripheral_server_bond 这个例程,通过简单改造就可以实现通讯功能,选取里面
#define CS_CHAR_LONG_RX_UUID { 0x24, 0xdc, 0x0e, 0x6e, 0x04, 0x40, \
0xca, 0x9e, 0xe5, 0xa9, 0xa3, 0x00, \
0xb5, 0xf3, 0x93, 0xe0 }
#define CS_CHAR_LONG_TX_UUID { 0x24, 0xdc, 0x0e, 0x6e, 0x05, 0x40, \
0xca, 0x9e, 0xe5, 0xa9, 0xa3, 0x00, \
0xb5, 0xf3, 0x93, 0xe0 }
两个特征值直接就可以通过手机APP BLE调试APP进行测试,只需要在这两个特征值里面找到两个callback 函数 CUSTOMSS_RXLongCharCallback()
把接受度到的数据加入到fifo的队列里面。然后通过freetos创建一个新的task 把fifo收到的数据进行解析
uint8_t CUSTOMSS_RXLongCharCallback(uint8_t conidx, uint16_t attidx, uint16_t handle,
uint8_t *to, const uint8_t *from, uint16_t length,
uint16_t operation)
{
memcpy(to, from, length);
#if RSL10_DEBUG
PRINTF("\n\rRXLongCharCallback (%d): ", conidx, length);
for (int i = 0; i < length; i++)
{
PRINTF("%02x ", app_env_cs.from_air_buffer_long);
}
#endif /* if RSL10_DEBUG */
PRINTF("\r\n");
/* Update TX long characteristic with the inverted version of
* RX long characteristic just received */
if(operation == GATTC_WRITE_REQ_IND)
{ //把数据放入fifo 缓冲里面
smartLightProtocolDataInsert((void *)app_env_cs.from_air_buffer_long, length);
}
return ATT_ERR_NO_ERROR;
}
在freertos里面创建一个任务
osThreadNew(ledDriverThread, NULL, &thread_led_attr);
__NO_RETURN void ledDriverThread(void *argument)
{
EFFECT_MODE effectMode = PARTY;
xt_protocol_data_t *ble_protocol_data=& sg_ble_protocol_data;
/* creation of rgbQueue */
rgbQueueHandle = osMessageQueueNew (1, sizeof(LIGHT_ATTR), &rgbQueue_attributes);
for(;;)
{
osDelay(10);
if(1==onsemi_fifo_HaveData(&fifo_dev)){
smartLightProtocolDataRead();
PRINTF("%s header[0]=%x\r\n",__func__,ble_protocol_data->header[0]);
if (HEADER_0==ble_protocol_data->header[0]&&HEADER_1==ble_protocol_data->header[1]){
effectMode = ble_protocol_data->cmd;
}
}
switch(effectMode)
{
case NIGHT:
send_data(0x55,0xaa,0x55);
PRINTF("NIGHT\r\n");
break;
case VOICE_CONTROL:
//在这里实现把咪头采集到的声音进行傅里叶变化,计算出频率和震幅然后通过数据归一化处理实现等效控制
break;
case FLASH_MODE:
break;
}
}
}
下图蓝牙收到数据命令,解析出来的命令模式台灯进入夜晚模式
|