基于藍牙技術的藍牙自拍桿可以進行遠距離拍照,不用擔心因為線材等因素的約束,且本方案無需專門的手機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 手機界面
歡迎加入EEWorld參考設計群,也許能碰到搞同一個設計的小伙伴,群聊設計經驗和難點。 入群方式:微信搜索“helloeeworld”或者掃描二維碼,備注:參考設計,即可被拉入群。 另外,如您在下載此設計遇到問題,也可以微信添加“helloeeworld”及時溝通。
EEWorld Datasheet 技術支持