基于KT6368A芯片开发SOP8蓝牙自拍杆方案记录总结

一、简介

给客户开发一款蓝牙自拍杆的方案芯片,使用KT6368A单芯片解决。两种实现逻辑

1、由客户的遥控MCU来控制蓝牙芯片的开启和关闭

2、由KT6368A蓝牙芯片自己完成所有的事情,分两个按键,一个按键短按开机,短按关机。第二个按键实现拍照,这个蓝牙芯片关机必须低于4uA样子

  1. 最好预留一个蓝牙的指示灯,表示是否连接

产品最终选用CR3032的电池,所以非常的在意功耗

二、详细记录

2.1 程序开发记录

主体选择的程序的框架,以及demo例程

2.2 走的协议

==》测试安卓手机“小米12pro” 。对应的两个按键分别是“没有相机界面”是音量+和音量-

==》测试IOS的手机“iphone7”,也是可以拍照,搜索连接自然也没问题

==》测试小米7,发现自拍键变成了 相机延迟拍照,出现3-2-1的界面,再回去设置里面查看确实是因为“音量键”设置为 倒计时快门了,改成快门就OK了

三、实际开发记录--参数详解

方案细节确定如下:

1、由蓝牙芯片自己完成所有的事情,分两个按键,一个按键短按开机,短按关机 。第二个按键实现拍照

==》这个蓝牙芯片关机大概是4uA的样子

  1. 芯片的2脚LED,7脚【USB-DM】开关机按键,8脚【USB-DP】一个拍照 。空闲超过5分钟就自动关机

  1. 蓝牙名:Selfie mirror

3.0 测试环境

  1. 采用3.3V供电

  1. 去掉原本测试板上面的ME6208A的LDO,因为他也会产生功耗

3.1 功耗记录 --- 未连接

平均功耗在3mA左右

3.2 功耗记录 --- 连接edr--指示灯闪灯

这个就要看平均功耗了,大概在2ma的样子

3.3 功耗记录 --- 连接edr--指示灯熄灭

这个就要看平均功耗了,大概在2ma的样子

3.4 功耗记录 --- 关机-poweroff

关机功耗大概是在2ua的样子

3.5 其他注意事项-烧录-第一次开机等等细节

不同系列,最低档位对应电压是有差异的。各种不同供电电源应用,建议选择的LVD档位:

1、纽扣电池供电:选择1.7V档以上

2、锂电池供电:选择2.3V档位以上

3、5V转3.3V LDO供电:选择2.6V档位以上

4、电源上存在大电感、大电容供电:选择最高档位以上

==》芯片开机有个瞬态电流,建议客户选择脉冲电流为20mA 的纽扣电池。

==》第一次下载程序后,芯片会有蓝牙trim操作,此阶段会有大于20mA,且持续1-2秒大电流时间。

一般纽扣电池是带不动的。需要用3.3V的稳压源供电。

断电后,第二次及以后的开机,就可以用纽扣电池供电了。

### ESP32实现蓝牙功能 为了使ESP32能够作为蓝牙工作,需配置其为HID (Human Interface Device) 设备并发送特定的按键信号来模拟相机快门操作[^1]。 #### 配置ESP32蓝牙HID设备 通过Arduino IDE或其他开发环境安装`nimble`和`nimrod`库支持BLE HID特性。编写初始化代码设置ESP32进入广播模式等待连接: ```cpp #include "BluetoothSerial.h" #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it. #endif BluetoothSerial SerialBT; void setup() { Serial.begin(115200); if (!SerialBT.isEnabled()) { SerialBT.begin("ESP32SelfieStick"); // 蓝牙名称 } } ``` #### 发送照指令 定义函数用于触发摄动作,该函数会向配对成功的主机发送虚拟键码表示按下/释放快门按钮: ```cpp #define KEY_SHUTTER 0x7C // USB HID Usage ID for Camera Shutter void sendShutterPress(){ uint8_t report[] = {0, KEY_SHUTTER}; SerialBT.write(report,sizeof(report)); } void sendShutterRelease(){ uint8_t report[] = {0}; SerialBT.write(report,sizeof(report)); } ``` 当检测到用户交互事件(例如物理按钮按压),调用上述两个函数完成一次完整的快门控制过程。 #### 完整示例程序结构 将以上片段组合成可执行的应用程序框架如下所示: ```cpp // ... 上述包含头文件部分 ... const int buttonPin = GPIO_NUM_0; // 假设使用GPIO0作为输入端口读取开关状态 void loop() { static bool lastButtonState = false; bool currentButtonState = digitalRead(buttonPin); if(currentButtonState && !lastButtonState){ sendShutterPress(); delay(10); // 短暂延时防止抖动误触 sendShutterRelease(); } lastButtonState = currentButtonState; } ``` 此段代码展示了基本逻辑流程,在实际项目中可能还需要考虑更多细节优化用户体验以及稳定性处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值