一、内容
内容组成
- 硬件平台:nrf51822蓝牙开发板或STM32F103系列
- 软件部分:STM32源程序、蓝牙4.0开发APK、微信小程序源码
- 功能模块:继电器控制、温度采集、蓝牙通信、手机APP控制
二、核心代码实现
1. STM32蓝牙继电器控制主程序(HAL库)
c
#include "main.h"
#include "relay.h"
#include "bluetooth.h"
// 继电器初始化
void Relay_Init(void)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pin = GPIO_PIN_0;
GPIO_InitStructure.Pull = GPIO_PULLUP;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
}
// 蓝牙命令处理
void Bluetooth_Command_Handler(uint8_t cmd)
{
switch(cmd)
{
case 'A': // 打开继电器1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
printf("Relay1 ON\r\n");
break;
case 'B': // 关闭继电器1
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
printf("Relay1 OFF\r\n");
break;
case 'C': // 打开继电器2
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
printf("Relay2 ON\r\n");
break;
case 'D': // 关闭继电器2
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
printf("Relay2 OFF\r\n");
break;
}
}
// 串口接收中断回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
uint8_t rx_data;
HAL_UART_Receive_IT(&huart1, &rx_data, 1);
Bluetooth_Command_Handler(rx_data);
}
}
2. 51单片机蓝牙继电器控制
c
#include <reg52.h>
sbit Relay1 = P1^0;
sbit Relay2 = P1^1;
void UART_Init(void)
{
TMOD = 0x20; // 定时器1工作方式2
TH1 = 0xFD; // 9600波特率@11.0592MHz
TL1 = 0xFD;
TR1 = 1;
SCON = 0x50; // 串口方式1,允许接收
ES = 1; // 允许串口中断
EA = 1; // 开总中断
}
void UART_Interrupt(void) interrupt 4
{
if(RI == 1)
{
RI = 0;
switch(SBUF)
{
case '1': Relay1 = 0; break; // 打开继电器1
case '2': Relay1 = 1; break; // 关闭继电器1
case '3': Relay2 = 0; break; // 打开继电器2
case '4': Relay2 = 1; break; // 关闭继电器2
}
}
}
3. Arduino蓝牙继电器控制
c
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(10, 11); // RX=10, TX=11
#define RELAY1_PIN 7
#define RELAY2_PIN 8
void setup()
{
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, HIGH); // 初始关闭
digitalWrite(RELAY2_PIN, HIGH);
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop()
{
if(bluetooth.available())
{
char command = bluetooth.read();
switch(command)
{
case 'A':
digitalWrite(RELAY1_PIN, LOW);
Serial.println("Relay1 ON");
break;
case 'B':
digitalWrite(RELAY1_PIN, HIGH);
Serial.println("Relay1 OFF");
break;
case 'C':
digitalWrite(RELAY2_PIN, LOW);
Serial.println("Relay2 ON");
break;
case 'D':
digitalWrite(RELAY2_PIN, HIGH);
Serial.println("Relay2 OFF");
break;
}
}
}
三、蓝牙4.0开发软件
1. Android APK开发资源
- 官方BLE Demo:谷歌官方Android蓝牙4.0 BLE示例代码,包含完整的设备扫描、连接、数据读写功能。
- AndroidBle SDK:开源的蓝牙4.0开发框架,简化BLE开发流程。
- 通信控制APP源码:支持Android 4.3以上版本,使用Eclipse开发环境。
2. 微信小程序蓝牙开发
javascript
// 小程序蓝牙连接示例
wx.openBluetoothAdapter({
success: function(res) {
wx.startBluetoothDevicesDiscovery({
services: ['FFF0'],
success: function(res) {
wx.createBLEConnection({
deviceId: deviceId,
success: function(res) {
// 连接成功,获取服务
wx.getBLEDeviceServices({
deviceId: deviceId,
success: function(res) {
// 获取特征值并订阅通知
}
})
}
})
}
})
}
})
// 发送控制指令
function sendRelayCommand(relayNum, state) {
const buffer = new ArrayBuffer(1);
const dataView = new DataView(buffer);
dataView.setUint8(0, state ? 0x01 : 0x00);
wx.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
value: buffer,
success: function(res) {
console.log('控制指令发送成功');
}
})
}
3. 通信协议设计
c
// 控制指令格式
#define CMD_RELAY1_ON 0xA1
#define CMD_RELAY1_OFF 0xA2
#define CMD_RELAY2_ON 0xB1
#define CMD_RELAY2_OFF 0xB2
#define CMD_QUERY_STATUS 0xC0
// 状态反馈格式
typedef struct {
uint8_t relay1_state; // 继电器1状态
uint8_t relay2_state; // 继电器2状态
uint16_t temperature; // 温度值
uint16_t humidity; // 湿度值
} Device_Status_t;
参考代码 智能家居继电器控制源程序+蓝牙4.0开发软件 www.youwenfan.com/contentcst/135460.html
四、完整项目功能架构
1. 硬件连接配置
| 模块 | 连接引脚 | 功能说明 |
|---|---|---|
| HC-05蓝牙模块 | VCC→5V, GND→GND, TX→MCU RX, RX→MCU TX | 经典蓝牙4.0通信 |
| 继电器模块 | VCC→5V, GND→GND, IN1→GPIO1, IN2→GPIO2 | 控制家电开关 |
| 温湿度传感器 | VCC→3.3V, GND→GND, DATA→GPIO3 | DHT11传感器 |
| STM32主控 | PA9/PA10 (USART1) | 串口通信 |
2. 软件架构设计
├── 硬件层
│ ├── 蓝牙通信模块 (HC-05/HC-06)
│ ├── 继电器驱动模块
│ ├── 传感器采集模块
│ └── 电源管理模块
├── 驱动层
│ ├── 串口驱动
│ ├── GPIO驱动
│ ├── 定时器驱动
│ └── 中断管理
├── 应用层
│ ├── 蓝牙协议解析
│ ├── 继电器控制逻辑
│ ├── 数据采集处理
│ └── 状态反馈机制
└── 用户界面层
├── Android APP
├── 微信小程序
└── Web控制界面
五、开发环境与工具
1. 硬件平台选择
- 入门级:STM32F103C8T6最小系统板 + HC-05蓝牙模块
- 中级:nrf51822蓝牙开发板(集成BLE 4.0)
- 高级:ESP32开发板(集成Wi-Fi和蓝牙)
2. 软件开发工具
- 嵌入式开发:Keil MDK 5.xx、STM32CubeMX、Arduino IDE
- Android开发:Android Studio 4.0+、官方BLE API
- 小程序开发:微信开发者工具、蓝牙API
- 调试工具:串口调试助手、蓝牙调试APP、逻辑分析仪
3. 测试设备要求
- 手机:Android 4.3+(支持BLE 4.0)
- 电脑:Windows/Linux/Mac + 蓝牙适配器
- 测试仪器:万用表、示波器(可选)
六、常见问题解决方案
1. 蓝牙连接不稳定
- 问题:连接频繁断开或数据传输错误
- 解决方案 :
- 增加数据校验机制(CRC校验)
- 实现心跳包机制保持连接
- 优化天线布局,避免干扰
2. 继电器误触发
- 问题:继电器在未收到指令时误动作
- 解决方案 :
- 增加软件去抖动处理
- 使用光耦隔离继电器控制信号
- 实现双重验证机制
3. 功耗过高
- 问题:电池供电时续航时间短
- 解决方案 :
- 使用低功耗蓝牙(BLE)模块
- 实现睡眠模式,空闲时降低功耗
- 优化程序逻辑,减少不必要的操作