2020年8月23日

51控制EMW3080连接阿里云智能开关切换器V1.0

作者 Duyes

本文章是按照时间顺序更新的,大家阅读的时候可以从下往上看:)如果已经看过以前的,直接看最新内容就可以了:)

这个工程是51单片机配合EMW3080的工程,我个人对51和EMW3080都不是很满意,所以图片我就直接从LCEDA工程上复制下来的,哪天看不到也不要介意,各位请期待更精简的V2.0版本!

目录:

1. 8月22日重新更新本项目演示视频,群友说我的竖版视频看着很累。。。那我重新拍一份横版的吧:)(PS:部分浏览器看本视频可能会发现视频有抖动现象,实际上视频是没有问题的,大家可以直接下载视频观看);

2. 8月19日更新温度上传在阿里云端设定的修订内容和胡老师解决手机APP和按钮不同步的方法;

3. 8月18日下午更新串口通讯有些需要注意的地方和调试方法;

4. 8月18日上午更新手机APP端显示设备周围温度的方法;

5. 8月17日晚更新EMW3080V2P模块启动设备AP模式配网方法( 代码部分):(附件代码已更新);

6. 8月16日更新:硬件焊接和软件调试部分注意事项;

7. 8月11日日志: 项目立项,及基本设计思路;

文末附物联网控制灯开关视频,简易回流焊视频和文章中提到的代码和工具:)

IMG_0955.jpg

============我===是===时===间===分===割===线==============

8月19日更新温度上传阿里云端设定的修订内容和胡老师解决手机APP和按钮不同步的方法:

前面我说过,在设定手机APP画面的时候,阿里云端显示的温度和实际温度不一致。昨天偶然调试的时候发现,只要在字符串属性里面把温度的范围设定到0~50摄氏度,就可以解决阿里云端显示温度不一致问题了。

tep01.png
tep02.png

下面是胡老师介绍的解决手机APP端按键和实物按键不同步的解决办法:

大家看源代码里面,发现我们的设备联网阿里云后,在5分钟之内是没有上报阿里云端我们设备信息的,所以只需要在联网以后,主动上传一下,就可以解决这个问题了:

文件在Wifi.c里面,附件已经上传

sb01.png

============我===是===时===间===分===割===线==============

8月18日下午更新串口通讯有些需要注意的地方和调试方法:

1.17日晚宋老师说的CH340C和51单片机进行通讯的时候需要防倒灌,防止51单片机复位不能。我的方案是使用了肖特基二极管,宋老师的方案是使用330欧的电阻。因为电阻我没有实际测试,所以大家如果有兴趣可以尝试一下,我的肖特基二极管焊盘也可以直接焊上电阻,问题不大。

SS24.png

2.关于测试单片机向EMW3080发送数据的查收方法,因为我的板子主要是拿来工程打样的,所以我直接预留了各个模块的IO端子,大家只要把单片机的TXD2(或者EMW3080的10脚RXD0)和CH340的RXD相接就可以读出单片机对3080的发送数据了,每次系统启动可以看到单片机对3080都发送了啥,如果你按下复位按钮,单片机又发送了啥:)比如开关的状态?温度的状态?更多功能希望各位老铁自己琢磨。我是使用了单独的CH340模块进行测试的。原板上的也能用,但是需要跳线,我嫌麻烦,就直接用现成的了。

tx1.png

当然阿里云也有设备调试的选项,大家也可以在左边获取到设备的状态,右边的内容我感觉可能有些加密,看不太懂,也就直接忽略了!

tx3.png

============我===是===时===间===分===割===线==============

8月18日上午更新手机APP端显示设备周围温度:

关于温度显示,其实比较简单,只需要把我们的板子焊上DS18B20就可以了,实际测试中我发现不是所有的DS18B20都可以读出温度值,所以大家最好按照DATASHEET进行选择。

代码部分我们不用修改,因为宋老师的代码已经包含了这部分(这部分代码可能有点小bug,就是偶尔会获取不到温度值)。主要需要修改的是阿里云端,我们查看WIFI.C,发现我们代码和阿里云产生关联的两个关键字符串是”CurrentTemperature”(温度)和”PowerSwitch”(开关)。

tep1.png

PowerSwitch在我15号有提到过,这里又重新再提一下哈。这两个字符串对应了我们阿里云的这个位置:

tep2.png

很多朋友都说明明添加了开关和温度,要么就是控制不了,要么就是不显示温度,其实就是这里的问题。当然如果我们后续还要开发继电器2的控制,或者其他什么控制,只需要在代码里面添加相应的关键字和在阿里云这里添加对应的关键字属性就可以完成了。

随后我们去人机交互/设备面板内更新我们的APP端面板。需要留意的是自定义面板的温度可能显示的是错误的,以实际手机端显示为准。

tep4.png
tep3.png

这样我们就得到了在手机端获取了我们设备周围的温度显示:

tep5.png

到此,我们的设备已经完成了设备AP配网,设备手动控制,手机APP端控制,手机查看设备周围温度等等这些功能,也已经摆脱了每次配网使用串口助手手动发送AP配网指令的尴尬局面。

后面可以考虑更新对继电器2进行开关控制,对面板的LED1~LED5进行控制,对虚空着的KEY1~KEY4进行操作设定,比如:对阿里云平台设定,如果检测到设备环境温度超过50度,启动继电器2风扇对设备进行降温等(代码主要逻辑为:本地采集DS18B20的温度,大约10秒一次,采集到的温度如果超过50度,上报阿里云平台,发出警示,设备端自己控制继电器2打开风扇。当然,这个可能更多的是本地进行操作,阿里云端只负责发出警示即可)

============我===是===时===间===分===割===线==============

8月17日晚更新EMW3080V2P启动设备AP模式配网 代码部分:(附件代码已更新)

16日晚上宋工介绍了一下关于3080V2P的配网方式问题,这个3080配网方式主要有两种:一种是一键配网,兼容性差,但是比较方便,命令是AT+ILOPAWSSTART\r,还有一种是设备AP配网方式,兼容性好,操作稍微复杂一点,命令是AT+ILOPAWSAP\r。这两种方式中我的网络环境只需要使用后面那种就可以了,改代码也是非常方便的。简单的粗暴的把WIFI.C里面的AT+ILOPAWSSTART\r替换为AT+ILOPAWSAP\r就可以了。但是这样修改不太利于阅读,有种挂羊头卖狗肉的意思。所以我们重新添加几行修改如下:

1.WIFI.C内注释掉一键配网,新添加AP配网

AP1.png

2.WIFI.H里面添加一行

AP2.png

3.主程序Main.c里面注释掉一键配网和添加AP配网

AP3.png

完成以上3步即可以将一键配网完美改成设备AP配网。这种配网方式兼容性好,比较实用。

其实如果大家希望既有一键配网又有设备AP配网,可以考虑按照胡老师的做法:

ap01.png
AP02.png

和宋老师课上说的不一样的地方就是:这个延时代码实际上是添加在main.c里面的,并不是wifi.c。通过上面代码,我们可以完成首先进行一键配网,如果一键配网不成功,则在60秒后开始设备AP配网。当然,这种方式对我这种一键配网无论如何都不成功的,没有多大意义,所以广发朋友自行判断取舍哈。

============我===是===时===间===分===割===线==============

8月16日更新:硬件焊接和软件调试部分注意事项:

1.8月15日上午拿到板子,首先测量了MCU芯片焊盘和各个IO口线路正常不正常,实际测试板子测量点均正常,没有问题。随即开始焊接。

2.首先焊接的是Typec口和MCU,这个比较简单,高温刀头和助焊剂即可搞定。这里不知道是不是年纪大了,小圆点方向又放反了,没办法只能拆了重新焊接。好在这个难度不大,略过。

3.焊接完右半部分后,先测试一下右半部分核心板系统。按了复位键,无效???按了复位以后,ME6215C33M5G即使使能端接低电平,输出电压依旧是3.3V?各种怀疑,先是怀疑LDO坏的,拆换了2个故障依旧,拆了LDO后,LDO的输出管脚依旧是3.3V??整个电路,左边的LDO没焊接,右边除了LDO还剩CH340C是5V供电的,紧接着怀疑CH340C有问题,3.3V脚可能故障,用针挑起来后,故障依旧。没办法把整个CH340C给拆了,这下LDO的输出端没有3.3V了,知道是CH340C有问题,但是该如何解决呢?首先想到的是把CH340C改3.3V供电,于是PCB电路板各种手工切断,飞线到3.3V。问题来了,51单片机使能端复位后,3.3V降到0,这时候CH340C也就不工作了,没法烧录。。。。没事,难不倒我,电路板左边还有LDO一个。。。一顿操作后,左右两边LDO都弄好了,CH340C也正常了,但是还是没法烧录???烧录软件认不到51单片机,检查了一遍51单片机管脚,没有任何问题。心里一万匹草泥马飞奔而过!目前只剩下一个可能,就是51单片机和CH340C通讯有问题,查了一些资料后,估摸着可能是51单片机的RXD和CH340C的TXD发生倒灌,随即在板子背面飞了一个肖特基二极管。再次测试,功能恢复正常!随后尝试着恢复CH340C的5V供电系统,居然也正常了???好吧,51单片机系统算是OK了!

PCB修改如下: 切断CH340C 3.3V脚和其他元件3.3V脚的关联,CH340C和51MCU的RXD串上二极管

3.3V断.png
SS24.png

4.整个右边完成后,随即焊接左边,左边硬件电路没啥问题,焊接后即开始调试(提醒一下,3080千万不要用洗板水清洗,喷完你会后悔的,参考我的图片~)。软件部分才真的是噩梦的开始。。。本人软件部分比较弱,把程序反复编译后,始终不能对EMW3080V2P进行配网,这一部分整整折腾了将近5个多小时~在15日半夜,群内胡老师指点我,宋老师软件部分,可能是有缺陷的,整个系统启动后,完成了单片机对EMW3080的AT命令输出,但是输出的AT指令唯独缺失了让EMW3080成为AP的命令。。。这样,不管你如何用手机进行配网,都会找不到EMW3080的AP无法进行下去。胡老师指点使用串口通讯工具,手工打开3080的AP模式,即可配网成功!大约12点左右,宋老师上线,提示不一定要把配网模式设定为设备AP模式,可以使用一键配网模式试试。胡老师测试成功,但是我这个就没这么走运了。不管是换手机,换路由器,还是换手机AP,均无法正常使用一键配网模式成功配网。这个我也百度了一下,这种模式虽然方便,但是部分设备不支持,有局限性。那么咱就还是使用设备AP模式配网吧:)群内有胡老师的串口调试工具下载。 AP.png

5.完成了配网,乍一看好像各项功能都应该正常了,这时候其实还有两个问题:其一,手机APP端无法正常操控我们的设备;其二,每次重启后都需要重新配网,虽然设备指示灯看着是在网状态,但是阿里云上的设备是离线的。那么这两个问题,第一个问题,在代码中,宋老师使用了PowerSwitch的开关,所以在阿里云端配置是需要手工添加开关按钮的,开关按钮选择的是PowerSwitch.修改后即可解决问题。第二个问题,我使用了串口助手进行抓包,发现每次51单片机发送给3080的三元组并不是我要求写的这个,但是我搜遍了整个代码,也没找到这个三元组,怀疑是第一次偷懒使用了别人编译的文件,写到我的FLASH后始终不能刷新掉。尝试在烧程序的时候,清除EEPROM后,解决问题!

power.png
QQ截图20200816174735.png

目前情况是,本板满足考试要求:)但是问题也还是有的,比如:继电器部分还有一路空着,没有发挥作用;代码部分始终没有写入让3080配网时候成为AP的命令,导致需要配网的时候还需要使用AT指令协同作战;手机APP端操作界面没有美化等等。这些都需要后期继续完善!只能后面抽空再处理啦:)

============我===是===时===间===分===割===线==============

8月11日日志: 项目立项,及基本设计思路:

本项目是基于51单片机的物联网控制系统;单片机是STC15W4K56S4,应该是目前最强的51单片机了。

如果只是拿来做个物联网工程是不是有点大材小用了?So…除了做物联网工程,还是做个最小核心板算了:)

板子左上是庆科EMW3080V2P,左下方是受控制的2路继电器;右边是51单片机核心板,如果哪天不用来做物联网项目了,把左边给切了就行了。

当然,如果不切也是可以的,物联网模块和继电器模块我都设置了开关跳线,平时都短接跳帽,不需要的时候拔了跳帽就可以了。

因为没有摸准继电器到底需要多少的电源,所以无法确定是用单片机的3.3V电源还是网络模块的3.3V电源。没办法,设置了一个二选一的跳帽供选择供电方式。

核心板的所有IO口和网络模块的所有IO口都已经引出,方便以后拆开后单独使用:)

DS18B20那块最好是用1.27间距4P的母座,这样实际使用时候可以兼容DHT11;

板子最右边一排母座,可以直接插1602和12864的显示屏;

核心板的IO口丝印在背面~

过孔比较多,没办法,又要照顾物联网模块,又要引出全部IO口,还贪心的想要插1602和12864,忍了!

微信图片_20200816235030.jpg