纯JavaScript实现的MQTT智能门锁
时间:2022-07-23
本文章向大家介绍纯JavaScript实现的MQTT智能门锁,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文重点是JavaScript实现的MQTT,智能门锁是基于此的扩展应用demo。
简介
JavaScript实现的MQTT Demo,可通过Hbuilder IDE进行App打包,也可直接部署到Web服务器上。
Demo内容是以MQTT实现的智能门锁应用,包括基础的订阅、发布功能。
APP端如下图所示:
硬件端为集蓝牙与WiFi与一体的物联网开发板ESP32,如下图所示:
将SG90舵机与ESP32的IO脚相连,通过控制舵机的转动,带动门把手的转动。
还可引入LED灯,作为工作状态的指示:
正文
其中MQTT库使用的是mqttws31。
Eclipse Paho项目提供了MQTT和MQTT-SN消息传递协议的开源客户端实现,这些实现针对物联网(IoT)的新的,现有的和新兴的应用程序。
HTML与CSS部分不讲解,直接上JavaScript部分。
<script>
var hostname = 'api.easylink.io',
port = 1983,
clientId = 'client-' + Math.ceil(Math.random() * 1000),
timeout = 5,
keepAlive = 100,
cleanSession = false,
ssl = false,
client,
topic_send = 'CMD',
topic_sub = 'CALLBACK',
s = "";
$(document).ready(function(){
$(".host").val("api.easylink.io:1983");
$(".subTop").val('CALLBACK');
$(".sendTop").val('CMD');
});
function onFailure() {
console.log(e);
}
//连接服务器并注册连接成功处理事件
function onConnect() {
innerHTMl(">> 连接成功!");
client.subscribe(topic_sub);
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:" + responseObject.errorMessage);
innerHTMl(">> 连接出错!");
}else{
innerHTMl(">> 结束连接!");
}
}
//消息接收处理
function onMessageArrived(message) {
innerHTMl(">> 收到消息:" + message.payloadString);
}
function getSubTopic(){
if($(".subTop").val()){
return $(".subTop").val();
}else{
innerHTMl(">> 请输入订阅主题");
return null;
}
}
function btnConnect(){
if($(".host").val()){
var temp = $(".host").val().split(":");
hostname = temp[0];
port = Number(temp[1]);
innerHTMl(">> 使用自定义BROKER: "+temp)
}else{
innerHTMl(">>使用默认BROKER: "+hostname)
}
if($(".subTop").val()){
topic_sub = $(".subTop").val();
innerHTMl(">> 自定义订阅主题: "+topic_sub)
}
if($(".sendTop").val()){
topic_send = $(".sendTop").val();
innerHTMl(">> 自定义发布主题: "+topic_sub)
}
client = new Paho.MQTT.Client(hostname, port, clientId)
//建立客户端实例
var options = {
invocationContext: {
host: hostname,
port: port,
path: client.path,
clientId: clientId
},
timeout: timeout,
keepAliveInterval: keepAlive,
cleanSession: cleanSession,
useSSL: ssl,
onSuccess: onConnect,
onFailure: onFailure,
};
//注册连接断开处理事件
client.onConnectionLost = onConnectionLost;
//注册消息接收处理事件
client.onMessageArrived = onMessageArrived;
client.connect(options);
}
function btnEnd() {
if(client.isConnected){
client.disconnect();
}else{
//console.log(">> 当前未连接!");
innerHTMl(">> 当前未连接!");
}
}
function btnOpen() {
message = new Paho.MQTT.Message("Open");
message.destinationName = topic_send;
client.send(message);
innerHTMl(">> 已发送!");
}
function btnSub(){
if($(".subTop").val()){
client.subscribe($(".subTop").val());
innerHTMl(">> 已订阅!");
}else{
innerHTMl(">> 请先输入订阅主题!");
}
}
function btnSend(){
if($(".sendMsg").val()){
if($(".sendTop").val()){
message = new Paho.MQTT.Message($(".sendMsg").val());
message.destinationName = $(".sendTop").val();
client.send(message);
innerHTMl(">> 已发送!");
}else{
innerHTMl(">> 请先输入订阅主题!");
}
}else{
innerHTMl(">> 请先输入发布内容!");
}
}
///////////////////////////////////////////////////////////////////////////
//删除当前数据
function btnClear(){
$(".msgBox").remove()
}
//渲染html
function innerHTMl(msg) {
let str =
`<div class='msgBox'>
<div class='msgTxt'>
[${new Date().Format("yyyy-MM-dd hh:mm:ss")}] ${msg}
</div>
</div>`
$(".msgCon").append(str);
}
</script>
最终完成后,可以使用Hbuilder IDE免费打包为手机端APP:
附录
项目已开源:
https://github.com/1061700625/JavaScript_MQTT
- 多迪技术总监揭秘:前端工程师主要做什么?前景怎么样?
- c#:Reflector+Reflexil 修改编译后的dll/exe文件
- testNG java.net.SocketException: Software caused connection abort: socket write error
- MyBatis.Net 学习手记
- 基于JavaScript 声明全局变量的三种方式详解
- 网页基础篇之如何制作简单的静态网页
- Mybatis.Net 整合 ODP.NET Managed
- 通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement
- 知道这几点,用微信小程序留住海量客户不是问题
- C#:DataTable映射成Model
- jenkins 多选框
- Oracle:ODP.NET Managed 小试牛刀
- C#:Func的同步、异步调用
- Python之路-day6
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 听说你一读Spring源码就懵?我帮你把架子搭好了,你填就行!
- 机器学习感兴趣么?无监督的遥感图像分类感兴趣吗?来嘛!
- 仓库ERP管理系统(springboot)
- R海拾遗-shiny4
- Spring中眼见为虚的 @Configuration 配置类
- 微信6.6.7版本后图文分享无标题的分析
- GEO 数据挖掘-数据获得
- POI和EasyExcel-你还在为导入导出数据苦恼吗?
- geo数据挖掘-2
- 基于ssm的客户管理系统
- 牛逼哄哄的Spring是怎么被MyBatis给征服了?
- Flutter如何和Native通信-Android视角
- 面试问倒无数人的Spring事务问题,就被你这样说完了?
- GEO数据挖掘3
- 史上最全Docker初学者命令大全