用STM32F103和继电器DIY智能家居:低成本改造台灯与风扇的保姆级教程
用STM32F103和继电器DIY智能家居低成本改造台灯与风扇的保姆级教程智能家居不再是高不可攀的奢侈品。本文将带你用不到百元的成本将家中普通电器升级为智能设备。我们选择的硬件核心是STM32F103开发板和继电器模块——这对组合既能满足基础控制需求又不会给初学者带来过高门槛。1. 硬件准备与安全须知1.1 基础硬件清单STM32F103C8T6开发板约15元作为控制核心建议选择带USB接口的版本便于烧录程序5V继电器模块约5元/个推荐带光耦隔离的型号如SRD-05VDC-SL-C220V转5V电源模块约8元为整个系统供电避免使用多个电源杜邦线若干建议准备20cm长度的公对公、公对母各10根电工胶布与接线端子处理强电部分必备重要提示操作220V强电时必须断电作业建议有电工基础或在他人在场时进行1.2 继电器工作原理速览继电器本质是电控开关通过小电流控制大电流通断。典型继电器包含三组关键接口接口类型功能说明典型标识控制端接收控制信号VCC/GND/IN常开端继电器吸合时导通NO公共端主电路必经节点COM常闭端继电器释放时导通NC// 典型继电器驱动逻辑 void Relay_Control(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t state) { GPIO_WriteBit(GPIOx, GPIO_Pin, (BitAction)state); // 添加适当延时防止频繁切换 Delay_ms(50); }2. 台灯智能改造实战2.1 电路连接步骤断电状态下拆开台灯底座找到火线通常为棕色并剪断将继电器COM端接电源侧火线NO端接灯具侧火线使用5V电源模块为开发板和继电器供电连接STM32的GPIO如PA0到继电器IN引脚2.2 基础控制代码实现#include stm32f10x.h #include Delay.h #define RELAY_PIN GPIO_Pin_0 void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin RELAY_PIN; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_2MHz; GPIO_Init(GPIOA, GPIO_InitStructure); } int main(void) { GPIO_Config(); while(1) { // 点亮台灯 GPIO_ResetBits(GPIOA, RELAY_PIN); Delay_s(5); // 关闭台灯 GPIO_SetBits(GPIOA, RELAY_PIN); Delay_s(5); } }2.3 进阶功能扩展光敏自动控制添加光敏电阻实现环境光检测PWM调光配合可控硅模块实现亮度调节状态反馈通过LED指示灯显示当前开关状态3. USB风扇改造方案3.1 低压直流设备改造特点相比220V交流设备5V USB设备改造更安全简单无需担心高压危险可直接使用开发板USB供电接线更简洁通常只需切断正极线路3.2 典型接线示意图[USB电源] → [继电器COM] [继电器NO] → [风扇正极] [USB地线] ————————→ [风扇负极]3.3 定时控制代码优化void Fan_Timer_Control(uint32_t on_time, uint32_t off_time) { static uint32_t last_tick 0; if(HAL_GetTick() - last_tick on_time) { GPIO_ResetBits(GPIOA, RELAY_PIN); // 开启 } else if(HAL_GetTick() - last_tick on_time off_time) { GPIO_SetBits(GPIOA, RELAY_PIN); // 关闭 } else { last_tick HAL_GetTick(); } }4. 手机APP远程控制实现4.1 蓝牙模块集成推荐使用HC-05蓝牙模块约15元接线方式蓝牙模块STM32连接VCC5VGNDGNDTXDPA10(Rx)RXDPA9(Tx)4.2 通信协议设计简易控制协议示例发送ON开启设备发送OFF关闭设备发送T300设置300秒定时4.3 手机端配置方案安卓用户使用Serial Bluetooth Terminal等APPiOS用户推荐LightBlue等BLE调试工具自定义APP通过MIT App Inventor快速开发控制界面5. 常见问题排查指南5.1 继电器不动作检查清单确认供电电压达到继电器标称值用万用表测量检查STM32与继电器共地连接验证GPIO输出电平是否符合继电器触发要求测试继电器手动触发是否正常短接IN到VCC5.2 典型故障现象与解决故障现象可能原因解决方案继电器有吸合声但设备不工作主电路接线错误检查COM/NO接线是否正确继电器频繁误触发未添加消弧电路在继电器线圈并联反向二极管控制距离短电源功率不足改用独立电源供电手机连接不稳定蓝牙模块天线位置不佳调整模块位置或外接天线6. 项目优化与扩展思路6.1 电源管理优化使用18650锂电池配合TP4056充电模块实现移动供电添加电压检测功能低电量时自动关闭非必要设备采用太阳能电池板实现绿色能源供电6.2 多设备联动方案通过单个STM32控制多个继电器时建议为每个继电器分配独立GPIO采用ULN2003等驱动芯片扩展IO能力设计优先级机制避免同时启动大电流设备// 多继电器控制示例 typedef struct { GPIO_TypeDef* GPIOx; uint16_t GPIO_Pin; uint8_t state; } Relay_TypeDef; void Multi_Relay_Control(Relay_TypeDef* relays, uint8_t count) { for(uint8_t i0; icount; i) { GPIO_WriteBit(relays[i].GPIOx, relays[i].GPIO_Pin, (BitAction)relays[i].state); } }6.3 外壳设计与安装使用3D打印制作专用外壳推荐PLA材料强电部分务必采用绝缘封闭设计考虑散热需求避免密闭空间安装继电器