基于MM32W系列开发的蓝牙自拍杆应用
0 2023-03-21

在前面一章中我们已经详细介绍了我们基于MM32W系列开发的智能灯控方案,在本章节我们将介绍一款大家生活中很常见的一个蓝牙产品的应用方案,基于MM32W系列开发的蓝牙自拍杆应用。

基于蓝牙技术的蓝牙自拍杆可以进行远距离拍照,不用担心因为线材等因素的约束,且本方案无需专门的手机APP,可直接使用系统内的蓝牙连接。该方案在开发、测试、使用操作阶段都比较简单,且操作迅速,能够适用大部分的场景、方便人们的生活。

硬件资源:

本方案基于MM32 BLE_Test Board进行测试验证,蓝牙自拍杆应用在硬件上只需要一个功能按键即可,蓝牙部分使用蓝牙控制的最小系统,我们将这个按键接到MCU的PA0引脚,既可以用做唤醒引脚使用,又可以用做自拍的功能引脚。


图1 测试开发板

软件资源:

将PA0配置为下拉输入模式,复用中断线到PA0并配置外部中断线中断,最后使能PWR时钟与WakeUp引脚。详细代码如下:

do {

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//使能GPIOA

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;  //PA.0

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//下拉输入

GPIO_Init(GPIOA, &GPIO_InitStructure);         //初始化IO

} while(0);

do {

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能复用功能时钟

 

    //使用外部中断方式

SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);       //中断线0连接GPIOA.0

EXTI_InitStructure.EXTI_Line = EXTI_Line0;   //设置按键所有的外部线路

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;          //设外外部中断模式:EXTI线路为中断请求

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿触发

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);            // 初始化外部中断

} while(0);

do {

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn; //使能按键所在的外部中断通道

NVIC_InitStructure.NVIC_IRQChannelPriority = 2; //从优先级2级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道

NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

} while(0); 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);        //使能PWR外设时钟

PWR_WakeUpPinCmd(ENABLE);  //使能唤醒管脚功能

2、我们在gatt_user_send_notify_data_callback函数中给手机发送数据,该函数属于回调函数,协议栈会在系统允许的时候(异步)回调本函数,该函数可用于蓝牙模块端主动发送数据之用,函数内部不得增加阻塞代码。在蓝牙自拍杆应用中我们在该函数中判断PA0的电平状态,若按键按下则给手机发送按键按下信息。详细实现代码如下:

void gatt_user_send_notify_data_callback(void)

{

if (GPIO_ReadInputData(GPIOA) & 0x01)//press

{

NotifyKey(0x28);

NotifyApplePhoto();

}

}

u8 NotifyApplePhoto(void)//apple photo hid photo capture, hard code

{

u8 Keyarray[5] = {2,0,8,0,0}; //VolUp,hard code

sconn_notifydata(Keyarray,5);

Keyarray[2] = 0;

sconn_notifydata(Keyarray,5);

return 1;

}

 

u8 NotifyKey(u8 KeyIdx)//hid standard keyboard key, hard code

{

u8 Keyarray[9] = {1,0,0,0,0,0,0,0,0};//0xa1

Keyarray[3] = KeyIdx;

sconn_notifydata(Keyarray,9);

Keyarray[3] = 0;

sconn_notifydata(Keyarray,9);

return 1;

}

我们直接使用手机自带的蓝牙功能进行测试,操作流程如下:

1. 打开手机蓝牙并进入蓝牙控制界面,搜索自拍杆蓝牙设备。

2. 选择对应名称(MindMotion-Shutter)的蓝牙设备并进行配对。

3. 配对成功后打开手机相机界面,这个时候点击按键K1就可以进行拍照了。


图2 手机界面 
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 怎样才能快速学习8051单片机

    [导读]单片机是微机的一种,现时有8051、AVR、ARM7、ARM9等系列,其中 “8051”是源自于Intel公司的MCS-51系列芯片,但目前不同生产厂商

    06-02
  • 什么是DDR?DDR的分类有哪些?

    存储器可分为易失性存储器和非易失性存储器两类,前者在掉电后会失去记忆的数据,后者即使在切断电源也可以保持数据

    05-31
  • 51单片机RAM 数据存储区、位寻址区、数据缓冲区

    [导读]1.RAM keil C语言编程RAM是程序运行中存放随机变量的数据空间。在keil中编写程序,如果当前模式为small模式,如果总的变量大小未超过12

    05-30
  • STM32使用库函数驱动LED灯编写程序步骤

    [导读] 一、熟悉GPIO结构体以下这个结构体是我从官方手册中获取的:[cpp] view plain copy print?typedef struct{u1

    05-30
  • 你知道Linux下的ds18b20驱动吗?

    [导读]今天在各位前辈已有成就的基础上花了两天时间终于把这个驱动给搞定了,从开始编译成模块看效果,进行调试,再到编译进内核,最后又编译了一个界面出来,虽说大多数

    05-29
  • 一文区分AT89C51和AT89C52

    [导读]AT89C51和AT89C52是单片机的两种型号。主要区别是容量不同。at89c51最多支持4KB的程序,at89c52则最多支持8KB的程序。

    05-29
  • 功能强大的时钟中断应用分析

    [导读]在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的

    05-29
  • 一文告诉你MCS-51单片机有几个工作寄存器?

    [导读]工作寄存器有4组,每组都是8个工作寄存器R0~R7,通过PSW中的RS1、RS0两位来选择使用哪一组,如果不选,默认是选择第0组。

    05-29
  • 一文详解STC89C52单片机

    [导读]STC89C52单片机简介

    05-29
  • AVR单片机时熔丝位配置出现的一些问题分析

    [导读]AVR单片机的熔丝位配置是AVR单片机初学者很容易出错的地方,其实只要注意一些事项,还是能够尽量避免单片机被锁死,即使单片机被锁死,也可以使用一些方法解

    05-29
  • 一文详解STC89C52处理芯片

    [导读]主要性能: 与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、全静态操作:0Hz~33Hz 、三级加密程序存储

    05-29
  • 一文详细分析51单片机中断问题

    [导读]该寄存器用于设置定时/计数器的工作方式,低四位用于定时器0,高四位用于定时器1。 GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或

    05-29
下载排行榜
更多
广告