1. 项目背景与核心需求
去年夏天的一个深夜,我躺在床上突然想起办公室空调忘关了。这个场景相信很多朋友都遇到过——离家后才发现电器没关,或者想提前开启家里的设备。传统智能家居方案要么价格昂贵,要么需要依赖WiFi网络。于是我开始琢磨:能不能用最基础的电子元件,做一个不依赖家庭网络的远程控制器?
这个项目的核心诉求很明确:
- 通过手机短信指令控制电器开关
- 不受WiFi网络限制,全国范围可用
- 成本控制在百元以内
- 待机功耗要低,能长期插电工作
经过多次迭代,最终成品可以稳定控制空调、电饭煲等家电,实测待机电流仅12mA,整套材料费不到80元。下面就把这个"短信遥控器"的完整实现过程拆解给大家。
2. 硬件选型与电路设计
2.1 主控芯片选择
市面上常见的方案有三种:
- Arduino+WiFi模块:依赖网络,外出无法控制
- 树莓派+4G模块:功能过剩,成本高
- 单片机+GSM模块:完全符合需求
最终选用STC89C52RC单片机+SIM800L GSM模块的组合。这套方案的突出优势:
- STC89C52RC价格仅5元,有8K Flash存储
- SIM800L模块二手价约30元,支持2G网络
- 整体待机功耗<0.5W
- 开发环境成熟(Keil C51)
注意:购买SIM800L时要确认支持900/1800MHz频段,部分海外版模块在国内信号差
2.2 继电器驱动电路
家用电器通常需要控制220V交流电,这里有几个关键设计点:
- 选用HK19F-DC5V-SHG继电器,5V驱动,负载能力10A/250VAC
- 添加1N4007续流二极管保护三极管
- 光耦隔离(PC817)确保强电弱电分离
典型接线示意图:
code复制单片机P1.0 -> 1K电阻 -> PC817输入端
PC817输出端 -> 2N3904三极管基极
继电器线圈接在三极管集电极回路
2.3 电源方案设计
系统需要三种电压:
- SIM800L需要4V(峰值电流2A)
- 单片机需要5V
- 外围电路需要3.3V
采用两级转换方案:
- 220V转5V开关电源模块(建议选用带隔离的)
- AMS1117-3.3产生3.3V
- SIM800L直接接5V(模块内置LDO)
3. 软件实现细节
3.1 短信指令解析
SIM800L通过串口返回如下格式数据:
code复制+CMT: "+8613800138000","","22/05/15,16:20:30+32"
空调开
处理逻辑:
c复制if(strstr(recvBuf,"+CMT")){
char* cmd = strchr(recvBuf,'\n')+1;
if(strstr(cmd,"空调开")) P1_0=0;
else if(strstr(cmd,"空调关")) P1_0=1;
// 其他设备控制同理
}
3.2 状态反馈机制
每次执行操作后,系统会自动回复短信:
c复制void sendSMS(char* num, char* msg){
sprintf(ATcmd,"AT+CMGS=\"%s\"\r\n",num);
uartSend(ATcmd);
delay_ms(500);
uartSend(msg);
uartSend("\x1A"); // Ctrl+Z发送
}
3.3 低功耗优化技巧
- 关闭SIM800L的LED指示灯(AT+CNETLIGHT=0)
- 设置单片机空闲模式(PCON |= 0x01)
- 采用中断唤醒方式,收到短信才唤醒主控
- 继电器不动作时切断线圈供电
4. 实际部署中的坑与解决方案
4.1 信号不稳定问题
初期测试时发现:
- 模块偶尔收不到短信
- 控制指令延迟高达5分钟
解决方法:
- 更换为移动/联通卡(电信2G已退网)
- 外接胶棒天线(IPX接口)
- 添加AT+CSQ指令检测信号强度
- 设置短信中心号码(AT+CSCA)
4.2 继电器误动作
现场出现的诡异现象:
- 雷雨天气时会自动开关
- 手机来电时可能误触发
改进措施:
- 在控制端添加软件去抖
c复制if(cmdReceived){
delay_ms(300); // 防抖延时
if(仍检测到指令) 执行操作;
}
- 继电器线圈并联104电容
- 强电走线远离信号线
4.3 安全性增强
原始方案存在严重隐患:
- 任何号码发送指令都能控制
- 没有操作日志记录
升级方案:
- 白名单验证(存5个授权号码)
c复制int isAuthNum(char* num){
const char* authNums[5] = {"13800138000",...};
for(int i=0;i<5;i++)
if(strcmp(num,authNums[i])==0) return 1;
return 0;
}
- 添加指令密码(如"空调开#1234")
- 本地EEPROM存储操作记录
5. 成品展示与扩展思路
最终作品装在86型暗盒中,外观与普通开关面板无异。实测控制距离跨越三个省份仍能即时响应,比预想的更可靠。
几个值得尝试的扩展方向:
- 接入温湿度传感器,实现"室温>30度自动开空调"
- 增加电量统计功能(HLW8032芯片)
- 开发微信小程序替代短信控制
- 改用NB-IoT模块降低功耗
这个项目给我的最大启示是:用最基础的技术组合,往往能解决实际生活中的痛点问题。后来我给父母家也装了一套,他们现在出门买菜时用手机提前煮饭,再也不用担心忘记按电饭煲开关了。
