ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

基于STM32与蓝牙的防丢器设计:从原理到仿真的嵌入式开发实践

基于STM32与蓝牙的防丢器设计:从原理到仿真的嵌入式开发实践 在实际嵌入式开发项目中物品防丢是一个经典且实用的应用场景。无论是钥匙、钱包还是行李箱一个可靠的防丢器需要在成本、功耗和可靠性之间找到平衡。基于单片机和蓝牙技术来实现这一功能是许多电子爱好者、物联网初学者以及相关专业学生进行课程设计或毕业设计的常见选择。本文将以 STM32F103C8 这款高性价比的 ARM 单片机为核心结合蓝牙模块从零开始构建一个具备基础防丢功能的硬件原型并利用 Proteus 软件进行关键部分的仿真验证。整个过程不仅涉及硬件选型与电路设计还包括单片机固件开发、蓝牙通信协议应用以及简单的距离判断逻辑。通过本文你将能够理解防丢器的核心工作原理掌握 STM32 与蓝牙模块如 HC-05/HC-08的串口通信方法学会在固件中实现 RSSI接收信号强度指示信号采集与距离阈值判断并了解如何使用 Proteus 进行单片机核心逻辑的仿真。最终你将获得一个可以实际烧录、测试的防丢器原型方案为后续集成蜂鸣器报警、手机 APP 联动等更复杂功能打下坚实基础。1. 理解蓝牙防丢器的核心工作机制蓝牙防丢器并非一个独立的设备它通常需要与一个“主机”如手机配对工作构成一个简单的点对点监控系统。其核心逻辑是基于蓝牙信号的强度RSSI来估算从机防丢器与主机之间的距离当距离超过预设阈值时触发报警。1.1 系统组成与工作流程一个典型的蓝牙防丢器系统包含以下部分主控单片机MCU负责整个系统的逻辑控制如初始化外设、处理蓝牙数据、读取按键状态、驱动报警器等。STM32F103C8 因其性能、外设丰富度和生态成熟度成为热门选择。蓝牙从机模块如 HC-05、HC-08 或 CC2541 等。它负责与手机主机建立蓝牙连接并透传数据。在防丢器应用中它主要工作在“从机”模式等待手机连接并周期性地向手机报告自身的 RSSI 值或接收手机发送的查询指令。报警单元通常是一个无源蜂鸣器或有源蜂鸣器由单片机 GPIO 口通过三极管驱动用于在物品可能丢失时发出声音警报。电源管理采用纽扣电池如 CR2032供电因此低功耗设计至关重要涉及单片机睡眠模式、蓝牙模块低功耗模式的控制。主机设备手机APP作为监控端需要开发一个简单的 APP其核心功能是扫描并连接指定的防丢器实时读取其 RSSI 值并根据信号衰减程度判断距离在超出范围时发出提示声音、振动或通知。工作流程简述配对绑定首次使用时手机 APP 扫描并连接防丢器完成配对绑定记录设备 MAC 地址。连接监控防丢器上电后蓝牙模块自动进入广播或连接状态。手机 APP 在后台保持连接或周期性地扫描并读取已绑定设备的 RSSI。距离判断手机 APP 根据读取到的 RSSI 值通过一定的算法如经验公式、滤波算法估算物理距离。报警触发当估算距离超过预设的“安全距离”如 10 米手机 APP 发出警报。同时防丢器本身也可以根据是否与主机断连或信号过弱自行启动蜂鸣器报警双端报警更可靠。1.2 关键技术与挑战RSSI 测距蓝牙防丢器的精度和可靠性很大程度上取决于 RSSI 测距的准确性。RSSI 值受环境影响极大包括障碍物、信号反射、同频干扰等。原理RSSI 是接收机测量到的信号功率强度单位为 dBm。理论上距离越远信号衰减越大RSSI 值越小越负。不精确性它只能提供一个粗略的距离估计无法像 UWB 那样精确定位。通常用于“近场/远场”的区间判断而非精确米数。软件处理为了提高判断的稳定性固件或 APP 端需要对 RSSI 值进行软件滤波如移动平均滤波、卡尔曼滤波以消除瞬时波动带来的误报警。在本文的原型设计中我们将简化处理使用一个固定的 RSSI 阈值作为“距离过远”的判断依据重点放在系统搭建和通信流程上。2. 硬件设计与核心元件选型在动手编写代码之前合理的硬件设计是项目成功的基石。本节将详细说明核心元件的选型依据、电路连接要点并提供 Proteus 仿真所需的元件模型思路。2.1 主控单片机STM32F103C8T6我们选择 STM32F103C8T6简称 STM32F103C8作为主控其核心优势在于性价比高基于 ARM Cortex-M3 内核72MHz 主频性能足以处理蓝牙串口通信和逻辑控制。资源丰富64KB Flash20KB RAM拥有多个 USART、I2C、SPI、定时器非常适合连接各种外设。开发生态成熟支持 STM32CubeMX 图形化配置、HAL 库/标准库资料和社区资源极其丰富。在 Proteus 中可以找到STM32F103C6模型与 C8 资源相近可替代用于仿真逻辑。若仿真复杂外设可能需要加载更具体的模型文件。2.2 蓝牙模块HC-05 或 JDY-31对于学习和原型开发HC-05经典或 JDY-31较新功耗更低这类串口透传模块是最佳选择。接口简单通过 UART (TX/RX) 与单片机连接使用 AT 指令集进行配置如修改波特率、设备名称、配对码。工作模式支持主、从、主从一体模式。在防丢器中我们将其配置为“从机模式”等待手机连接。关键参数工作电压通常 3.3V - 5V注意与 STM32 电平匹配建议都使用 3.3V。通信接口UART默认波特率常为 9600 或 38400。配对默认配对码常为 “1234” 或 “0000”。连接电路示意图核心部分STM32F103C8 HC-05 蓝牙模块 PA9 (USART1_TX) ---- RXD PA10(USART1_RX) ---- TXD 3.3V ---- VCC GND ---- GND注意务必确认蓝牙模块的逻辑电平。若模块是 5V TTL而 STM32 是 3.3V直接连接可能损坏 STM32需要使用电平转换电路或选择 3.3V 版本的模块。2.3 报警与交互单元蜂鸣器选择无源蜂鸣器。有源蜂鸣器通电即响频率固定无源蜂鸣器需要单片机产生 PWM 驱动才能发声可以控制音调和节奏更灵活。驱动时需通过一个 NPN 三极管如 S8050或 MOS 管来放大电流。STM32 GPIO (e.g., PB8) - 电阻(1k) - 三极管基极(B) 三极管集电极(C) - 蜂鸣器负极 - GND 蜂鸣器正极 - VCC (3.3V/5V) 三极管发射极(E) - GNDLED 指示灯用于指示系统状态如电源、蓝牙连接状态、报警状态。连接一个限流电阻220Ω-1kΩ到 GPIO 口即可。按键用于功能控制如开关机、清除报警、进入配对模式等。使用 GPIO 输入模式外部上拉或下拉电阻防抖动。2.4 电源设计考虑若采用纽扣电池CR2032标称 3V需要考虑其带载能力。STM32 和蓝牙模块在射频发射时峰值电流可能超过 100mA而 CR2032 不适合大电流持续放电。原型阶段可使用锂电池如 3.7V 10440或 USB 供电。若追求低功耗需深入设计让 STM32 大部分时间处于STOP或SLEEP模式。使用蓝牙模块的ATSLEEP等指令使其进入低功耗模式。采用 MOSFET 电路周期性地给蓝牙模块供电。3. 软件开发环境与工程配置硬件设计完成后我们需要搭建软件开发环境并创建工程。这里以 Keil MDK-ARM (uVision) 作为 IDE使用 STM32CubeMX 进行初始化代码生成。3.1 开发环境准备清单工具/软件版本建议用途说明STM32CubeMXv6.x图形化配置 STM32 引脚、时钟、外设生成初始化代码。Keil uVisionMDK-ARM v5.x集成开发环境用于编写、编译、调试代码。需安装对应器件包。STM32F1xx HAL/LL 库随 CubeMX 安装ST 提供的硬件抽象层库简化外设操作。串口调试助手SSCOM、XCOM 等用于调试蓝牙模块 AT 指令和查看单片机打印信息。ST-LINK/V2 调试器-用于程序下载和调试。Proteus8.x / 9.x用于电路原理图设计和单片机程序仿真。3.2 使用 STM32CubeMX 创建工程新建项目打开 CubeMX选择STM32F103C8Tx。系统核心配置SYS: 在Debug下拉框选择Serial Wire以启用 SWD 下载调试接口。RCC: 在High Speed Clock (HSE)选择Crystal/Ceramic Resonator因为我们通常使用外部 8MHz 晶振。外设配置USART1: 配置为Asynchronous模式。波特率设为9600与蓝牙模块默认匹配。将 PA9 和 PA10 自动映射为USART1_TX和USART1_RX。GPIO: 配置一个 GPIO 输出引脚如 PB8用于驱动蜂鸣器配置一个 GPIO 输入引脚如 PB9 上拉模式作为按键。时钟树将 HCLK 设置为最大 72MHz。生成代码在Project Manager标签页设置项目名称、路径选择MDK-ARM作为 Toolchain / IDE。在Code Generator标签页选择“为每个外设生成独立的.c/.h文件”。点击GENERATE CODE生成 Keil 工程。3.3 工程代码结构生成的工程通常包含以下关键目录和文件Your_Project/ ├── Core/ │ ├── Inc/ │ │ ├── main.h │ │ ├── stm32f1xx_hal_conf.h │ │ └── ... (其他外设头文件) │ ├── Src/ │ │ ├── main.c // 主循环和初始化后代码 │ │ ├── stm32f1xx_hal_msp.c // 硬件底层初始化 │ │ ├── stm32f1xx_it.c // 中断服务函数 │ │ └── ... (其他外设源文件) │ └── Startup/ // 启动文件 ├── Drivers/ │ ├── CMSIS/ // Cortex-M 核心支持 │ └── STM32F1xx_HAL_Driver/ // HAL 库文件 └── MDK-ARM/ // Keil 工程文件我们的主要工作将在Core/Src/main.c和自行添加的模块文件中进行。4. 核心固件开发驱动与逻辑实现接下来我们在 Keil 工程中编写防丢器的核心功能代码。主要任务包括初始化、蓝牙数据收发处理、RSSI 获取模拟、距离判断与报警控制。4.1 蓝牙模块初始化与通信首先我们需要确保单片机与蓝牙模块能正常通信。通常蓝牙模块上电即工作但我们可能需要在代码中发送 AT 指令进行配置如修改设备名。在main.c的/* USER CODE BEGIN 2 */区域添加 USART 初始化后的测试代码// 发送 AT 指令测试蓝牙模块可选 char at_cmd[] AT\r\n; // 注意指令需要以回车换行结尾 HAL_UART_Transmit(huart1, (uint8_t*)at_cmd, strlen(at_cmd), 1000); HAL_Delay(100); // 可以开启串口中断来接收模块的响应 OK\r\n更实际的做法是我们主要利用蓝牙模块的透传功能。当手机与模块连接后手机发送的数据会通过串口传给单片机单片机发送到串口的数据也会传给手机。我们需要启用串口接收中断以实时处理手机发来的指令例如手机 APP 发送一个特定字符‘A’来查询状态。// 在 main.c 的变量定义区 uint8_t uart_rx_buffer[64]; uint8_t uart_rx_len 0; // 在初始化后/* USER CODE BEGIN 2 */开启接收中断 HAL_UART_Receive_IT(huart1, uart_rx_buffer, 1); // 每次接收一个字节触发中断 // 在 stm32f1xx_it.c 中找到 USART1_IRQHandler 函数确保其调用了 HAL_UART_IRQHandler // 重写 HAL_UART_RxCpltCallback 回调函数在 main.c 中 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart-Instance USART1) { // 处理接收到的字节 uart_rx_buffer[0] if(uart_rx_buffer[0] A) // 示例收到查询指令 { // 可以回复当前状态例如“CONNECTED”或 RSSI 值 char reply[] STATUS:OK\r\n; HAL_UART_Transmit(huart1, (uint8_t*)reply, strlen(reply), 100); } // 重新启动接收中断等待下一个字节 HAL_UART_Receive_IT(huart1, uart_rx_buffer, 1); } }4.2 模拟 RSSI 获取与距离判断在实际项目中RSSI 值应由蓝牙模块自身提供。有些模块如 CC2541可以通过特定 AT 指令如ATRSSI?查询当前连接的 RSSI。对于 HC-05可能需要更复杂的底层协议。为了简化原型我们模拟一个 RSSI 值的变化过程。我们创建一个函数来“模拟”获取 RSSI并基于一个固定阈值进行判断。// 在 main.c 的 /* USER CODE BEGIN PV */ 区域定义变量 #define RSSI_THRESHOLD (-70) // 阈值假设 RSSI 低于-70dBm认为距离过远 int8_t simulated_rssi -50; // 模拟的 RSSI 值初始在“近处” uint8_t is_alarm_on 0; // 报警标志 // 模拟更新 RSSI 的函数实际应由蓝牙事件触发 void Update_RSSI_Simulation(void) { // 这里可以模拟 RSSI 的随机波动或根据某种逻辑变化 // 例如每过一段时间让 RSSI 逐渐变小变远 static uint32_t last_tick 0; if(HAL_GetTick() - last_tick 5000) // 每5秒变化一次 { last_tick HAL_GetTick(); simulated_rssi - 5; // 每次减弱5dBm if(simulated_rssi -100) simulated_rssi -40; // 模拟重新靠近 } } // 距离判断与报警控制函数 void Check_Distance_And_Alarm(void) { Update_RSSI_Simulation(); // 更新模拟值 if(simulated_rssi RSSI_THRESHOLD) { // 信号弱认为距离过远触发报警 if(!is_alarm_on) { is_alarm_on 1; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 开启蜂鸣器 // 可以通过串口上报报警状态 char alarm_msg[] [ALARM] Distance too far!\r\n; HAL_UART_Transmit(huart1, (uint8_t*)alarm_msg, strlen(alarm_msg), 100); } } else { // 信号强在安全距离内关闭报警 if(is_alarm_on) { is_alarm_on 0; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); // 关闭蜂鸣器 char safe_msg[] [SAFE] In range.\r\n; HAL_UART_Transmit(huart1, (uint8_t*)safe_msg, strlen(safe_msg), 100); } } }4.3 主循环与按键处理在main.c的while (1)主循环中我们需要周期性地执行距离检查并处理按键事件例如按键按下时关闭报警或进入配对模式。// 在 main.c 的 /* USER CODE BEGIN WHILE */ 区域 while (1) { // 1. 周期性地检查距离例如每1秒一次 static uint32_t last_check 0; if(HAL_GetTick() - last_check 1000) { last_check HAL_GetTick(); Check_Distance_And_Alarm(); } // 2. 按键扫描消抖处理 if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) GPIO_PIN_RESET) // 假设按键按下为低电平 { HAL_Delay(50); // 简单延时消抖 if(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) GPIO_PIN_RESET) { // 按键确认按下 // 功能关闭当前报警 is_alarm_on 0; HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); // 发送按键事件到手机可选 char key_msg[] [KEY] Alarm cleared.\r\n; HAL_UART_Transmit(huart1, (uint8_t*)key_msg, strlen(key_msg), 100); // 等待按键释放 while(HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) GPIO_PIN_RESET); HAL_Delay(50); } } // 其他任务... HAL_Delay(10); // 释放 CPU 控制权 }5. Proteus 仿真验证在将程序下载到实物开发板之前使用 Proteus 进行仿真可以快速验证核心逻辑的正确性尤其是 GPIO 控制、串口通信等部分。5.1 Proteus 电路图设计放置元件在元件库中搜索并放置STM32F103C6作为 C8 的仿真替代。放置VIRTUAL TERMINAL虚拟终端用于模拟串口数据收发。放置BUZZER蜂鸣器、LED、BUTTON按键。放置RES电阻、NPN三极管如 2N2222用于驱动蜂鸣器。连接电路将 STM32 的PA9(USART1_TX) 连接到VIRTUAL TERMINAL的RXD。将 STM32 的PA10(USART1_RX) 连接到VIRTUAL TERMINAL的TXD。按前述原理图连接蜂鸣器驱动电路STM32 GPIO - 电阻 - 三极管基极蜂鸣器接在三极管集电极和 VCC 之间。连接按键和 LED 到对应的 GPIO并加上拉/下拉电阻。配置元件双击VIRTUAL TERMINAL设置波特率与代码中一致如 9600。为 STM32 芯片加载我们编译生成的.hex文件Keil 编译后在工程目录的Objects文件夹下。5.2 仿真运行与调试点击 Proteus 的运行按钮。虚拟终端窗口会打开显示单片机通过串口发送的数据例如[SAFE] In range.和[ALARM] Distance too far!。你可以观察 LED 或蜂鸣器在 Proteus 中蜂鸣器符号会变化表示发声的状态是否随模拟的 RSSI 变化而改变。可以点击按键观察虚拟终端是否收到[KEY] Alarm cleared.消息同时蜂鸣器是否停止。通过仿真我们验证了主控逻辑、串口通信和 GPIO 控制功能基本正常。这大大降低了硬件调试阶段的风险。6. 实物制作、测试与常见问题排查仿真通过后可以将程序通过 ST-LINK 下载到真实的 STM32F103C8T6 核心板或最小系统板连接真实的蓝牙模块、蜂鸣器进行测试。6.1 硬件连接检查清单在给系统上电前务必逐项检查[ ]电源STM32 和蓝牙模块的 VCC、GND 连接正确且电压匹配建议统一 3.3V。[ ]串口交叉STM32 的 TX 接蓝牙模块的 RXSTM32 的 RX 接蓝牙模块的 TX。[ ]驱动电路蜂鸣器驱动三极管的基极限流电阻已连接蜂鸣器极性正确有源蜂鸣器分正负无源不分但驱动方式不同。[ ]下载接口ST-LINK 的 SWDIO、SWCLK、GND、3.3V 与目标板连接正确。[ ]按键上拉/下拉按键 GPIO 配置为上拉输入则外部接下拉电阻到 GND反之亦然。6.2 上电测试流程供电测试先不接蓝牙模块和蜂鸣器只给 STM32 上电测量其 3.3V 输出是否正常。程序下载使用 Keil 或 STM32CubeProgrammer 将.hex或.bin文件下载到单片机。串口日志将 STM32 的串口PA9/PA10通过 USB-TTL 模块连接到电脑打开串口调试助手设置正确波特率查看单片机打印的启动信息和状态信息。蓝牙配对给蓝牙模块上电。手机打开蓝牙设置搜索附近设备应能找到模块默认名称可能是HC-05。点击配对输入配对码如1234。功能验证手机与模块配对连接后单片机串口应能收到连接成功的提示取决于模块有些模块会通过串口发送CONNECT等字符串。尝试让手机远离蓝牙模块观察串口输出的 RSSI 模拟值变化以及蜂鸣器是否在“信号变弱”时响起。按下防丢器上的按键蜂鸣器应停止串口应有相应提示。6.3 常见问题与排查路径问题现象可能原因排查步骤单片机无法下载程序1. 下载器连接错误或损坏。2. 芯片 BOOT 模式不对。3. 芯片已锁。1. 检查 SWD 四根线连接。2. 确保 BOOT0 下拉接 GNDBOOT1 任意。3. 尝试使用串口 ISP 方式下载一个简单程序解锁。串口无任何输出1. 串口线接错TX/RX 反。2. 波特率不匹配。3. 代码中串口未初始化或初始化参数错误。4. 虚拟终端Proteus或 USB-TTL 模块故障。1. 交换 TX/RX 线序测试。2. 在代码和调试助手中尝试常用波特率9600, 115200。3. 检查 CubeMX 中 USART 配置和代码中的huart1初始化。4. 用 USB-TTL 模块的 TX/RX 短接自测。蓝牙模块无法被手机搜索到1. 模块未进入配对模式指示灯慢闪。2. 模块已记忆并自动连接上次设备。3. 模块损坏或型号不支持从机模式。1. 检查模块状态灯。对于 HC-05未配对时指示灯应慢闪约2秒一次。2. 尝试给模块断电再上电或按住模块上的按键再上电进入 AT 模式快闪用串口发送ATROLE0设为从机、ATRESET重置。3. 查阅模块数据手册。手机已连接但单片机收不到数据1. 手机 APP 发送的数据格式不对如缺少回车换行。2. 单片机串口接收中断未正确开启或处理。3. 蓝牙模块与单片机电平不匹配。1. 用串口调试助手模拟手机直接向模块 TX 脚发送数据看单片机能否收到。2. 检查代码中HAL_UART_Receive_IT是否调用中断回调函数是否被触发。3. 测量蓝牙模块 TX 脚在空闲和发送时的电压。蜂鸣器不响或常响1. 驱动电路错误三极管未导通或击穿。2. GPIO 输出模式配置错误应为推挽输出。3. 蜂鸣器类型选错无源需 PWM有源只需电平。4. 代码中控制逻辑反了SET/RESET 颠倒。1. 用万用表测量三极管 B、C、E 极电压。2. 检查 CubeMX 中 GPIO 配置。3. 确认蜂鸣器类型有源蜂鸣器加电即响。4. 在调试中手动控制 GPIO 输出高低电平测试。系统功耗过高电池消耗快1. 未启用单片机低功耗模式。2. 蓝牙模块未进入低功耗模式。3. 外围电路如 LED、稳压芯片静态电流大。1. 在代码中合适位置调用HAL_PWR_EnterSTOPMode等函数。2. 查询蓝牙模块 AT 指令发送睡眠指令如ATSLEEP。3. 测量各部件静态电流优化电路。7. 项目优化与扩展方向完成基础原型后可以从以下几个方面进行优化和功能扩展使其更接近一个可用的产品。7.1 软件优化增加可靠性RSSI 滤波算法使用移动平均滤波或一阶低通滤波来处理原始的 RSSI 值避免因信号瞬时波动导致的误报警。#define FILTER_ALPHA 0.2f // 滤波系数 float filtered_rssi -50.0f; // 滤波后的 RSSI void Filter_RSSI(int8_t raw_rssi) { filtered_rssi FILTER_ALPHA * raw_rssi (1 - FILTER_ALPHA) * filtered_rssi; }连接状态管理不仅依赖 RSSI还要监控蓝牙链路连接状态。如果连接断开应立即报警。这可以通过监测蓝牙模块串口输出的特定字符串如LOST、DISCONNECT来实现。多种报警模式除了蜂鸣器可以增加 LED 闪烁模式快闪报警、慢闪待机、震动马达如果集成并通过不同节奏区分“寻找中”和“已丢失”状态。低功耗优化在蓝牙连接稳定且距离安全时让 STM32 进入STOP模式通过蓝牙模块的STATE引脚中断或定时器唤醒。周期性地唤醒读取 RSSI 并判断然后再次睡眠。7.2 硬件优化提升实用性小型化设计将 STM32 最小系统、蓝牙模块、蜂鸣器、电池管理集成到一块小的 PCB 上并使用贴片元件。电源管理芯片使用高效率、低静态电流的 LDO 或 DC-DC 芯片为系统供电并设计充电电路如果使用锂电池。外壳与结构设计 3D 打印外壳考虑天线位置远离金属和电池以优化蓝牙信号。7.3 功能扩展增加智能化手机 APP 开发开发一个简单的 Android 或 iOS APP实现以下功能扫描并连接指定防丢器。实时显示 RSSI 值和估算距离。自定义报警距离阈值。防丢器报警时APP 端也发出通知。通过 APP 远程让防丢器蜂鸣器响铃便于寻找。多设备与网络设计一个可同时管理多个防丢器的基站通过 WiFi 或蜂窝网络将状态上报到云端实现远程监控。集成其他传感器加入加速度计实现“移动报警”物品被拿走时震动触发或“静止提醒”长时间未移动提醒。从单片机选型、电路设计、固件开发到仿真测试构建一个蓝牙防丢器的过程涵盖了嵌入式开发的核心技能链。这个项目清晰地展示了如何将一个具体的需求转化为软硬件协同工作的产品原型。在实际开发中最大的挑战往往不是功能实现而是稳定性、功耗和抗干扰能力的打磨。建议在完成基础功能后重点投入对 RSSI 算法的优化和低功耗设计的研究这是区分玩具和实用产品的关键。下一步可以尝试将主控更换为更擅长低功耗和蓝牙协议的芯片如 Nordic 的 nRF52 系列或 TI 的 CC2640并深入学习蓝牙协议栈从而开发出性能更优、功能更丰富的产品。
返回列表