智能家居控制器综合项目方案
系统框图
一、硬件配置清单
模块 | 型号 | 接口 | 功能说明 |
---|
主控芯片 | STM32F103C8T6 | - | 系统控制核心 |
WiFi模块 | ESP-01S | UART(TX/RX) | 连接云平台/手机APP |
蓝牙模块 | HC-05 | UART | 近场控制 |
温湿度传感器 | DHT11 | GPIO | 环境监测 |
光照传感器 | BH1750 | I2C | 光照强度采集 |
OLED显示屏 | SSD1306 | I2C/SPI | 0.96寸128x64显示 |
继电器模块 | SRD-05VDC | GPIO | 家电开关控制 |
报警模块 | 有源蜂鸣器 | GPIO+PWM | 异常状态报警 |
二、核心功能实现
1. 无线通信(ESP8266+AT指令)
void WiFi_Connect_Aliyun() {
UART_Send("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n");
UART_Send("AT+MQTTUSERCFG=0,1,\"NULL\",\"设备ID\",\"密钥\",0,0,\"\"\r\n");
UART_Send("AT+MQTTCONN=0,\"iot.aliyun.com\",1883,1\r\n");
}
void UART_RxCallback(char* msg) {
if(strstr(msg, "RELAY_ON")) HAL_GPIO_WritePin(RELAY_GPIO, RELAY_PIN, GPIO_PIN_SET);
if(strstr(msg, "RELAY_OFF")) HAL_GPIO_WritePin(RELAY_GPIO, RELAY_PIN, GPIO_PIN_RESET);
}
2. 环境数据采集与显示
void Sensor_Update() {
DHT11_Read(&temp, &humi);
BH1750_Read(&lux);
}
void OLED_Show() {
OLED_Clear();
OLED_ShowString(0,0,"Temp: 24.5C");
OLED_ShowString(0,2,"Humi: 65%");
OLED_ShowString(0,4,"Light: 300lx");
OLED_ShowString(0,6,"Relay: ON");
OLED_Refresh();
}
3. 继电器控制逻辑
typedef enum {
RELAY_AUTO,
RELAY_MANUAL
} RelayMode;
void Relay_Control() {
if(mode == RELAY_AUTO) {
if(temp > 30 || lux < 50) HAL_GPIO_WritePin(RELAY_GPIO, RELAY_PIN, GPIO_PIN_SET);
else HAL_GPIO_WritePin(RELAY_GPIO, RELAY_PIN, GPIO_PIN_RESET);
}
}
4. 低功耗与报警设计
void Enter_LowPower() {
if(no_activity_counter > 300) {
HAL_UART_DeInit(&huart1);
HAL_ADC_DeInit(&hadc1);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}
}
void Alarm_Check() {
if(temp > 40) {
HAL_GPIO_WritePin(BUZZER_GPIO, BUZZER_PIN, GPIO_PIN_SET);
WiFi_Send_Alert("WARNING: Overheat!");
}
}
三、手机APP交互协议
1. 数据上报格式(JSON)
{
"device": "STM32_001",
"temp": 25.6,
"humi": 60,
"lux": 280,
"relay": 1
}
2. 控制指令集
指令 | 参数 | 说明 |
---|
CMD_RELAY_ON | 无 | 打开继电器 |
CMD_RELAY_OFF | 无 | 关闭继电器 |
CMD_MODE_AUTO | 无 | 切换自动模式 |
CMD_GET_DATA | 无 | 请求当前环境数据 |
四、系统调试与优化
1. 调试技巧
- 分模块调试:先验证传感器数据准确性,再测试通信功能
- 串口日志:通过
printf
输出关键变量值 - 逻辑分析仪:抓取I2C/UART波形分析通信异常
2. 性能优化建议
- 数据压缩:使用二进制替代JSON减少传输数据量
- 双缓冲显示:避免OLED刷新时的屏幕闪烁
- 看门狗:启用IWDG防止程序跑飞
五、扩展功能建议
- 语音控制:集成LD3320语音识别模块
- 历史数据存储:添加AT24C02 EEPROM记录数据
- 多房间组网:通过Zigbee实现分布式控制
通过此方案,可实现完整的智能家居控制器原型系统,后续可根据需求扩展更多传感器和交互方式。