1回答

0收藏

【Telink-泰凌微电子 B91通用开发套件】③.蓝牙远程连接

泰凌微电子 泰凌微电子 2932 人阅读 | 1 人回复 | 2022-10-29

      前面也已经介绍了如何搭建开发环境,安装AndeSight_RDS IDE,这里不再赘述。这节主要介绍开发板的蓝牙例程。直接去到泰凌微官方网址:http://wiki.telink-semi.cn/wiki/chip-series/TLSR921x-Series/,这里选择单模SDK,文件如下附件。
B91M_SINGLE_BLE_SDK.zip (9.67 MB, 下载次数: 10)

    当然开发板也是支持双模、Mesh、Zigbee的,该网址也提供了相应的SDK,有兴趣的坛友可以去体验体验。打开AndeSight_RDS IDE,直接导入单模SDK。

    此单模SDK包含三个Demo工程,在Build时选择B91 feature工程,执行编译。等待编译完成后,生成B91_feature.bin文件。

    使用BDT软件,加载刚刚生成的bin文件。

    下载完成后,打开手机蓝牙,并打开安装好的nRF Connect蓝牙调试工具。


    点击“CONNECT”,即可看到板卡上的红色指示灯被点亮,手机端弹出配对的提示对话框。


    连接绑定后,设备的特征值,服务列表显示如下:




    这里我们着重看“Human Interface Device”服务,有按键远程控制蓝牙设备的接入点。

  1. void  task_connect (u8 e, u8 *p, int n)
  2. {
  3.         bls_l2cap_requestConnParamUpdate (8, 8, 99, 400);  // 1 S

  4. #if (UI_LED_ENABLE)
  5.         gpio_write(GPIO_LED_RED, LED_ON_LEVAL);  //yellow light on
  6. #endif
  7. }
  8. void  task_terminate(u8 e,u8 *p, int n) //*p is terminate reason
  9. {
  10.         if(*p == HCI_ERR_CONN_TIMEOUT){
  11.         }
  12.         else if(*p == HCI_ERR_REMOTE_USER_TERM_CONN){  //0x13
  13.         }
  14.         else if(*p == HCI_ERR_CONN_TERM_MIC_FAILURE){
  15.         }
  16.         else{
  17.         }
  18. #if (UI_LED_ENABLE)
  19.         gpio_write(GPIO_LED_RED, !LED_ON_LEVAL);  //yellow light off
  20. #endif
  21. }
  22. _attribute_ram_code_ void  task_suspend_exit (u8 e, u8 *p, int n)
  23. {
  24.         rf_set_power_level_index (MY_RF_POWER_INDEX);
  25. }
  26. #if (UI_KEYBOARD_ENABLE)
  27. _attribute_data_retention_        int         key_not_released;
  28. #define CONSUMER_KEY                              1
  29. #define KEYBOARD_KEY                              2
  30. _attribute_data_retention_        u8                 key_type;

  31. /**
  32. * @brief                this function is used to process keyboard matrix status change.
  33. * @param[in]        none
  34. * @return      none
  35. */
  36. void key_change_proc(void)
  37. {
  38.         u8 key0 = kb_event.keycode[0];
  39.         u8 key_buf[8] = {0,0,0,0,0,0,0,0};

  40.         key_not_released = 1;
  41.         if (kb_event.cnt == 2)   //two key press, do  not process
  42.         {
  43.         }
  44.         else if(kb_event.cnt == 1)
  45.         {
  46.                 if(key0 >= CR_VOL_UP )  //volume up/down
  47.                 {
  48.                         key_type = CONSUMER_KEY;
  49.                         u16 consumer_key;
  50.                         if(key0 == CR_VOL_UP){          //volume up
  51.                                 consumer_key = MKEY_VOL_UP;
  52.                                 gpio_write(GPIO_LED_WHITE,1);
  53.                         }
  54.                         else if(key0 == CR_VOL_DN){ //volume down
  55.                                 consumer_key = MKEY_VOL_DN;
  56.                                 gpio_write(GPIO_LED_GREEN,1);
  57.                         }
  58.                 blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);
  59.                 }
  60.                 else
  61.                 {
  62.                         key_type = KEYBOARD_KEY;
  63.                         key_buf[2] = key0;
  64.                         if(key0 == VK_1)
  65.                         {
  66.                                 gpio_write(GPIO_LED_BLUE,1);
  67.                         }
  68.                         else if(key0 == VK_2)
  69.                         {
  70.                                 gpio_write(GPIO_LED_BLUE,1);
  71.                         }
  72.                 blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_NORMAL_KB_REPORT_INPUT_DP_H, key_buf, 8);
  73.                 }
  74.         }
  75.         else   //kb_event.cnt == 0,  key release
  76.         {
  77.                 gpio_write(GPIO_LED_WHITE,0);
  78.                 gpio_write(GPIO_LED_GREEN,0);
  79.                 key_not_released = 0;
  80.                 if(key_type == CONSUMER_KEY)
  81.                 {
  82.                  u16 consumer_key = 0;
  83.                  blc_gatt_pushHandleValueNotify (BLS_CONN_HANDLE, HID_CONSUME_REPORT_INPUT_DP_H, (u8 *)&consumer_key, 2);
复制代码
    从代码中可看出,官方提供了许多接口供用户拓展其它功能。在nRF Connect蓝牙调试工具中可查看开发板连接log。

    打开手机蓝牙搜索,列表中发现feature设备。

    连接feature设备后,再打开“输入设备”的开关,即可实现通过开发板按键远程控制手机端。

    经测试,开发板上的SW2 K1可控制手机铃声音量减少,播放音乐时可减少播放音量,照相时可及时抓拍;开发板上的SW3 K2控制手机铃声音量增加,播放音乐时可增加播放音量,照相时也可及时抓拍等。视频审核通过后再附上,此次分享就到这儿啦,咱们后会有期。







分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

yinwuqing

发表于 2022-10-31 09:33:34 | 只看该作者

视频上传论坛存在bug,请移步优酷观看:https://v.youku.com/v_show/id_XNTkxNDIyNDUyOA==.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条