引言
智能家居正在改变我们的生活方式,而STM32F103作为一款经典且高性价比的ARM Cortex-M3微控制器,非常适合用于智能家居控制器的开发。本文将介绍如何基于STM32F103设计一个多功能智能家居控制器,实现环境监测、设备控制、无线通信等功能。
---
1. 系统架构设计
1.1 硬件组成
- 主控芯片:STM32F103C8T6(72MHz,64KB Flash,20KB RAM)
- 环境传感器:DHT11(温湿度)、MQ-2(烟雾检测)
- 无线通信:ESP8266(Wi-Fi,连接云平台) / HC-05(蓝牙,手机控制)
- 人机交互:OLED显示屏(显示数据)、按键(本地控制)
- 执行设备:继电器模块(控制家电)、RGB LED(状态指示)
- 供电方案:5V USB或12V适配器 + AMS1117-3.3V稳压
1.2 软件架构
- 底层驱动:HAL库 / LL库(GPIO、UART、I2C、ADC等)
- 通信协议:MQTT(Wi-Fi)、串口AT指令(ESP8266)
- 控制逻辑:状态机管理(按键、传感器、网络数据)
- 可选RTOS:FreeRTOS(多任务管理)
---
2. 硬件连接与电路设计
2.1 STM32F103最小系统
- 晶振:8MHz(HSE)+ 32.768kHz(可选RTC)
- 复位电路:10K上拉 + 100nF电容
- BOOT模式:BOOT0=0(Flash启动)
2.2 传感器与执行器接口
模块 | 接口 | 连接方式 |
DHT11 | GPIO | 单总线协议 |
MQ-2 | ADC | 模拟电压检测 |
OLED | I2C | SCL=PB6, SDA=PB7 |
ESP8266 | USART | TX=PA9, RX=PA10 |
继电器 | GPIO | PC13(低电平触发) |
RGB LED | PWM | TIM3_CH1/2/3 |
📌 Tips:
- ESP8266需3.3V供电,避免5V直接连接!
- 继电器控制大功率设备时,建议加光耦隔离。
---
3. 软件实现
3.1 开发环境搭建
- 工具链:STM32CubeMX + Keil MDK / PlatformIO(VSCode)
- 库支持:
- STM32 HAL库(标准外设驱动)
- DHT11、OLED等传感器库(GitHub开源)
- MQTT客户端(如Paho MQTT Embedded C)
3.2 核心代码逻辑
(1)传感器数据采集
// DHT11温湿度读取(单总线协议)
void DHT11_ReadData(float *temp, float *humi) {
// 发送起始信号 + 数据读取
// ...
}
// MQ-2烟雾检测(ADC采样)
uint16_t MQ2_ReadADC() {
HAL_ADC_Start(&hadc1);
return HAL_ADC_GetValue(&hadc1);
}
(2)Wi-Fi通信(ESP8266 + MQTT
// 初始化ESP8266(AT指令)
void ESP8266_Init() {
UART_SendString("AT+CWMODE=1\r\n"); // Station模式
UART_SendString("AT+CWJAP=\"WiFi名\",\"密码\"\r\n");
UART_SendString("AT+MQTTUSERCFG=0,1,\"客户端ID\",\"用户名\",\"密码\"\r\n");
UART_SendString("AT+MQTTCONN=0,\"broker地址\",1883,1\r\n");
}
// 发布传感器数据到MQTT
void MQTT_PublishData(float temp, float humi) {
char payload[50];
sprintf(payload, "{\"temp\":%.1f,\"humi\":%.1f}", temp, humi);
UART_SendString("AT+MQTTPUB=0,\"topic\",\"%s\",0,0\r\n", payload);
}
(3)继电器控制(家电开关)
// 控制继电器(低电平触发)
void Relay_Control(uint8_t state) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, state ? GPIO_PIN_RESET : GPIO_PIN_SET);
}
---
4. 功能扩展
4.1 手机APP控制(蓝牙/Wi-Fi)
- 蓝牙方案:HC-05模块 + 手机APP(如MIT App Inventor)
- Wi-Fi方案:MQTT + 云平台(阿里云IoT / 腾讯云IoT)
4.2 语音控制(对接天猫精灵/小爱同学)
- 通过云平台实现语音助手联动(如Blinker开源框架)
4.3 低功耗优化
- 使用STM32的 Stop模式 + 外部中断唤醒(如按键触发)
---
5. 实际效果演示
✅ 环境监测:OLED显示温湿度、空气质量
✅ 远程控制:手机APP控制继电器开关
✅ 报警功能:MQ-2检测到烟雾时,RGB LED变红 + 蜂鸣器报警
---
6. 总结
本文介绍了基于STM32F103的智能家居控制器设计,涵盖:
- 硬件选型(STM32F103 + 传感器 + 通信模块)
- 软件实现(传感器驱动 + Wi-Fi通信 + 控制逻辑)
- 功能扩展(手机APP、语音控制、低功耗优化)
后续优化方向:
- 增加更多传感器(如光照、人体红外)
- 接入Home Assistant开源家居平台
- 使用RTOS(FreeRTOS)管理多任务
---
代码与资料下载
🔗 [GitHub仓库](https://github.com/example/stm32f103-smart-home)(完整工程+原理图)