技术标签: 微信小程序 云服务器 js MQTT服务器 小程序
最近作比赛,需要用到物联网平台,对于实时的系统来说,mqtt透传是最好的选择,而微信小程序的开发成本又很低廉,所以最终决定使用微信小程序+MQTT服务器的方式来实现,其中也踩了不少坑,所以就此分享一下搭建项目的全过程。
首先是需要准备的东西:
MQTT服务器搭建的过程请参考 :mqtt+ssl服务搭建以及ws+wss支持 这篇文章,我就是一路按照这篇博文搭建的服务器。
下载的证书中可能含有阿帕奇、nginx等多个文件夹,部署MQTT服务器时使用的是阿帕奇(apache)文件中的
我从腾讯云申请的证书,后来在小程序测试时会发生开发者工具中可以正常使用,但是真机调试就不行(选不选检验合法域名都不行),其实是因为所颁发的证书不完整的原因,可以通过以下方法解决:
重启mqtt服务器可以使用如下方法:
微信小程序使用mqtt是通过websocket来实现,需要用到mqtt.js这一个第三方库。
由于微信小程序不支持CDN(可能支持,反正我是不能用),所以只能下载到你的项目里,地址:
首先在app.js中,最上方(App({})的上方)添加代码:
var mqtt = require("/utils/mqtt.js") //引入mqtt文件
//随机生成字符串,因为clientId你设成一个固定字符串的话,当你编译
代码的时候就会以这个ID连接服务器,当预览或者真机调试的时候还是这个
ID,就会发生ID冲突的问题,当时差点被这个不起眼的BUG整疯
function randomString(len) {
len = len || 32;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var maxPos = $chars.length;
var pwd = '';
for (let i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
//连接配置
const options = {
connectTimeout: 4000, //超时时间
clientId: randomString(30), //随机生成ID
username: '', //用户名
password: '', //密码
}
接下来在App中添加小程序加载监听函数:
onLaunch: function () {
let that = this
var client = mqtt.connect('wxs://www.xxx.email:8081', options) //你自己的域名
client.on('connect', (e) => {
console.log('成功连接服务器!')
})
client.subscribe('esp8266', {
qos: 0
}, function (err) {
if (!err) {
console.log("订阅成功:esp8266")
}
})
client.on('message', function (topic, message, packet) {
that.globalData.mqttData = packet.payload.toString()
})
}
这样,在全局变量中就储存了服务器发来的消息,其他页面均可读取消息:
const app = getApp(); //引入全局变量
Page({
console.log(app.globalData.mqttData)
})
var client = mqtt.connect('wxs://www.xxxx.email:8081', options)
使用时要注意 是wxs 而不是 wss,因为这个第三方库的作者进行了一次封装
请参考这片文章:在微信小程序中使用mqtt服务
这个问题我也不太清楚,因为我一直没有勾选不检测合法域名的选项,现在补充一下如何添加合法域名:
IDEA最优秀的翻译插件效果特性多翻译引擎Google翻译有道翻译百度翻译多语言互译文档翻译语音朗读自动选词自动单词拆分单词本使用申请有道智云翻译服务(可选):注册有道智云帐号并获取其应用ID和应用密钥绑定应用ID和应用密钥:Preferences(Settings) > [Other Settings] > Translation > 有道翻译申请百度翻译服务(可选):注册百度翻译开放平台帐号并获取其应用ID和应用密.
一、微信小程序上传(注:appId一定要正确)步骤1、找到小程序开发工具的右上角 有一个上传的按钮2、点击按钮,修改补丁,主要备注好(方便同伴理解了解)3、在微信公众平台扫码登录自己的账号4、找到版本号,找自己上传的5、自己上传的右边有一个按钮换成体验本6、在左边会看到有一个蓝色的文字 点击会有一个二维码 可以分享给同伴查看测试总结:小白在线笔记...
1、在子窗体中用contextMenuStrip,第一次右键时主窗体会跑到子窗体前面,contextMenuStrip不显示;之后在子窗体右击正常显示contextMenuStrip。转载于:https://www.cnblogs.com/dengwx/p/5647983.html...
TensorFlow是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的。准备安装 AnacondaTensorFlow 安装的前提是系统安装了 Python 2.5 或更高版本,教程中的例子是以 Python 3.6(Anaconda 3 版)为基础设计的。为了安装 TensorFlow,首先确保你已...
一、两个常用工具1、随机生产一个[0,1)之间的数Math.random()举例:double box =Math.random();//产生随机小数 [0,1)System.out.println("box="+box);//[min,max+1)int min =5;int max =9;box =Math.random()*(max-min+1)...
点击关注上方“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货SQL专栏SQL基础知识第二版SQL高级知识第二版前言写这个话题心里有点没底,主要是我们微信群里懂SQL的大佬越来...
/// <summary> /// Inserts a watermark into a document. /// </summary> /// <param name="doc">The input document.</param> /// <param name="waterma...
C类型系统中的每个单独类型都具有该类型的多个限定版本,对应于const,volatile中的一个,两个或全部三个,并且对于指向对象类型的指针,限制限定符。本页介绍的影响限制预选赛。仅指向对象类型可以是限制合格(特别地,int restrict *p和float (* restrict f9)(void)是错误)。限制语义仅适用于左值表达式; 例如,转换为限制限定指针或返回限制限定指针的函数调用不是...
十五、处理事件 原文:Handling Events 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 你对你的大脑拥有控制权,而不是外部事件。认识到这一点,你就找到了力量。 马可·奥勒留,《沉思录》有些程序处理用户的直接输入,比如鼠标和键盘...
Terraform架构OpenStack环境准备部署一个单节点的OpenStack环境,参考这篇文档https://docs.openstack.org/devstack/latest/guides/single-machine.htmlAdd your userWe need to add a user to install DevStack. (if you created a user during install you can skip this step and just give
CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。本博文对应地址: https://hceng.cn/2017/12/26/Exynos4412——触摸屏驱动/#more移植Exynos4412的I2C接口触摸屏驱动。这应该是Exynos4412 LCD部分的最后一部分了。为了去探索LCD驱动,前面做了一系列的准备工作,最后终于完成了L...
为什么80%的码农都做不了架构师?>>> ...