一,项目需求
:设计一款能通过手机APP控制家里电器的设备。
二,产品需求
硬件: USB供电,WIFI控制,继电器(输入电压5V,带负载100W以内)。
嵌入式: 响应WIFI模块的指令执行对应的动作,控制WIFI模块进入对应的状态。
手机APP: 不同用户可进行配网,可控制继电器状态,可读取继电器状态,可管理多个设备。
服务器: 可链接WIFI模块和手机,可维护用户信息,不容易崩(阿里云物联网生活平台)。
三,硬件规划
- 主控芯片选择51单片机,型号为 STC15W4K56S4-LQFP48 。
- 设计一个USB转TTL,用来给单片机烧录代码。型号为 CH340E 。
- 51单片机需要掉电才能完成复位。 使用带使能引脚的LDO配合一个按键达到目的,LDO型号为ME6215C33M5G。
- 继电器选择 HK4100F-DC5V-SHG ,
注意继电器线圈的驱动电压,USB接口的输出为5V
。
- 继电器驱动需要专门设计,为了可靠性选择了专用芯片 NUD3124LT1G 。此驱动电路为高电平触发,
51单片机的IO口在上电后默认为高电平
,为了开机瞬间可靠关闭故加一路反相器 SN74LVC1G04DBVR (逻辑器件要注意:识别高低电平的电压阈值,不同厂商的器件,高低电平的阈值不同,需仔细查看数据手册
)。
- WIFI模块选择 EMW3080 。经过阿里云官方认证的通信模组,安全可靠。AT指令直连阿里云平台简化开发量,商用模组供货可靠。(购买版本:阿里云飞燕固件)
四,物联网配套产业链-阿里云生活物联网平台
五,原理图设计
-
USB转TTL。经典设计,照搬规格书。
(图中R1是为了防止芯片的TXD引脚给单片机供电从而导致单片机内核无法彻底掉电。VCC引脚附近加100uf钽电容是为了给芯片强劲的电流供应能力,防止继电器打开瞬间CH340芯片复位。
)
-
LDO降压。WIFI和单片机分别单独供电
(项目成本允许的前提下,控制部分与通信部分独立供电,"经验之谈" ),
保证通信模块有稳定电源。选择了带有使能引脚的LDO,便于外部控制LDO的输出状态(设计按键接LDO使能端使单片机复位)
。
( 给通信模组供电推荐“DCDC的方案”)
-
DS18B20外设:预留一个DS18B20接口便于接入温度传感器。
按键外设:用于复位WIFI设备重新配网。
四个LED:用于指示不同的设备状态。
-
继电器驱动电路。反相器确保MCU上电时可靠关闭继电器,NUD3124确保继电器可靠驱动。
(加R9上拉的电阻是为了保证单片机复位瞬间或某一时刻提供可靠的上拉能力,高电平经过反相器为低电平,继电器为关闭状态)
-
WIFI模块-EMW3080。一个高可靠的商用WIFI模组,接入阿里云经过了官方的严格测试。我们选择的固件是阿里云飞燕专用固件,也叫 ILOP固件。
这个模组可以通过串口升级和修改固件。
(电阻 R10 和 R11 在特殊情况下可以拆掉,焊盘当做测试点。)
-
STC单片机。经典51内核单片机。外围简单,外设没用上几个。这里的单片机需要具备一个串口,一个定时器,若干普通IO口。
六,PCB设计以及3D模型
PCB设计注意要点:
-
强电部分不铺铜,强电与强电、强电与弱电之间注意安全距离
(尽量3mm,低于2mm的考虑挖槽,但要考虑PCB强度问题)
; -
继电器外接220V的建议使用端子,不建议使用排针孔,继电器到端子的线径要粗,强电走线线宽
(2.5mm以上、之间最好开槽)
; -
强电区、继电器区、和WIFI天线下方
(向外放置)
要保留一定的净空区、开槽最好; -
接线端子、microUSB放在板子边缘,否则不好接线,可以使用3D预览看;
-
电源要先过滤波电容再到单片机/WiFi模组;
-
WIFI正常工作会发热,注意设计好散热;
-
电容器件下面不要走线;
-
如果有塑料模具,则应注意元器件选型时考虑模具空间尺寸;
七,软件规划——(通信部分)
- 单片机和WIFI模组
物理媒介: PCB板间连线,TTL电平
通信方式: UART
通信协议: AT指令
分析: 单片机通过AT指令控制WIFI模组动作,完成指定通信任务。难点在于串口数据的接收缓存,AT指令的解析。 - WIFI模组和服务器
物理媒介: 2.4GHZ的无线电连接到路由器,运营商组建的广域网连接到服务器
通信方式: TCP通信
通信协议: MQTT
分析: 模块进行MQTT相关的数据发送和解析,断线重连,发送消息的可靠性等问题由模块完成,作为开发者只需要关注如何通过AT指令控制相关数据流即可。 - 服务器和手机APP
物理媒介: 手机4G无线电或者WIFI无线电
通信方式: TCP通信
通信协议: HTTPS
分析: 数据到达服务器后,服务器进行数据的重构,业务端访问数据可以通过HTTP的方式进行。设计手机APP有用户管理系统,业务逻辑系统,UI界面等,类似能力阿里云已经帮我们打包好, 开箱即用,作为开发者不用关心。
软件规划——(控制部分)
- 单片机——AT指令的发送、接收与解析
发送: AT指令本质上是ASCII字符串,发送AT指令就是单片机的串口发送字符串。只需要在程序需要的地方发送字符串即可,比如入网,连接服务器,发送指定的数据等。
接收: 开辟一个数据接收缓冲区防止漏掉个别信息,使用环形队列来管理此接收缓冲区。只需要在程序需要的地方读取缓冲区里面的内容即可。
解析: 本质上是解析ASCII字符串。写一个可以搜索字符串中指定字符的子程序,用来帮助判断收到的字符串是什么内容。
服务器传过来的数据先由模组解析,模组通过串口线发送给单片机。 - 单片机——循环执行一个任务
开一个1ms定时器作为时间基准,写一个简单的循环程序调度器,将不同的子程序循环调用。
AT指令接收缓冲区需要定时处理(比如10ms处理一次,便于及时更新服务器回传的数据)
。
按键扫描: 需要定时处理,便于判断是否有按键按下。
网络状态指示灯: 需要定时处理,用于控制LED等的闪烁频率。 - 单片机——三元组数据的更新、存储
将Flash的一个扇区开辟为自定义数据存储区。(保存每个设备唯一的三元组信息,三元组信息从阿里云物联网平台获得)
写一个简单的串口接收程序,接收三元组信息,并保存到Flash。
软件规划——(控制逻辑)
- 单片机上电开机,读取Flash中的三元组信息。
- 通过AT指令发送接口,将三元组信息发给WIF模组。
- 通过AT指令发送接口,打开WIFI模组的ILOP服务
(准备连接路由器、服务器)。
- 进入循环任务,开始定时执行所有相关子程序。
A: 若AT指令接收到“打开继电器”字符串,则控制IO口。
B: 若AT指令接收到“关闭继电器”字符串,则控制IO口。
C: 若按键扫描到长按,则通过AT指令发送接口令WIFI模组进入配网模式,同时LED开始同时闪烁
D: 若AT指令收到“连接服务器成功”字符串,则控制LED单个闪烁。
E: 若AT指令手到“断开服务器”字符串,则控制LED灭。
F: 看门狗定时喂狗(防止程序跑飞)
。
项目总结:
站在大牛的肩膀上学习,站的更高看的更远~