还没有搭建emq服务器的宝贝们可以参考这篇文章
云服务器部署emq服务器一条龙
申请链接
EMQX 是一款全球下载量超千万的开源物联网MQTT 服务器,高效可靠连接海量物联网设备,高性能实时处理消息与事件流数据,可运行在公有云、私有云和混合云上。
简单来说就是用于进行软硬件的信息交互
这里说一下企业级emqx,用QQ邮箱就可以申请了,可以有免费15天的license,如果只是开发学习的话建议不配置license,不配置它有个限制就是最多连接5台设备或软件,用于开发学习足够了
MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。
emqx是基于mqtt协议的,所以采用订阅、发布主题的形式来进行信息交互的。
示例:现在假设有Topic/1和Topic/2两个主题,A,B两人。目前A订阅了主题Topic/2,发布主题是Topic/1,而B刚好与之相反。即订阅是Topic/1,发布是~2
那么在这种前提下,A就会收到发布主题为Topic/2的人发布的消息,并且他发的消息会被订阅了Topic/1的人收到。
开发过微信小程序都知道,它只支持加密的协议,譬如https和wss协议,所以我们还要买个域名并配置SSL证书 教程链接
由于源码过长所以我放在另外一个博客了 mqtt.js源码 复制粘贴就好了
var connect = require('../../utils/mqtt.js')
const mqttUrl = "wxs://www.***.xyz:8084/mqtt"; //填写自己的服务器域名
/*data里面弄个client列表后面用来接收*/
data:{
client:{},
}
注意: 这里我的mqtt源码是放在utils文件夹下的。所以具体路径要根据自己实际的位置喔~ 另 . . /表示当前文件的上一级目录
onClient(){
var that = this;
that.client = connect(mqttUrl);
that.client.on("connect", function () {
console.log("成功连接emqx服务器!");
that.client.subscribe("Topic/stm32", function (err) {
//订阅主题topic/#
if (!err) {
console.log("成功订阅设备上行数据topick");
}
});
});
}
这里我们可以看到订阅主题是subscribe,他有1个参数,就是我们要订阅的主题,譬如上方代码我订阅的是"Topic/stm32",那么我就会收到所有发布在这个主题的消息
that.client.on("message", function (topic, message) {
let dataFromDev = {};
dataFromDev = JSON.parse(message); //message是16进制的buffer字节流,要转换
that.setData({
Temp1:dataFromDev.Temp1,
Temp2:dataFromDev.Temp2,
LED1:dataFromDev.LED1,
LED2:dataFromDev.LED2,
})
});
由于接收到的信息是16进制的buffer字节流,所以我们还需要手动将它转化为JSON格式,在这里我们就已经接收到了我们的消息了
changeLED1:function(event){
var that = this
if(event.detail.value){
that.setData({
LED1:true
})
that.client.publish("Topic/wx",'{"LED1":true}',function(err){
if(!err){
console.log("成功下发开1灯命令")
}
})
}else{
that.setData({
LED1:false
})
that.client.publish("Topic/wx",'{"LED1":false}',function(err){
if(!err){
console.log("成功下发关1灯命令")
}
})
}
},
发布是publish,它有两个参数,第一个是你发布的主题,第二个是你要发的数据(这里的数据格式必须是JSON格式),譬如上方代码发布的主题是Topic/wx,数据是LED1:true。(这里前端用的是switch组件,通过点击按钮来判断是开还是关,上面代码的event就是用来接收是开还是关的)
这是我写的第一个教程,之前的都是些以前记录的笔记,所以没有太过的解释,本人还是个菜鸟,有错误的地方还望海涵。