# 利用单片机和EMW3080或者esp8266实现一个可以用app控制通断的插座
2020立创EDA暑期进阶班。[项目参考零妖项目](https://oshwhub.com/7a745fc8/ke-shang-yong-wu-lian-wang-kai-guan-fang-an-ji-yu51-dan-pian-ji);在线文档参考语雀:[基于阿里云智能的插座-需求分析](https://www.yuque.com/iiyqfa/ssdag4/pwdyeo)。
## 一:项目需求
**设计一个能通过手机APP控制家里电灯的板子**
* 硬件:USB供电,WIFI控制,继电器(带负载100W以内)
* 嵌入式:响应WIFI模块的指令执行对应的动作,控制WIFI模块进入对应的状态。
* 手机APP:不同用户可进行配网,可控制继电器状态,可读取继电器状态,可管理多个设备。
* 服务器:可链接WIFI模块和手机,可维护用户信息,不容易崩
## 二:方案设计
* 云端:[使用阿里云物联网平台](https://living.aliyun.com/),可以通过云智能APP和天猫精灵来控制设备。
* Wifi模块:WIFI模块选择 EMW3080 。经过阿里云官方认证的通信模组,安全可靠。通过AT指令直连阿里云平台。使用时,刷新固件为阿里云飞燕固件。
* 主控芯片:选择51单片机,型号为 STC15W4K56S4-LQFP48。通用芯片使用简单。(其实就是为了和教程一致,减少不必要的麻烦)
* 下载电路:CH340E用来USB转TTL电平。可以给单片机下载程序,也能在调试过程中和3080通过AT指令进行通信。
* 单片机复位:STC的单片机需要掉电才能完成复位。使用带使能引脚的LDO配合一个按键达到目的,LDO型号为ME6215C33M5G,可以将5V电压稳定为3.3V,给STC15W供电。
* 继电器:选择一个5V驱动的继电器。因为板子是通过USB的5V供电压。
* 继电器驱动电路:选择专用芯片 NUD3105LT1G。同时因为单片机上电默认为高电平,在控制信号前加一个反相器SN74LVC1G04DBVR,保证在上电时继电器默认信号是低电平,关闭状态。
## 三:业务逻辑
1. 上电开机。读取Flash中的三元组信息。
2. 通过AT指令发送接口,将三元组信息发给WIF模组。
3. 通过AT指令发送接口,打开WIFI模组的ILOP服务。
4. 进入循环任务,开始定时执行所有相关子程序。
1. 若AT指令接收到“打开继电器”字符串,则控制IO口。
2. 若AT指令接收到“关闭继电器”字符串,则控制IO口
3. 若按键扫描到长按,则通过AT指令发送接口令WIFI模组进入配网模式,同时LED开始同时闪烁
4. 若AT指令收到“连接服务器成功”字符串,则控制LED单个闪烁。
5. 若AT指令手到“断开服务器”字符串,则控制LED灭。
6. 看门狗定时喂狗
## 四:PCB绘制注意
1. 强电部分不铺铜,强电与强电、强电与弱电之间注意安全距离(尽量3mm,低于2mm的考虑挖槽,但要考虑PCB强度问题);
2. 继电器外接220V的建议使用端子,不建议使用排针孔,继电器到端子的线径要粗;
3. 接线端子、microUSB放在板子边缘,否则不好接线,可以使用3D预览看;
4. 有些同学按键靠高压太近、按键在板子中间,不好按;
5. 电源要先过滤波电容再到单片机/WiFi模组;
6. WIFI正常工作会发热,注意设计好散热;
7. WIFI天线下方需要净空区,开槽最好;
8. 如果有塑料模具,则应注意元器件选型时考虑模具空间尺寸
## 五:项目结果
1. **PCB的3D模型**
2. **PCB的实物**
3. **APP界面**
4. **实现的功能**
1. 设备上电,蜂鸣器响两声,进行提示。连接网络后,蓝灯亮起。
2. 设备每5分钟向云端上报一次当前的设备信息:继电器的状态、当前剩余工作时间。
3. 通过APP可控制继电器的通断。
4. 按下设备上的按键,可以让继电器状态反转,并且上报一次设备信息
5. 按键点按和长按,蜂鸣器会发出相应的按键声。
6. 在APP上设置剩余工作时间,设备收到之后,开始在设备上进行倒计时,时间到了,继电器反转。倒计时最长可以设置24小时。时间设置为0或者大于24小时,不进行倒计时,默认为关闭倒计时。
7. 可以设置云端定时,类似于闹钟。设置一天中的某一时刻继电器开或者关。设置完要保证APP后台运行。
## 六:项目总结
1. **EMW3080刷新完固件,串口利用AT指令通信,波特率设置为115200,通信失败,为乱码**
在刷新固件时,BOOT通过跳线帽接地,刷完固件忘了拔掉,导致和串口助手通信失败。EMW3080正常工作时BOOT不接GND。
2. **阿里云平台设置好了,EMW3080通过串口助手直接利用AT指令进行控制,但通过云智能APP一直扫描不到EMW3080**
刚开始利用的是配网方式2。手机APP上进行扫描,一直扫描不到周边设备,原因未找到。
修改成配网方式1,。通过APP直接扫描配网二维码,可以连接成功。
3. **程序没问题,下载进去之后,单片机STC15W的串口1和串口助手通信一直是乱码,波特率错误**
在下载程序时,STC-SPI需要程序运行时的IRC频率为22.1184Mhz。如下图:
4. **蜂鸣器不响**
P52口的驱动能力太弱,加上拉电阻。
5. **DS18B20的数据一直错误,是一个随机数
(未解决,求大佬帮忙 )**
变量 FloatTemperature 未初始化,导致为一个随机值。由于未知原因,if\(DS18B20\_RAM\[8\] == DS18B20\_RAM\[9\]\)这个判断一直进不去,Read\_T1\(\)函数直接返回出一个随机值。
将FloatTemperature初始化为0,直接关掉if\(DS18B20\_RAM\[8\] == DS18B20\_RAM\[9\]\)这个判断,最后返回出来的温度一直66和133左右,没找到问题所在。
大神们有解决思路可以评论区留言,万分感谢。
6. **在生活物联网平台编辑的公版APP,设置了二级界面,但是在手机上一直划不出来
(未解决)**