一、功能需求:
1、用手机扫一扫大屏上的动态二维码完成签到。
2、能按会场座位图自动分配所有人员的座位。
3、大屏上能时时显示已签到人姓名、未签到人姓名、未签到总人数。
二、实现方法:
1、大屏电脑端利用mqtt.js建立即时通讯连接,等待手机扫码发来签到信息。
2、大屏电脑端用JS调用后端API接口获取所有人员的姓名和ID,并按会场座位图在大屏上显示每个姓名的指定座位。
3、大屏电脑端用qrcode.js动态生成签到二维码并显示在大屏上。
4、人员到会场时用手机扫大屏二维码后自动把本人的姓名和ID发送到大屏电脑端。
5、大屏电脑端接收到手机端发来的签到人员信息,在大屏上时时显示已签到人姓名、未签到人姓名、未签到总人数。
三、部份代码:
1、大屏电脑端的代码:
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>教师例会签到系统</title> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <style> * {font-size: 16px;padding: 0;margin: 0;} .tbmingdan td {border: 1px solid #333;} .tbmingdan span {border: 1px solid #333;width: 70px;margin: 3px 1px;padding: 5px 0px;float: left;text-align: center;} #boxCenter {width: 822px;} .boxLeftRight {width: 448px;} .box {border: 1px solid #333;text-align: center;margin: 3px 1px;padding: 5px 0px;} </style> </head> <body> <div id="tisi" style="color: red;"></div> <table border="0" cellspacing="15" cellpadding="1" v-scope> <tr align="center"> <td id="showewm"></td> <td colspan="2"><img src="gssyxx400.jpg" /> <H1 style="font-size: 38px; margin: 9px;">教师例会签到系统</H1><br><br> <P style="font-size: 24px;" v-scope>请用手机“企业微信”扫一扫左面的二维码,即可完成签到,签到后按下图中指定位置就坐,谢谢!<br><br> 签到成功显示蓝色姓名,未签到显示黑色姓名({{store.wqdRenshu}}人)</P> </td> </tr> <tr class="tbmingdan"> <td valign="top"> <div class="box">从第二排开始:四五六年级副班主任座位</div> <div class="boxLeftRight"> <div> <span v-for="js in store.fbzr2Arr" v-bind:id="'jsid'+js.jsid">{{js.jsname}}</span> </div> </div> </td> <td valign="top"> <div class="box">第一排:行政座位</div> <div class="box">第二排:助理座位,从第三排开始是班主任座位</div> <div id="boxCenter"> <span v-for="js in store.bzrArr" v-bind:id="'jsid'+js.jsid">{{js.jsname}}</span> </div> </td> <td valign="top"> <div class="box">从第二排开始:一二三年级副班主任座位</div> <div class="boxLeftRight"> <div> <span v-for="js in store.fbzr1Arr" v-bind:id="'jsid'+js.jsid">{{js.jsname}}</span> </div> </div> </td> </tr> </table> <script src="js/jquery.min.js"></script> <script src="js/qrcode.min.js"></script> <script src="js/mqtt.min.4.1.0.js"></script> <script src="js/petite-vue.min.js"></script> <script> const store = PetiteVue.reactive({ bzrArr: [], fbzr1Arr: [], fbzr2Arr: [], jsids: "", wqdRenshu: 0, linkok: 0 }) PetiteVue.createApp({ store }).mount(); function getById(id) { return document.getElementById(id) } const topic = "GssyXXX" + new Date().getTime(); const connectUrl = "ws://broker-cn.emqx.io:8083/mqtt"; getById("tisi").innerText = "正在连接MQTT服务器,请等待..." const client = mqtt.connect(connectUrl, { clean: false, connectTimeout: 4000, reconnectPeriod: 1000, keepalive: 30, clientId: topic }) client.on('connect', () => { client.subscribe(topic, () => { getById("tisi").innerText = "" if (store.linkok == 0) { makeCode(); getdata(); store.linkok = 1; } }) }); client.on('reconnect', function (error) { getById("tisi").innerText = "正在重连MQTT服务器..." }) client.on('message', function (topic, message) { var tmpArr = message.toString().split('_'); var toTopic = tmpArr[0]; var jsid = tmpArr[1]; $("#jsid" + jsid).css("color", "blue"); store.jsids = store.jsids.replace(',' + jsid + ',', ','); store.wqdRenshu = store.jsids.split(',').length - 2; client.publish(toTopic, jsid.toString(), { qos: 1 }); }); client.on("close", function () { getById("tisi").innerText = "已断开连接" }); function makeCode() { var qrcode = new QRCode(getById("showewm"), { width: 300, height: 300 }); qrcode.makeCode("http://xxx.xxx.xxx/xxxxx?topic=" + topic); } function getdata() { $.get("/xxx/xxxxx", function (res) { store.bzrArr = res.bzr; store.fbzr1Arr = res.fbzr1; store.fbzr2Arr = res.fbzr2; store.jsids = res.jsids; store.wqdRenshu = res.jsids.split(',').length - 2; }, "json") } </script> </body> </html>
2、手机扫码后发送签到信息的代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>教师例会签到</title> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <script src="js/mqtt.min.4.1.0.js"></script> </head> <body> <div id="tisi" style="color:red;"></div> <script> var getUrl = location.search.substr(1); var tmpArr = getUrl.split("_"); var topic = tmpArr[0]; var jsId = tmpArr[1]; if (topic == "" || jsId == "") { getById("tisi").innerText = "扫码有误,请重新扫码签到!"; } else { var jsname = decodeURI(tmpArr[2]); var dyTopic = "GssyJslh"; var myclientId = "GssyXXX" + jsId; function getById(id) { return document.getElementById(id) } const connectUrl = "ws://broker-cn.emqx.io:8083/mqtt"; const client = mqtt.connect(connectUrl, { connectTimeout: 4000, reconnectPeriod: 1000, clientId: myclientId }) client.on('reconnect', function (error) { getById("tisi").innerText = myclientId + "重连MQTT服务器" + getUrl; }) client.on('connect', () => { getById("tisi").innerText = "MQTT服务器连接成功!" var toMsg = dyTopic + '_' + jsId; client.publish(topic, toMsg.toString(), { qos: 1 }); client.subscribe(dyTopic, () => { var toMsg = dyTopic + '_' + jsId; getById("tisi").innerText = "正在提交扫码签到信息‘" + toMsg + "’,请等待反馈..."; client.publish(topic, toMsg.toString(), { qos: 1 }); }) }) client.on('message', function (topic, message) {if (message == jsId){location.href = "qiandao_ok.html?" + jsname}}); client.on("close", function () {getById("tisi").innerText = "已断开连接"}); } </script> </body> </html>
相关推荐
**MQTT MQTTnet 实现详解** MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息协议,常用于物联网(IoT)设备之间的通信,它设计的目标是低带宽、高可靠性以及低功耗。MQTTnet是.NET平台上...
本文将深入探讨如何利用C++来实现MQTT协议,以及涉及的主要概念和技术。 首先,我们需要了解MQTT协议的基本原理。它基于TCP/IP协议栈,以小的消息格式传输数据,支持QoS(Quality of Service)等级0、1、2,确保...
mqtt-代理该项目旨在解决通过单个面向公众的主机/端口组合将单个客户端与特定代理匹配的问题。 用法: 节点 mqtt-proxy <[host:]port> <map> IE 节点 mqtt-proxy localhost:1883 map.json 地图格式: 编辑 map....
此外,理解源码还能帮助开发者更好地掌握Qt的事件驱动模型、异步编程思想以及如何利用信号和槽机制来实现组件间的通信。这不仅对Qt初学者,对有一定经验的开发者来说,也是提升技能和扩展知识的好机会。 总之,`qt...
当前的项目是采用MQTT协议实现,那么先来了解一下什么是MQTT协议。 软件采用Qt设计,QT版本是5.12.6 设备A的功能:获取摄像头的数据—》缩放成240*320—》编码成JPEG格式—》转码成base64—》组合成MQTT报文—》...
毕业设计:基于MQTT的物联网设备接入平台。使用Flink流处理框架
**MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信demo** MQTT (Message Queuing Telemetry Transport) 是一种轻量级的发布/订阅...开发者可以利用这些工具轻松地实现设备间的通信,从而构建高效、可靠和灵活的系统。
在本文中,我们将深入探讨如何使用C#编程语言和MQTTnet库快速实现MQTT通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅式消息协议,广泛应用于物联网(IoT)场景,因为它具有低开销、高...
MQTT协议知识点大全 MQTT是一种轻量级、开放、简单、规范的消息传输协议,主要用于机器与机器的通信(M2M)和物联网(IoT)环境。MQTT协议的设计思想是轻巧、开放、简单、规范,易于实现。 MQTT控制报文格式: * ...
【作品名称】:基于mqtt的遥控器,在app上点击按钮,将码(空调码,电视码,风扇码)发送到mqqt,mqtt通过WiFi发给esp8266 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计...
下面将详细介绍如何利用MQTT技术实现彩票相关的功能。 1. **基础概念** - **发布/订阅模型**:MQTT的核心是发布/订阅模型,其中客户端可以作为发布者发送消息,也可以作为订阅者接收消息。这种模型使得消息传递变...
在本文中,我们将深入探讨如何基于MQTT协议实现一个推送系统。 首先,理解MQTT协议的基本概念至关重要。MQTT采用发布/订阅模型,其中客户端可以作为发布者(Publisher)发送消息,也可以作为订阅者(Subscriber)...
图形用户界面:利用PyQT设计直观易用的操作界面,支持消息订阅/发布、主题管理等功能。 异步通信:通过协程实现非阻塞式的网络通讯和文件读写,确保GUI响应迅速且流畅。 MQTT协议支持:采用paho.mqtt库来连接至MQTT...
综上所述,"C#实现的mqtt_server服务器端"项目涵盖了从基础的MQTT协议理解到高级的服务器设计和部署等多个IT领域的知识点,对于希望深入学习C#和物联网技术的开发者来说,是一个宝贵的实践案例。
- **实现方式**:利用MQTT协议的多播机制。 ##### 7. **平台命令下发** - **功能说明**:平台可以向设备发送控制指令。 - **实现方式**:通过特定的topic向设备发送指令。 ##### 8. **QoS级别** - **功能说明*...
基于MQTT的推送服务端在Java中的实现是一个常见需求,尤其在实时数据传输和设备通信场景中。本教程将深入探讨如何在Java中构建一个MQTT服务器,结合提供的描述和标签,我们将主要关注以下几个知识点: 1. **MQTT...
在本文中,我们将深入探讨如何利用MQTT实现前后端的实时通信,并讨论如何设计高效且优雅的主题(topic)策略。 首先,让我们理解**前后端实时通信**的基本概念。在传统的Web开发中,前后端交互通常基于HTTP请求-...
【MQTT通信协议】 ...总结来说,MQTT协议在STM32等嵌入式系统中实现通信,需要对协议细节有深入理解,同时利用合适的工具进行调试和测试。通过这种方式,我们可以为物联网应用构建可靠的、高效的通信基础设施。
【作品名称】:基于Java MQTT实现的兼职管理系统【课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 基于...
HiveMQ MQTT客户端 MQTT 5.0和3.1.1兼容且功能丰富的高性能Java客户端库,具有不同的API风格和背压支持。 文档: : 社区论坛: : HiveMQ网站: ://www.hivemq.com/ 贡献准则: 执照: MQTT资源: 特征MQTT 3.1.1和...