啰嗦一下
上一篇中提到硬件通过http——GET的方法不停地访问服务器,来实现实时控制,但是这种办法会造成浪费服务器资源,如果并发多的话那就服务器就会废掉了。
为了实现不用多次访问服务器,浪费资源,所以自己也找了不同方法,结果发现可以使用两种方式(这两种方式在nodemcu的固件里面都有相关的API,开发起来简单):一种是websocket,另外是一种MQTT。自己也试过了两种方式,结果发现还是MQTT比较好用,感觉也比较简单。
使用MQTT协议对于新手的我来说是一个iot物联网实践中的一个重要里程碑,就好像又一次发现了新大陆
MQTT是比较适合硬件的控制,逻辑也很简单。在做实践的时候自己觉得里面有几个关键字,订阅主题、发布主题,消息代理;(如果是更详细了解可以google一下就好了)
硬件可以订阅主题和发布主题:订阅主题——用于接收服务器发来的数据;发布主题——用于传输数据到服务器。同样的服务器也一样。
消息代理就是一个消息转发的中介,其实是一个软件,可以安装在服务器中——我用的是mosquitto;它里面的怎样实现消息转发的细节自己没有了解,只会使用(自己不是什么牛人,不懂研究个中的逻辑,只会拿来主义)。
安装mosquitto(消息代理)
安装mosquitto,部署环境总是比较麻烦,过程中总会遇到各种大小问题,幸好有google,自己搜索一大堆不同的资料,一点一点的尝试,最终还是搞定。
自己的环境是:window系统+wamp服务器,简单的mosquitto安装步骤(根据自己的情况总结出来的)
1)先安装cywin,openssl-light,mosquitto
2)下载动态库文件cygcrypto-1.0.0.dll、cyggcc_s-1.dll、cygssl-1.0.0.dll、cygwin1.dll、cygz.dll、libssl-1_1-x64.dll、libssl32.dll、msvcr100.dll并复制到 mosquitto安装文件夹中
3)配置好并可以在服务器中测试可以连接,需要配置mosquitto.conf文件
需要添加内容:
listener 1883(mosquitto 端口)
listener 9001(websocket 端口)
protocol websockets (支持websocket协议)
http_dir C:\wamp64\www(web网站更目录路径)
-----------------------------------------------------
安装部署完成后,需要启动mosquitto
打开cmd
进入mosquitto目录
输入命令 mosquitto -c mosquitto.conf 即可
以上mosquitto消息代理已经安装完成
实现远程控制led灯
硬件方面,使用esplorer软件重新编写代码,上传到硬件中;用mqtt方法,代替之前的http-get方法。里面逻辑是:定义一个客户端标识,连接上mosquitto,订阅一个主题,发布一个主题,接收消息,发布消息(这样就可以和服务器进行双向的沟通)
服务器方面,建立一个html页面(主要使用jquery来get数据和post数据),其中首先要与mosquitto代理建立连接,其中需要引入mqttws31.js(用于与mosquitto沟通,这个文件可以自行下载)。你可以利用mqttws31.js来定义一个客户端标识,连接上mosquitto,订阅一个主题,发布一个主题,接收消息,发布消息(与MQTT连接逻辑其实和硬件的一样)。但是注意的一点,服务器端订阅的主题其实是硬件端中发布的主题(这样服务器就可以获取硬件传来的数据);服务端发布的主题其实是硬件端订阅的主题(这样服务器就可以发布数据到硬件中)。两个终端的主题是对应的,这样两个终端之间数据才能互传。
待html页面与mosquitto建立连接后,对led控制的逻辑设计(用JavaScript即可)具体如下:用户访问html页面,用户开启led灯,调用mqttws31.js其中的发送数据方法,将json数据发送到led灯中,然后led灯解释json数据,最后修改led灯的状态(其实html页面的led状态数据先发送到mosquitto,然后mosquitto根据关联的主题,最后将数据转发到对应主题的led灯中);
同时led灯也将自己的状态发送到html页面当中,html页面再进行逻辑操作,这样就可以实现led的状态同步和实时控制。
实现思路图如下:
==================================================================
yeah!简单的远程控制led灯已经结束,但下边需要如何呢?既然自己都开了个头,来,做一个可以控制n个智能硬件的平台吧~~。初步的设想:用户可以自定义添加多个硬件(我想用扫码添加的方式),添加用户进入不同的智能硬件控制页面单独控制硬件;智能管理后台的搭建,框架的选定,数据库的建立,逻辑的设计开发。。。。。感觉路还有很长~~,下一篇更精彩