物联网MQTT微信小程序开发:ESP8266与OneNET集成指南
这篇文章主要了解ESP8266物联网小程序MQTT远程操控相关内容(ESP8266+OneNET+小程序)
MQTT通信
MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择。
mqtt有很多的关键词,这个我们只需要了解一部分就可以了
在管理MQTT连接方面我采用的是MQTTX,这里注意我们设置的属性名和代码中指定的符合就行了
小程序开发
想要开发微信小程序,首先要有一些基础知识:html、css、js、json等,小程序的框架和前端大体相同,一个页面包括js、json、wxml、wxss格式的文件。如果你有前端的一些经验或者是 jsp “全栈” ,那你对这方面的入门会很快很快的哦!
由于我之前没有接触过小程序开发,我将会一步步的剖析如何使用微信小程序通过MQTT服务器连接设备。使用微信开发者工具进行代码的编写,刚创建好的小程序目录是很简洁的。
配置MQTT服务
- 在公网IP上搭建MQTT服务器,并且这个IP还配置了域名,且这个域名进行过ICP备案
- 能够连接MQTT服务器的设备
这样配置看起来有些麻烦,我们可以使用OneNET来实现数据的上传和存储。
OneNET API介绍
OneNET是中国移动旗下的物联网平台,它提供了强大的数据存储和管理能力,支持各类物联网设备的接入。通过OneNET,设备可以实现数据的上传与存储,开发者也可以利用提供的API来获取这些数据进行分析或显示,亦或是发送控制指令到远端设备。
OneNET的API基于RESTful架构,支持标准的HTTP/HTTPS协议,使得各种平台和设备都能方便地集成和使用。通过API,开发者可以实现如下功能:
对于微信小程序开发者而言,这意味着可以通过发送HTTPS请求来与OneNET平台进行交互,无需搭建独立的服务器。小程序中的每一个用户界面,都可以嵌入对API的调用,实现数据的动态更新和设备的即时控制。
使用MQTTx客户端创建设备
安装MQTT的客户端库
小程序是通过js开发的,因此可以使用MQTT.js作为MQTT客户端库
MQTT.js CDN地址:https://unpkg.com/mqtt@4.1.0/dist/mqtt.min.js
点开这个连接之后会看到一大串类似于乱码的内容。但这实际上不是乱码,其实是一个被压缩过的一个js文件。
我们需要复制这整个文件,到代码中的utils下面新建一个mqtt.js文件,这样,我们的文件就有mqtt这样的一个库了。
const { connect } = require("../../utils/mqtt");
Page({
data: {
client: null
},
})
onShow(){
const that = this
that.setData({
client: connect('wxs://broker.emqx.io:8084/mqtt')
})
}
//broker.emqx.io:8084
这里要指定域名和端口,这里直接用的OneNET云平台,都是硬件设置的onShow() {
var that = this;
wx.showToast({
title: "连接服务器....",
icon: "loading",
duration: 10000,
mask: true,
});
let second = 10;
var toastTimer = setInterval(() => {
second--;
if (second) {
wx.showToast({
title: `连接服务器...${second}`,
icon: "loading",
duration: 1000,
mask: true,
});
} else {
clearInterval(toastTimer);
wx.showToast({
title: "连接失败",
icon: "error",
mask: true,
});
}
}, 1000);
that.setData({
client: connect(mqttUrl)
})
that.data.client.on("connect", function () {
console.log("成功连接mqtt服务器!");
clearInterval(toastTimer);
wx.showToast({
title: "连接成功",
icon: "success",
mask: true,
});
// 一秒后订阅主题
setTimeout(() => {
that.data.client.subscribe(mpSubTopic, function (err) {
if (!err) {
console.log("成功订阅设备上行数据Topic!");
wx.showToast({
title: "订阅成功",
icon: "success",
mask: true,
});
}
});
}, 1000);
});
that.data.client.on("message", function (topic, message) {
console.log(topic);
// message是16进制的Buffer字节流
let dataFromDev = {};
// 尝试进行JSON解析
try {
dataFromDev = JSON.parse(message);
console.log(dataFromDev);
that.setData({
//这里要写一些需要解析json的数据,就是硬件和云平台传过来的那些东西
Hum: dataFromDev.Hum
})
} catch (error) {
// 解析失败错误捕获并打印(错误捕获之后不会影响程序继续运行)
console.group(`[${formatTime(new Date)}][消息解析失败]`)
console.log('[错误消息]', message.toString());
console.log('上报数据JSON格式不正确', error);
console.groupEnd()
}
})
}
在这里,直接提取的路径和端口之类的内容,还是为了方便维护吧
const { connect } = require("../../utils/mqtt");
const mqttHost = "broker.emqx.io"; //mqtt 服务器域名/IP
const mqttPort = 8084; //mqtt 服务器域名/IP
const hefengVIP = false;
const deviceSubTopic = "/myhome/sub"; // 设备订阅topic(小程序发布命令topic)
const devicePubTopic = "/myhome/pub"; // 设备发布topic(小程序订阅数据topic)
const mpSubTopic = devicePubTopic;
const mpPubTopic = deviceSubTopic;
const mqttUrl = `wxs://${mqttHost}:${mqttPort}/mqtt`;
这些都完成了之后呢,只需要继续做完功能就可以了
作为一个物联网小白,目前就了解这些,如果有不正确的内容,请各位大佬指正,也请你们轻点喷,呜呜呜……
作者:哎呦我滴码呀