
昨天在《烂大街的ESP8266究竟该咋玩?》文章中,我们说到了ESP8266的AT指令集的使用。本来今天要讲一下MQTT协议的,但考虑到物联网知识体系的完整性,决定还是先说一下物联网智能家居的控制过程和流程,以及关于MQTT协议中的订阅和发布是什么意思。就算是下一章的前奏吧,请大家耐心看完
简单地说,我们最终实现的目的,是要用STM32+ESP8266外加传感器和继电器来控制家中的开关,以及得到家中的各个电器的运行状态。其原理是家里的电器先接带STM32+ESP8266+继电器的智能插座,智能插座再接家里的插座,这样只要控制ESP8266的这个插座(类似中介)就能控制家里的任何电器。
下面这张图就是控制方式,通过家用的路由器将各个电器和手机联系起来了,手机可以通过路由器控制各个挂载在路由器上的器件,这是比较常用的模式。

一般来说,把手机叫做上位机,控制器叫做下位机,难道这就是我们常说的物联网吗?准确地说,这是不对的。毕竟只能围绕着这个路由器,有一定的局限性。
比如,你到公司才想起忘了关家里的灯,那么只能跑回家,运气好的话,在楼下就能连到家里的路由器,然后再通过手机app关灯。这时候你想,如果能在任何地方控制家里的电器该多好,要是真有这样的功能,比如你冬天回家前可以先把家里的空凋打开……
我们这个项目就是ESP8266连接家中的路由器的网,手机连接的是4/5G网,这样你就能在家中设备不断电、不断网的情况下,在任意地方来控制你家中的用电器设备了。
一、理论知识
那么,怎么样才能让你在任何地方控制家里的电器(当然提前还是要有网)?
我们先来看下面这张图,跟原来不一样的地方是用云服务器代替了家里的路由器,就这么简单!
那么,什么是云服务器?云服务器又在哪?你就把它当作天上的一朵云就好了(阿里云、腾讯云),反正就是不管你的手机,还是别的什么设备,只要能连网就可以连接云服务器。

那么,连上服务器后,是不是就能直接控制了?当然可以!
刚学单片机的小伙伴肯定玩过串口实验,从单片机发送字母xiaoshidi,串口调试助手就收到字母xiaoshidi,觉得很有趣。但有时候你会发现,如果你的串口通信的函数写的不好,或者有误的时候,就会出现通信错误,比如接收的数据是乱码等,那么它的可靠性就不是很好了。
到底什么叫可靠性不好呢?比如这边发过去的时候是xiaoshidi,运气不好的话,那边只可能收到的是shidi,这样就会出事。所以,我们也不能直接向云服务器发送个简单指令去控制下位机,需要有一定的约定。
比如,事先告诉服务器我要发送9个字母过来了,云服务器收到后就知道了,如果接收xiaoshidi,一般来说是正确接收了;如果只收到shidi,说明丢了4个字母,这就是我们常说的丢包。那么,这样的约定就是我们常说的协议!
有句话叫“没有物联网协议就没有智能安全”,其实关键就是协议,在物联网中常用的就是MQTT协议。那么,为什么不用我们常见的http协议呢?只能自己百度了。这边简单介绍一下MQTT协议的原理,因为只要会MQTT,就能玩转物联网。
我们先来看个例子:

为什么能收到呢?是因为我关注它了,我想这些玩微博的小伙伴都知道。
下面,我再用图表示一下:

通过这样的控制方式,就可以解决在单位也能开/关家里电灯的问题了。不过前提是,手机和单片机都能连上云服务器(手机可以用家里的网或者4G就可以连到云服务器,单片机可以通过家里的WIFI就可以连到云服务器)。
这时可能有人会问,在微博里像“晓艳考研”那么有名,有很多人都会关注,比如小雅、小李等等,只要“晓艳考研”发布消息了,关注的人都能收到。

有的小伙伴脑子转的溜,感觉这样控制是有问题的。因为这样的话,手机是统一控制了家里的电器,总不能都一起开、一起关吧?

关于MQTT理论,我们先说到这儿,其实还有很多玩法,比如在微博里“晓艳考研”也关注了我呢?这个有什么用?这样可以用控制器采集信息上传到我们的手机了!那就可以采集家中的环境数据上发到你的手机。
二、实现部分
根据下面这张图,我们要做三部分:单片机、云服务器、手机。

1、单片机
一般来说,单片机也叫作控制器,或者下位机。我们这里用的是STM32单片机。
这时有人会问,为什么不用51单片机,或者arduino?因为现在用STM32的人太多了,arduino又体现不出你是一个电子信息专业的,51就不用说了。
可能又有人说,你为啥不用esp32,本来就可以当一块单片机,搞个STM32岂不是太麻烦?
此言差矣!我们这里是把ESP8266当做一个模块使用,我仅仅用STM32的串口就可以控制它连网。但如果单单只用ESP32的话,就大大增加了开发的难度,也就是我们通常说的SDK开发,而且学习的同时,又能巩固单片机的知识,搞SDK确实不适合初学者。
最后,我们的MQTT协议转换成C语言代码已经有前辈写好了,我们的目的就是学会它,学会反向学习,才能增加你对新事物的学习兴趣。MQTT协议是现成的,拿来用即可!
在理论部分提到的MQTT协议是整个物联网的核心,所以单片机、手机和云服务器都要有这协议。这就好比三个中国人在聊天,一个日本人过来听,他根本听不懂,因为他没有“中文”这个能力。所以,控制器也要有这个解析协议的能力。
2、服务器
服务器可以理解成一台普通的电脑,只是它的性能比较稳定不容易死机。目前服务器有很多,做得比较大的像腾讯云、阿里云等等,购买服务器也是个坑,大家需谨慎!前期的话,大家学习不用买,登录生活物联平台用现成的,后面我会讲到。
3、手机
一般把手机也叫上位机,上位机还有电脑、平板等等,实验中是用手机发送命令来控制我们的单片机。那么手机能打开直接能操作吗?显然不能,需要编写相应的程序界面。
如果你是安卓手机,可以用android studio软件编写相应的app程序。当然,前期的话,大家不要去想着做一个app,难度还是蛮大的。建议大家抽空多去B站看看相关视频学习一下,这个后面再说。
由于时间有限,今天先讲到这里,明天将给大家附上最后一篇(详细说一下如何用STM32和ESP8266来实现与服务器之间的数据收发)!
未完待续……
原文始发于微信公众号(21ic电子网):【续】烂大街的ESP8266究竟该咋玩?
文章评论