社区导航

 
查看: 1666|回复: 13

[蓝牙BLE] 想用SensorTile开发HID设备,希望来了!实现蓝牙键盘

[复制链接]

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-3-3 09:54:44 | 显示全部楼层 |阅读模式
如果你想用SensorTile实现蓝牙键盘、空中飞鼠(鼠标)、自动接听、自拍杆……
有了hid例程 这些实现起来就变的更容易了,甚至你都不需要写APP就可以能手机交互
下面是我测试官方例程的过程
实现蓝牙键盘鼠标只需这几步
image001.jpg
下载下来后是一个压缩包
打开压缩包可以看到一个OSXSmartConnPS_V1.6.0的文件夹
里边有很多文件和文件夹
image003.jpg
把这个文件解压到STM32CubeExpansion_BLE1_V2.8.0的根目录下,覆盖原有文件夹
然后打开STM32CubeExpansion_BLE1_V2.8.0\Projects\Multi\Applications\Profiles_LowPower里的例程
找到host_config.h文件
将原有的宏定义改为#define BLE_CURRENT_PROFILE_ROLES  (HID_DEVICE) /* not supported by L0 */
image004.jpg
为了方便调试可以把低功耗关闭方法是把main.c里的#define LOW_POWER_ENABLED 改为0
Hid_profile_application.c里#define KEYBOARD_IP 是键盘例程//#define MOUSE_IP是鼠标例程
Hid_profile_application.c的HID_Application_Process函数包含了处理发送键盘数据的函数
if (send_measurement != 0){}用来判断是否有按键按下,因为SensorTile没有物理按键可以把这个判断注释掉,这样就会一直发送指定按键
例程是不断发送A,B两个按键
编译后下载到SensorTile
用手机的蓝牙功能(不是APP)可以找到名称为HID的设备
image005.jpg
连接以后原来的大键盘就只显示标题
找一个能输入文本的地方就可以看到SensorTile发送过来的按键数据了
image006.jpg

附上相关文件

en.OSXSmartConnPS.zip (7.34 MB, 下载次数: 26)
虾扯蛋


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2017-4-21 10:44:36 | 显示全部楼层
感谢@jofficer提醒,因为我忘了之前在STM32CubeExpansion_BLE1例程里移植过SensorTile的SPI驱动

u=1917012015,3758948166&fm=23&gp=0.jpg

如果没有在STM32CubeExpansion_BLE1中使用过SensorTile还需要把SPI驱动也加进来
我又重新写了一下操作过程,重新下的例程,按照这些步骤操作肯定能把HID调通
附加修改好的例程,供直接使用

下载OSXSmartConnPSSTM32CubeExpansion_BLE1

解压STM32CubeExpansion_BLE1,和OSXSmartConnPS

再将OSXSmartConnPS里的全部文件复制到STM32CubeExpansion_BLE1并替换原有文件

找到host_config.h文件

将原有的宏定义改为#define BLE_CURRENT_PROFILE_ROLES  (HID_DEVICE) /* not supported by L0 */

image001.png

为了方便调试可以把低功耗关闭方法是把main.c里的#define LOW_POWER_ENABLED 改为0

image002.png

注释掉主while里的LPM_Enter_Mode();

image003.png

Hid_profile_application.c#define KEYBOARD_IP 是键盘例程//#define MOUSE_IP是鼠标例程

if (send_measurement != 0){}用来判断是否有按键按下,因为SensorTile没有物理按键可以把这个判断改成if (send_measurement == 0),这样就会一直发送指定按键

image004.png

找到STM32CubeExpansion_BLE1_V2.8.0\Projects\Multi\Applications\Profiles_LowPower\EWARM目录

复制STM32L476RG-Nucleo并改名为STM32L476RG-SensorTile

image005.png

 

找一个包含有SensorTile项目的例程,比如BlueMicrosystem2

打开SensorTile_BlueNRG.h

image006.png

 

复制里边SPI部分的宏定义

// SPI Instance

#define BNRG_SPI_INSTANCE           SPI1

#define BNRG_SPI_CLK_ENABLE()       __SPI1_CLK_ENABLE()

 

// SPI Configuration

#define BNRG_SPI_MODE               SPI_MODE_MASTER

#define BNRG_SPI_DIRECTION          SPI_DIRECTION_2LINES

#define BNRG_SPI_DATASIZE           SPI_DATASIZE_8BIT

#define BNRG_SPI_CLKPOLARITY        SPI_POLARITY_LOW

#define BNRG_SPI_CLKPHASE           SPI_PHASE_1EDGE

#define BNRG_SPI_NSS                SPI_NSS_SOFT

#define BNRG_SPI_FIRSTBIT           SPI_FIRSTBIT_MSB

#define BNRG_SPI_TIMODE             SPI_TIMODE_DISABLED

#define BNRG_SPI_CRCPOLYNOMIAL      7

#define BNRG_SPI_BAUDRATEPRESCALER  SPI_BAUDRATEPRESCALER_16

#define BNRG_SPI_CRCCALCULATION     SPI_CRCCALCULATION_DISABLED

 

// SPI Reset Pin: PH.0

#define BNRG_SPI_RESET_PIN          GPIO_PIN_0

#define BNRG_SPI_RESET_MODE         GPIO_MODE_OUTPUT_PP

#define BNRG_SPI_RESET_PULL         GPIO_PULLUP

#define BNRG_SPI_RESET_SPEED        GPIO_SPEED_LOW

#define BNRG_SPI_RESET_ALTERNATE    0

#define BNRG_SPI_RESET_PORT         GPIOH

#define BNRG_SPI_RESET_CLK_ENABLE() __GPIOH_CLK_ENABLE()

 

// SCLK: PA.5

#define BNRG_SPI_SCLK_PIN           GPIO_PIN_5

#define BNRG_SPI_SCLK_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_SCLK_PULL          GPIO_PULLDOWN

#define BNRG_SPI_SCLK_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_SCLK_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_SCLK_PORT          GPIOA

#define BNRG_SPI_SCLK_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// MISO (Master Input Slave Output): PA.6

#define BNRG_SPI_MISO_PIN           GPIO_PIN_6

#define BNRG_SPI_MISO_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_MISO_PULL          GPIO_NOPULL

#define BNRG_SPI_MISO_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_MISO_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_MISO_PORT          GPIOA

#define BNRG_SPI_MISO_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// MOSI (Master Output Slave Input): PA.7

#define BNRG_SPI_MOSI_PIN           GPIO_PIN_7

#define BNRG_SPI_MOSI_MODE          GPIO_MODE_AF_PP

#define BNRG_SPI_MOSI_PULL          GPIO_NOPULL

#define BNRG_SPI_MOSI_SPEED         GPIO_SPEED_HIGH

#define BNRG_SPI_MOSI_ALTERNATE     GPIO_AF5_SPI1

#define BNRG_SPI_MOSI_PORT          GPIOA

#define BNRG_SPI_MOSI_CLK_ENABLE()  __GPIOA_CLK_ENABLE()

 

// NSS/CSN/CS: PB.2

#define BNRG_SPI_CS_PIN             GPIO_PIN_2

#define BNRG_SPI_CS_MODE            GPIO_MODE_OUTPUT_PP

#define BNRG_SPI_CS_PULL            GPIO_PULLUP

#define BNRG_SPI_CS_SPEED           GPIO_SPEED_HIGH

#define BNRG_SPI_CS_ALTERNATE       0

#define BNRG_SPI_CS_PORT            GPIOB

#define BNRG_SPI_CS_CLK_ENABLE()    __GPIOB_CLK_ENABLE()

 

// IRQ: PC.5

#define BNRG_SPI_IRQ_PIN            GPIO_PIN_5

#define BNRG_SPI_IRQ_MODE           GPIO_MODE_IT_RISING

#define BNRG_SPI_IRQ_PULL           GPIO_NOPULL

#define BNRG_SPI_IRQ_SPEED          GPIO_SPEED_HIGH

#define BNRG_SPI_IRQ_ALTERNATE      0

#define BNRG_SPI_IRQ_PORT           GPIOC

#define BNRG_SPI_IRQ_CLK_ENABLE()   __GPIOC_CLK_ENABLE()

 

// EXTI External Interrupt for SPI

// NOTE: if you change the IRQ pin remember to implement a corresponding handler

// function like EXTI0_IRQHandler() in the user project

#define BNRG_SPI_EXTI_IRQn          EXTI9_5_IRQn

#define BNRG_SPI_EXTI_IRQHandler    EXTI9_5_IRQHandler

#define BNRG_SPI_EXTI_PIN           BNRG_SPI_IRQ_PIN

#define BNRG_SPI_EXTI_PORT          BNRG_SPI_IRQ_PORT

 

#define RTC_WAKEUP_IRQHandler       RTC_WKUP_IRQHandler

 

再打开刚才复制的项目

STM32CubeExpansion_BLE1_V2.8.0\Projects\Multi\Applications\Profiles_LowPower\EWARM\STM32L476RG-SensorTile

打开stm32l4xx_nucleo_bluenrg.h文件,用刚才复制的SPI宏定义替换

运行代码,手机搜索就会发现HID设备

image007.png

点击,连接

image008.png

 

找一个能输入文本的地方,可以看到手机下边的虚拟键盘变成物理键盘的样式

image009.png

 

image010.png

STM32CubeExpansion_BLE1_V2.8.0(修改好的HID例程).rar

22.52 MB, 下载次数: 36

虾扯蛋


回复

使用道具 举报

150

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-4-12 09:38:39 | 显示全部楼层
好东西啊,正需要,谢谢分享


回复

使用道具 举报

150

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-4-19 22:37:30 | 显示全部楼层
对比了一下两个代码包,其实就差了一个drivers目录,是不是把BLE1里面的drivers目录copy过来也行呢?

点评

他俩是相互依赖关系 只要能牵手成功 谁去谁家都可以  详情 回复 发表于 2017-4-20 07:48


回复

使用道具 举报

5201

TA的帖子

9

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2017-4-20 07:48:02 来自手机 | 显示全部楼层


他俩是相互依赖关系 只要能牵手成功 谁去谁家都可以


回复

使用道具 举报

186

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-4-21 13:12:07 | 显示全部楼层
学习下。


回复

使用道具 举报

1473

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-5-5 09:52:47 | 显示全部楼层
资料非常的不错哦大力的顶一下


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-2 22:21:12 | 显示全部楼层
学习一下 。


回复

使用道具 举报

152

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-4-3 14:10:11 | 显示全部楼层
HID是好东西,不用安装驱动


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-4-8 09:54:51 | 显示全部楼层
蛮好~~~~~,学习


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-16 11:28:21 | 显示全部楼层
感觉好乱,照着做都不知道如何下手。


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-16 16:23:34 | 显示全部楼层
键盘终于可以了,再试试鼠标会怎么样

点评

nmg
要不要开贴分享下,哈哈  详情 回复 发表于 2018-4-16 22:14


回复

使用道具 举报

3323

TA的帖子

165

TA的资源

管理员

Rank: 13Rank: 13Rank: 13Rank: 13

发表于 2018-4-16 22:14:48 | 显示全部楼层
kangear 发表于 2018-4-16 16:23
键盘终于可以了,再试试鼠标会怎么样

要不要开贴分享下,哈哈


回复

使用道具 举报

43

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-4-17 11:40:34 | 显示全部楼层
本帖最后由 kangear 于 2018-4-17 11:41 编辑
nmg 发表于 2018-4-16 22:14
要不要开贴分享下,哈哈

我啥也木有作,就是把他的程序编译了一点,烧写到板子里,可以了。只不过我之前使用的是mdk,他使用的是IAR,我又重新熟悉了IAR,才把他的程序编译通过了。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-20 12:17 , Processed in 0.392120 second(s), 20 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表