Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备: https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1buHvw58&ft=t&id=22173428704

Javascript源码

//引用http模块创建web服务器,监听指定的端口获取以GET、POST、JSON等方式上传的数据,并回应驱动读卡器显示文字、蜂鸣响声、播报语音、开启继电器等操作。 
const http = require('http');
const url = require('url');
const querystring=require('querystring');const hostname = '192.168.1.211';       //本机IP
const port = 88;                        //监听端口let info="";            //接收到的数据包号,需回应该包号
let jihao="";           //设备自编机号
let cardtype="";        //刷卡标志,卡类型
let scantype="";        //扫码标志
let heartbeattype="";   //心跳包标志  
let card="";            //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
let data="";            //扇区内容 或 扫码信息  
let input="";           //输入标识
let output="";          //输出标识  
let rand="";            //设备随机数
let dn="";              //设备硬件序列号,出厂时已固化,全球唯一
let status="";          //读卡状态,如12表示卡密码认证失败  
let RepStr="";const server = http.createServer((request, response) => {console.log(request.method);console.log(request.url);console.log(request.httpVersion);console.log(request.headers);console.log(request.headers.host);if(request.method=="GET"){              //解析GET方式提交的数据let res = url.parse(request.url, true);info=res.query.info;jihao=res.query.jihao;cardtype=res.query.cardtype;scantype=res.query.scantype;heartbeattype=res.query.heartbeattype;card=res.query.card;data=res.query.data;input=res.query.input;output=res.query.output;rand=res.query.rand;dn=res.query.dn;status=res.query.status;if (info !="" && dn !=""){          //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应RepStr="Response=1";            //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声            RepStr = RepStr + "," + info;   //提交的信息序号,一定要对应RepStr = RepStr + ",Cardno:"+ card+"  welcome to use!";   //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号RepStr = RepStr + ",5";         //显示时长,单位为秒RepStr = RepStr + ",2";         //蜂鸣器发声种类,取值范围0-12RepStr = RepStr + ",";          //播报的TTS语音,中文语音要转换编码RepStr = RepStr + ",20";        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器RepStr = RepStr + ",30";        //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器response.end(RepStr);console.log(RepStr+"\n\n");} }else if(request.method=="POST"){let body = '';request.on('data', chunk => {body += chunk.toString();});request.on('end', () => {console.log(body);       let obj=querystring.parse(body);    //解析POST方式提交的数据info=obj.info;jihao=obj.jihao;cardtype=obj.cardtype;scantype=obj.scantype;heartbeattype=obj.heartbeattype;card=obj.card;data=obj.data;input=obj.input;output=obj.output;rand=obj.rand;dn=obj.dn;status=obj.status;if (info ==undefined ){var jsonParsed = JSON.parse(body);    //解析POST JSON方式提交的数据  //console.log(jsonParsed);info=jsonParsed.info;jihao=jsonParsed.jihao;cardtype=jsonParsed.cardtype;scantype=jsonParsed.scantype;heartbeattype=jsonParsed.heartbeattype;card=jsonParsed.card;data=jsonParsed.data;input=jsonParsed.input;output=jsonParsed.output;rand=jsonParsed.rand;dn=jsonParsed.dn;status=jsonParsed.status;}if (info !="" && dn !=""){          //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应RepStr="Response=1";            //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声            RepStr = RepStr + "," + info;   //提交的信息序号,一定要对应RepStr = RepStr + ",Cardno:"+ card+"  welcome to use!";   //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号RepStr = RepStr + ",5";         //显示时长,单位为秒RepStr = RepStr + ",2";         //蜂鸣器发声种类,取值范围0-12RepStr = RepStr + ",";          //播报的TTS语音,中文语音要转换编码RepStr = RepStr + ",20";        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器RepStr = RepStr + ",30";        //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器response.end(RepStr);console.log(RepStr+"\n\n");} });        }   
})server.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}/`);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文学习与撰写】论文里的Mathtype公式复制粘贴,跨文档复制后错码/错位问题的解决

1、描述 问题:论文的草稿已经写好,里面的公式之类的都已经一个个打上去了 但是把草稿里的正文和公式粘贴在另一个文档里的时候,会出些公式格式错误的情况 那该怎么操作保证复制后的公式保持原格式呢 选中复制的内容,在另一个文…

探索YOLO v11:3D人工智能的RGB-D视觉革命

哈喽,各位OAK中国的朋友们! 大家好我是张伯生 今天,我想给大家演示一下最新发布的Yolo V11神经网络 下面我将演示的一个程序是:同时在我们的OAK相机上跑Yolo V11和RGB-D,也就是彩色相机和深度图的一个叠加的一个效果 RGB-D和Yo…

芯知识 | NVH-FLASH语音芯片支持平台做语音—打造音频IC技术革新

随着科技的飞速发展,人们对于电子产品的音频性能要求越来越高。在这种背景下,NVH-FLASH系列语音芯片应运而生,作为音频IC领域的一次重大技术革新,NVH-FLASH系列语音芯片凭借其卓越的性能与灵活的支持平台,正逐步引领着…

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪

SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么?二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针前提: Agents 8.9.0 放入 项…

新手小白,如何研究货币相关性

研究货币对之间的相关性可以帮助交易者理解市场动态,从而优化交易策略。以下是一个详细的研究方向,包括每个步骤的代码,以及一些深入探索的建议。 研究方向 选择货币对:确定需要研究的两个货币对。 数据收集:获取选…

vbs给qq发送消息

qq可以enter发送消息 发表情qq快捷表情需要打开 1.vbs 新建文本文档,将代码粘贴,另存为a编码,后缀vbs str为发送内容,uin改为q号,点击vbs文件主动触发 str"/ws" Set WshshellWScript.CreateObject("…

掌握免费API:高效获取与智能调用技巧

在数字化时代,免费 API 的应用越来越广泛。它们为开发者提供了丰富的资源和工具,帮助实现多种功能和服务。从数据获取到功能扩展,免费 API 极大地推动了创新和效率的提升。 本文将深入探讨“免费 API 深度求索之路”,涵盖从获取 …

ONLYOFFICE文档8.2:开启无缝PDF协作

ONLYOFFICE 开源办公套件的最新版本新增约30个新功能,并修复了超过500处故障。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一套功能强大的文档编辑器,支持编辑处理文档、表格、幻灯片、可填写的表单和PDF。可多人在线协作,支持插件和 AI 集…

HTTP vs WebSocket

本文将对比介绍HTTP 和 WebSocket ! 相关文章: 1.HTTP 详解 2.WebSocket 详解 一、HTTP:请求/响应的主流协议 HTTP(超文本传输协议)是用于发送和接收网页数据的标准协议。它最早于1991年由Tim Berners-Lee提出来&…

HTML 标签简写及全称

HTML 标签简写及全称 HTML(HyperText Markup Language)是构建网页的标准标记语言。它由一系列标签组成,这些标签通常成对出现,如 <html> 和 </html>,用于定义网页的结构和内容。HTML标签可以包含简写形式,这些简写形式在功能上与全称标签等价,但书写更为简…

建模与辨识【1-3章】

&#xff08;第一章&#xff09;&#xff1a; 建立数学模型的方法&#xff1a; 系统模型的分类&#xff1a;按照不同标准分类有所不同&#xff1a; 误差准则&#xff1a; &#xff08;第二章&#xff09;&#xff1a; 最优输入信号的判断标准: Fisher信息矩阵逆 M序列必考&am…

Redis 性能优化选择:Pika 的配置与使用详解

引言 在我们日常开发中 redis是我们开发业务场景中不可缺少的部分。Redis 凭借其内存存储和快速响应的特点&#xff0c;广泛应用于缓存、消息队列等各种业务场景。然而&#xff0c;随着数据量的不断增长&#xff0c;单节点的 Redis 因为内存限制和并发能力的局限&#xff0c;逐…

数据库->库的操作

目录 一、查看数据库 1.显示所有的数据库 二、创建数据库 1.创建数据库 2.查看警告信息 3.创建一个名为database的数据库 三、字符集编码和校验(排序)规则 1.查看数据库⽀持的字符集编码 2.查看数据库⽀持的排序规则 3.一条完整创建库的语句 4. 不同的字串集与排序规…

大数据新视界 --大数据大厂之 Apache Beam:统一批流处理的大数据新贵

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

​1553B总线的前景和应用

​1553B总线的前景和应用 随着科技的飞速发展&#xff0c;1553B总线作为一种高度可靠、广泛应用于航空航天领域的总线标准&#xff0c;其前景愈发广阔。它不仅在现役的军用飞机、卫星通信系统中扮演着核心角色&#xff0c;还逐渐渗透到民用高端制造业&#xff0c;如无人机、高…

5.4章节python中集合创建、删除、增删改

1.集合的创建和删除 2.集合的操作符 3.集合的操作方法和遍历 4.列表、元组、字典、集合的区别 一、集合的创建和删除 集合&#xff08;set&#xff09;是一种内置的数据结构&#xff0c;用于存储唯一且无序的元素。集合是一个可变的数据类型&#xff0c;这意味着你可以添加、删…

CMake变量:CMAKE_FIND_LIBRARY_SUFFIXES

CMAKE_FIND_LIBRARY_SUFFIXES是CMake中的一个变量&#xff0c;用于指定在查找库文件时使用的后缀列表。当CMake需要找到库文件时&#xff0c;它会尝试在这些后缀后添加库名来构建库文件的完整路径。例如&#xff0c;如果库名为mylib&#xff0c;并且CMAKE_FIND_LIBRARY_SUFFIXE…

【命令操作】Linux上通过mdadm配置软RAID _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】Linux上通过mdadm配置软RAID | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在Linux系统上使用mdadm工具配置软件RAID&#xff08;Redundant Array of Independent Disks&#xff0c;独立磁盘冗余阵列…

2012年国赛高教杯数学建模D题机器人避障问题解题全过程文档及程序

2012年国赛高教杯数学建模 D题 机器人避障问题 图1是一个800800的平面场景图&#xff0c;在原点O(0, 0)点处有一个机器人&#xff0c;它只能在该平面场景范围内活动。图中有12个不同形状的区域是机器人不能与之发生碰撞的障碍物&#xff0c;障碍物的数学描述如下表&#xff1a…

HTTPS证书生成、验签-、证书链

HTTPS证书申请原理 1、制作CSR文件 所谓CSR就是由申请人制作的Certificate Secure Request证书请求文件。制作过程中&#xff0c;系统会产生2个密钥&#xff0c;一个是公钥就是这个CSR文件&#xff0c;另外一个是私钥&#xff0c;存放在服务器上。要制作CSR文件&#xff0c;申…