STM32物联网实战教程(二)—MQTT协议简介
文章目录一、理论知识二、实现部分1、单片机2、服务器3、手机4、实践部分 一说起物联网很多人可能觉得听过但是觉得很难,因为不是这个专业也导致没有信心去深入了解。其实不然,只要你会玩微博也能了解。按照国际惯例,写文章前先来个引言。因为木有引言先给大家讲个小故事,年前有个好朋友约喝茶,寒暄之后说最近物联网那么火,正好有个有意思的想法,看看能不能实现(他本人非电子专业),他说家里有很多电器,比如小米的
Author:果果小师弟 电子信息专业在读研究生
有一点思考,有一点想法,有一点理性!
定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!
CSDN@果果小师弟,CSDN首发,果果原创
个人主页的地址为:👉智果芯个人站👈
- STM32物联网实战教程(一)—ESP8266的AT指令集详解
- STM32物联网实战教程(二)—MQTT协议简介
- STM32物联网实战教程(三)—MQTT协议产品和设备
- STM32物联网实战教程(四)—MQTT协议Connect控制报文
- STM32物联网实战教程(五)—MQTT订阅主题和订阅确认
- STM32物联网实战教程(六)—MQTT协议取消订阅和取消订阅确认
- STM32物联网实战教程(七)—MQTT协议发布消息和发布确认
- STM32物联网实战教程(八)—Android studio新建一个项目
前面我们说到了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就能玩转物联网,先看个例子。
比如我在微博里关注了“晓艳考研”,那么当“晓艳考研”发了一条微博后我就能收到。为什么能收到呢?是因为我关注它了。我想这些玩微博的小伙伴都知道,我再用图表示下。
好了,到这边其实已经把MQTT协议的原理讲清楚了。晓艳考研相当于手机,我相当于单片机(控制器),如下图。
这样的话就实现了手机控制单片机的功能!在微博中只有我关注晓艳考研这个号才能收到晓艳考研发来的微博,那么在MQTT中,单片机订阅手机的这个主题才能收到手机发送的指令!这样如果单片机再通过继电器接家里的电器,手机就可以控制家里任何电器的开关!
通过这样的控制方式就可以解决在单位就可以开关家里电灯的问题,前提是手机和单片机都能连上云服务器(手机可以用家里的网或者4G就可以连到云服务器,单片机可以通过家里的WIFI就可以连到云服务器)。
也有可能有人会问,在微博里像“晓艳考研”那么有名,有很多人会关注,比如小雅、小李等等,只要“晓艳考研”发布消息了,关注的都能收到。
在我们MQTT协议中也一样,只要单片机1、单片机2、单片机3等等都订阅了手机这个主题,那么只要手机发指令,就能控制各个单片机,那么也就是能控制家里的各个电器。有的小伙伴脑子转的溜,感觉这样控制是有问题的,因为这样的话手机是统一控制了家里的电器,总不能都一起开一起关吧。
在微博有个功能叫做@,虽然我、小雅、小李都关注了“晓艳考研”,但是“晓艳考研”在发布消息的时候还能@我,那么在我们MQTT协议中也是一样,也能@某个控制器,这样的话就能单独控制某个功能了。关于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站看看相关视频学一下,这个后面再说。
好书不厌百回读,熟读自知其中意。将学习成为习惯,用知识改变命运,用博客见证成长,用行动证明努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
听说 👉点赞👈的人运气不会太差,每一天都会元气满满呦!_❤️❤️❤️
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了👉 关注 👈我哦!
更多精彩内容请前往 果果小师弟的微信公众号
如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留个言。或者你有更好的想法,欢迎一起交流学习~~~
更多推荐
所有评论(0)