基于 STM32F103C8T6 微控制器 + JDY-33 蓝牙模块 + React Native App 的全栈智能船舶控制系统。
本项目构建了一艘可通过手机蓝牙遥控的电动小船。硬件基于 STM32F103C8T6 Blue Pill 微控制器,搭配 JDY-33 蓝牙模块实现无线通讯,使用 TB6612 驱动直流推进电机、SG90 舵机控制航向。手机端采用 React Native 开发,支持体感操控与安全保护机制。
整个系统的设计涵盖了嵌入式固件开发、自定义蓝牙通讯协议、移动端 App 开发以及硬件电路设计四个核心领域。从最底层的 STM32 HAL 驱动配置,到手机 App 上的体感操控界面,再到两者之间可靠的四字节通讯协议,构成了一个完整的 IoT 原型系统。
项目已完成 App 端全部功能开发(蓝牙扫描连接、体感/滑块舵机控制、电机渐进控制、心跳包机制),并输出了完整的 STM32 固件框架(蓝牙协议解析、PWM 舵机/电机驱动、3 秒超时安全停机)。
从手机 App 到螺旋桨,数据经过 BLE 无线传输、串口通讯、STM32 指令解析、再到外设驱动,每层职责清晰。
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
React Native App
┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────┐
│ 蓝牙 │ │ 体感操控 │ │ 电机控制 │ │ 连接 │
│ 管理 │ │ 舵机控制 │ │ 渐进加速 │ │ 状态 │
└──┬─────┴───┘ └────────────┘ └────────────┘ └─────────┘
└─────────────┬─────────────────────────────────────────────────────┘
│ BLE Wireless
▼
┌─────────────────────────────────────────────────────────────┐
JDY-33 蓝牙模块
UART (9600 bps, 8N1)
└────────────────────────────┬───────────────────────────────────┘
│ PA9 (TX) / PA10 (RX)
▼
┌────────────────────────────────────────────────────┐
STM32F103C8T6
┌────────────┐ ┌────────────┐ ┌───────────────────┐
│ 协议解析 │ │ 舵机控制 │ │ 电机控制 │
│ 帧校验 │ │ TIM3_CH3 │ │ TIM2_CH2 + GPIO │
│ 心跳超时 │ │ PB0 │ │ PB1/PB2/PB3 │
└────────────┘ └─────┬───────┘ └───────┬──────────────────┘
└────────────────────────┬───────────────┬──────────────────────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ SG90 │ │ TB6612 │
│ 舵机 │ │ 电机驱动 │
│ 20°~160°│ │ + 直流电机│
└──────────┘ └──────────┘
上图展示了完整的硬件接线方案。STM32F103C8T6 作为主控制器,通过 USART1(PA9/PA10)与 JDY-33 蓝牙模块通讯,接收手机端发来的控制指令。PB0 输出 50Hz PWM 信号驱动 SG90 舵机控制航向;PB1/PB2 控制 TB6612 电机驱动器的方向逻辑,PB3 输出 1kHz PWM 信号控制电机转速。
系统由 4 节 Eneloop Pro AA 电池(串联约 5V)供电,经 AMS1117-3.3 稳压至 3.3V 供给 STM32 和蓝牙模块。SPI1 接口(PB8/PB9)连接 SSD1306 OLED 显示屏,实时显示蓝牙连接状态、舵机角度和电机功率等系统信息。所有连接均采用标准排针/杜邦线,方便调试和修改。
rudderAngle 变化[0xAA, 0x01, angle, checksum] 通过 BLE 发出0x01→ 设置舵机 PWM 占空比;0x02→ 设置电机方向 + PWM;0x03→ 刷新看门狗计时基于成本和易用性考量,主控选用 STM32F103C8T6 Blue Pill,蓝牙模块选用 JDY-33(穿透力强、稳定性好),电机驱动采用 TB6612FNG(3A 峰值电流)。
| 功能 | 引脚 | 外设 | 连接设备 |
|---|---|---|---|
| USART1_TX | PA9 | 串口发送 | JDY-33 RXD |
| USART1_RX | PA10 | 串口接收 | JDY-33 TXD |
| PWM 舵机 | PB0 | TIM3_CH3 | SG90 信号线 |
| 电机 IN1 | PB1 | GPIO | TB6612 IN1 |
| 电机 IN2 | PB2 | GPIO | TB6612 IN2 |
| 电机 PWM | PB3 | TIM2_CH2 | TB6612 PWMA |
| OLED RES | PB6 | GPIO | SSD1306 RES |
| OLED DC | PB7 | GPIO | SSD1306 DC |
| SPI1_SCK | PB8 | SPI1 | SSD1306 SCK |
| SPI1_MOSI | PB9 | SPI1 | SSD1306 SDA |
自定义蓝牙通讯协议,采用固定长度 4 字节帧,校验和确保数据完整性,适合低算力嵌入式环境。
| CMD | 命令 | DATA 范围 |
|---|---|---|
| 0x01 | 舵机控制 | 20~160(物理角度) |
| 0x02 | 电机控制 | 0x00=停止 · 0x01~0x64=前进 · 0x81~0xE4=后退 |
| 0x03 | 心跳包 | 0x00 |
STM32 端实现 3 秒无指令自动停机:超过 3 秒未收到任何有效指令(含心跳包),立即停止电机并将舵机回中至 90°。App 端每秒发送一次心跳包(CMD=0x03)维持连接。
使用 React Native 构建的跨平台遥控 App,集成蓝牙 BLE 连接、体感操控、渐进电机控制等完整功能链。
启动时自动请求蓝牙权限,扫描并连接附近的 JDY-33 设备。支持手动设备选择和连接状态实时显示。
已实现通过手机姿态传感器实时映射舵机角度(-70°~+70°),同时支持滑块手动控制,角度变化即时通过蓝牙发送。
已实现按住"全速前进"或"倒车后退"按钮,3 秒内 PWM 从 0 渐进到 100%。松开后以 2 倍速率快速减速至停止。互斥逻辑确保同时按住两个按钮时电机停止。
已实现蓝牙连接成功后每秒发送一次心跳包(CMD=0x03),确保 STM32 端的 3 秒超时安全机制不会误触发。
已实现STM32 端 SSD1306 OLED 显示屏实时显示蓝牙连接状态、当前舵机角度和电机功率百分比,方便调试和运行监控。
已实现