智能家居继电器控制与蓝牙4.0开发

一、内容

内容组成

  • 硬件平台: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开发资源

  1. 官方BLE Demo:谷歌官方Android蓝牙4.0 BLE示例代码,包含完整的设备扫描、连接、数据读写功能。
  2. AndroidBle SDK:开源的蓝牙4.0开发框架,简化BLE开发流程。
  3. 通信控制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. 软件开发工具

  1. 嵌入式开发:Keil MDK 5.xx、STM32CubeMX、Arduino IDE
  2. Android开发:Android Studio 4.0+、官方BLE API
  3. 小程序开发:微信开发者工具、蓝牙API
  4. 调试工具:串口调试助手、蓝牙调试APP、逻辑分析仪

3. 测试设备要求

  • 手机:Android 4.3+(支持BLE 4.0)
  • 电脑:Windows/Linux/Mac + 蓝牙适配器
  • 测试仪器:万用表、示波器(可选)

六、常见问题解决方案

1. 蓝牙连接不稳定

  • 问题:连接频繁断开或数据传输错误
  • 解决方案
    1. 增加数据校验机制(CRC校验)
    2. 实现心跳包机制保持连接
    3. 优化天线布局,避免干扰

2. 继电器误触发

  • 问题:继电器在未收到指令时误动作
  • 解决方案
    1. 增加软件去抖动处理
    2. 使用光耦隔离继电器控制信号
    3. 实现双重验证机制

3. 功耗过高

  • 问题:电池供电时续航时间短
  • 解决方案
    1. 使用低功耗蓝牙(BLE)模块
    2. 实现睡眠模式,空闲时降低功耗
    3. 优化程序逻辑,减少不必要的操作
相关推荐
deepdata_cn3 天前
智能家居中的智能体应用
智能家居
2501_913981783 天前
智能家居无线数传方案推荐:LoRa、蓝牙与其他技术如何驱动智慧家庭互联未来
智能家居
三佛科技-134163842123 天前
PD65W快充电源方案LP8841SD+LP35118N(高频QR反激、BOM简洁,小体积,过认证)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
qq_411262423 天前
四博 CozyLife AI 中控方案:基于 ESP32-C5 双频 Wi-Fi + 4G 打造智能家居语音控制入口
人工智能·智能家居
key_3_feng4 天前
鸿蒙6.0 Wi-Fi IoT智能家居入门方案
物联网·智能家居·harmonyos
deepdata_cn4 天前
开放式智能家居互联协议(Matter1.0)
智能家居
qq_411262424 天前
四博CozyLife AI智能音箱方案:打造智能家居语音控制中枢
人工智能·智能家居·智能音箱
三佛科技-134163842124 天前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
三佛科技-134163842125 天前
FT62F0GCA-LRB智能温控仪上的应用优势分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
唯创知音6 天前
一文读懂手势识别传感器:原理、优势与应用场景
人机交互·智能家居·交互·手势传感器·手势传感模块