当前位置: 首页 > news >正文

使用rust读取usb设备ACR122U的nfc卡片id

rust及其高效和安全著称,而且支持跨平台,所以就想使用这个rust开发一个桌面端程序,来读取nfc设备的nfc卡片的id信息,下面就做一个最简单的入门教程吧,也是我写的第三个rust应用。

当你电脑上安装好了rust环境之后,先创建一个简单的项目,然后安装依赖,然后写一个简单的代码,然后执行即可。

创建项目

使用rust的包管理创建一个项目:cargo new hello-word

创建之后的目录结构如下

.git:这是一个隐藏文件夹,用于git软件实现版本管理,学习rust期间一般用不着,不用管
src:这是存放代码的地方,以后我们写的rust代码就放在这个文件夹里面
.gitignore:这同样是git使用的,用于忽略哪些类型文件,不进行版本管理,一般同样不用管
注意:git并不是rust的一部分,而是一个所有语言通用的版本控制工具,比如知名的github,便是用的git进行版本管理

Cargo.toml :这个文件就很重要了,cargo作为rust的包管理程序,就是通过这个文件知道你这个项目中需要哪些依赖库的。

使用vs code 打开这个项目,然后看一下内容:

对于你想要用到的库,直接写在[dependencies]项的下面即可,后面我会再对其进行详细介绍

然后来到src这个存放rust代码的目录里面:

安装依赖并写代码

[dependencies]
pcsc = "2.8.1"

然后运行命令:  cargo build

将main.rs代码改为下面的代码:

use pcsc::*;fn main() -> Result<(), Error> {// 创建一个新的上下文let ctx = Context::establish(Scope::User)?;// 列出可用的读卡器let mut readers_buf = [0; 2048];let mut readers = ctx.list_readers(&mut readers_buf)?;// 打开第一个读卡器let reader = readers.next().ok_or(Error::NoReadersAvailable)?;println!("Card reader:");let card = ctx.connect(reader, ShareMode::Shared, Protocols::ANY)?;// 发送 APDU 命令,获取卡片 UIDlet apdu_command = [0xFF, 0xCA, 0x00, 0x00, 0x00];let mut apdu_response = [0; 256];let response_len = card.transmit(&apdu_command.to_vec(), &mut apdu_response)?;// 提取卡片 UID// let card_uid = &apdu_response[..response_len - 2];// 输出卡片 UIDprintln!("Card UID: {:02X?}", response_len);Ok(())
}

此时,将ACR122U连上电脑,并放上nfc卡:

运行并编译

然后运行命令:cargo run

就可以看到UID已经打印出来了

然后运行编译命令:cargo build --release

就会编译为可执行文件:

然后运行这个exe也可以读取到卡片信息:

进阶:循环监听

使用循环和异常捕获,实现实时监听功能,代码如下:

use pcsc::*;fn main() {println!("Starting...");loop {// thread::sleep(Duration::from_secs(1));// println!("Done!");match divide() {Ok(_) => (),Err(_) => (),}}
}fn divide() -> Result<(), Error> {// 创建一个新的上下文let ctx = Context::establish(Scope::User)?;// 列出可用的读卡器let mut readers_buf = [0; 2048];let mut readers = ctx.list_readers(&mut readers_buf)?;// 打开第一个读卡器let reader = readers.next().ok_or(Error::NoReadersAvailable)?;// println!("Card reader:");let card = ctx.connect(reader, ShareMode::Shared, Protocols::ANY)?;// 发送 APDU 命令,获取卡片 UIDlet apdu_command = [0xFF, 0xCA, 0x00, 0x00, 0x00];let mut apdu_response = [0; 256];let response_len = card.transmit(&apdu_command.to_vec(), &mut apdu_response)?;// 提取卡片 UID// let card_uid = &apdu_response[..response_len - 2];// 输出卡片 UIDprintln!("Card UID: {:02X?}", response_len);Ok(())
}

 

相关文章:

使用rust读取usb设备ACR122U的nfc卡片id

rust及其高效和安全著称&#xff0c;而且支持跨平台&#xff0c;所以就想使用这个rust开发一个桌面端程序&#xff0c;来读取nfc设备的nfc卡片的id信息&#xff0c;下面就做一个最简单的入门教程吧&#xff0c;也是我写的第三个rust应用。 当你电脑上安装好了rust环境之后&…...

servlet总结

目录 1.生命周期 2.线程总结 3.配置 4.请求和响应 5.会话管理 6.过滤和监听器 7.处理表单数据 8.与JSP集成 9.异常处理 10.安全性和认证 Servlet是一种基于Java的Web组件&#xff0c;用于处理客户端请求并生成动态Web内容。以下是关于Servlet的一些总结 1.生命周期 …...

Nacos2.1.2改造适配达梦数据库7.0

出于业务需求&#xff0c;现将Nacos改造适配达梦数据库7.0&#xff0c;记录本次改造过程。 文章目录 一、前期准备二、适配流程1、项目初始化2、引入驱动3、源码修改 三、启动测试四、打包测试 一、前期准备 Nacos源码&#xff0c;版本&#xff1a;2.1.2&#xff1a;源码下载…...

TPRI-DMP平台介绍

TPRI-DMP平台介绍 1 TPRI-DMP平台概述 TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台&#xff0c;已经过13年的发展和迭代&#xff0c;其具备大规模能源电力行业生产应用软件开发和运行能力。提供TPRI-DMP平台主数据管理、业务系统开发与运行、应用资源管理…...

oracle-存储结构

文件包括 控制文件.ctl、数据文件.dbf、日志文件.log这三类放在存储上。 参数文件&#xff1a;空间的划分&#xff0c;进程的选用&#xff08;.ora&#xff09; oracle启动的时候需要读一下&#xff0c;数据库启动后&#xff0c;参数文件并不关闭&#xff0c;但即使文件丢了&a…...

获取PG库 database与 user 创建时间以及cluster初始化时间

代码实现 echo "获取数据库创建时间" data_dir$(psql -U postgres -d postgres -X -qAt -c "show data_directory" ) db_dirs$(ls $data_dir/base |grep -v pgsql_tmp) for db_oid in $db_dirs dodb_exists$(psql -U postgres -d postgres -X -qAt -c &qu…...

【12.29】转行小白历险记-刷算法05

242.有效的字母异位词 数组、set、map&#xff0c;数组是比较高效查找的 函数功能 判断字符串 s 和 t 是否互为字母异位词。如果它们包含相同的字符且每个字符出现的次数也相同&#xff0c;那么它们互为字母异位词。 代码逻辑 长度检查&#xff1a; if (s.length ! t.lengt…...

docker部署kafka zookeeper模式集群

单机模式链接&#xff1a;https://blog.csdn.net/wsdhla/article/details/133032238 kraft集群模式链接&#xff1a;部署Kafka_kafka 部署-CSDN博客 zookeeper选举机制举例&#xff1a; 目前有5台服务器&#xff0c;每台服务器均没有数据&#xff0c;它们的编号分别是1,2,3,4,5…...

Apache Flink连载(二十一):Flink On Yarn运行原理-Yarn Application模式

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 任务提交命令...

《深入理解C++11:C++11新特性解析与应用》笔记五

第五章 提高类型安全 5.1 强类型枚举 5.1.1 枚举&#xff1a;分门别类与数值的名字 具名枚举类型一般声明类似&#xff1a;enum Gender { Male, Female }。 匿名枚举类型可以使用三种方式实现&#xff1a; 第一种方式时宏&#xff0c;比如 #define Male 0 #define Femal…...

Y9000P + ubuntu22.04 配置Anaconda+pycharm +pytorch

Anaconda3 的安装及使用方法安装 Anaconda3 Anaconda3 是 Anaconda 的具体版本 Anaconda3 中的 Python 解释器默认使用的是 Python3.x 版本&#xff0c;而不是 Python2.x 版本 Python2.x 版本中&#xff0c;字符串是以 ASCII 编码处理的&#xff0c;而在 Python3.x 版本中&am…...

使用Ubuntu编译FFmpeg生成Android动态库/静态库

环境 我这里使用windows里的wsl2的ubuntu&#xff0c;使用物理机或者vmware&#xff0c;vbox之类的安装的ubuntu理论上也可以. gcc编译使用的环境如下: Ndk使用17 FFmpeg使用4.0.2. clang编译使用的环境如下: Ndk使用21.4 FFmpeg使用6.1 FFmpeg下载地址:https://ffmpeg.org/…...

【AIGC-图片生成视频系列-2】八仙过海,各显神通:AI生成视频相关汇总剖析

最近「图片生成视频系列」层出不穷&#xff0c;我拜读并结合实践&#xff08;对&#xff0c;就是手撕代码&#xff0c;有开源就撕&#xff09;&#xff0c;并对以下几篇文章的相似点以及关键点稍微做个总结&#xff1a; 一. 生成视频中图像的一致性 在图像生成视频的这个过程…...

SpringBoot集成RabbitMq消息队列【附源码】

1. 项目背景 要啥项目背景&#xff0c;就是干&#xff01;&#xff01;&#xff01; SpringBoot版本&#xff1a;2.7.12 2. Rabbit MQ安装 这里讲解使用docker安装RabbitMQ&#xff0c;如果在windows下面安装RabbitMQ&#xff0c;参考下文 【笑小枫的按步照搬系列】Window…...

MySQL数据库的安装与环境配置

下载 下载MySQL8 安装 解压 配置MySQL环境变量 系统环境变量path D:\ProgramFiles\mysql-8.0.20-winx64\bin 1.点击属性 2.点击高级系统设置 3.点击环境变量 4.在系统变量中找到path 注意这里不是用户变量 5.新建后输入解压的地址 MySQL初始化和启动 以管理员身份运行cmd…...

【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已经在许多领域取得了显著的成果。尤其是在展馆设计领域&#xff0c;VR科技科普展厅平台已经实现了许多令人瞩目的新突破。 VR科技科普展厅平台是广州华锐互动专门为企业和机构提供虚拟展馆设计和制作的在线平台。通过这个平台&…...

XML Extension Supplement

LEGAL ISSUES, COMPANY POLICIES AND STANDARDS Web Services A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. URI和URL URI&#xff0c;全称是统一资源标识符&#xff08;Uniform Resource Ident…...

手拉手Springboot获取yml配置文件信息

环境介绍 技术栈 springboot3 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1.7 配置文件说明&#xff1a;启动配置文件优先级&#xff1a;properties高于yml 配置文件application.yml yml是 JSON 的超集&#xff0c;简洁而强大&#xf…...

行人重识别(ReID)基础知识入门

这里写目录标题 1、ReID技术概述1.1 基本原理1.2 实现流程1.3 重识别存在的技术挑战 2、训练数据格式介绍 1、ReID技术概述 1.1 基本原理 ReID&#xff0c;全称Re-identification&#xff0c;目的是利用各种智能算法在图像数据库中找到与要搜索的目标相似的对象。ReID是图像检…...

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…...

AI如何助力人力资源管理:从效率工具到战略伙伴的跃迁

去年某互联网大厂HR负责人跟我说&#xff0c;他们团队用AI筛选简历后&#xff0c;招聘周期从45天缩短到28天&#xff0c;但更让他意外的是——AI还帮他们发现了一个被忽视3年的优质候选人。这个案例折射出AI对人力资源管理的深层改变&#xff1a;不只是提速&#xff0c;更是让H…...

如何通过Superalgos教育模块快速掌握算法交易:新手入门完整指南

如何通过Superalgos教育模块快速掌握算法交易&#xff1a;新手入门完整指南 【免费下载链接】Superalgos Superalgos/Superalgos: 是一个开源的分布式社交网络分析和数据挖掘平台。适合对大数据分析、机器学习、区块链以及分布式系统有兴趣的开发者。 项目地址: https://gitc…...

IT运维监控/可观测性

?? 前言&#xff1a;为什么选择 OpenClaw 对接企业微信&#xff1f; 在2026年的企业数字化办公浪潮中&#xff0c;OpenClaw&#xff08;曾用名 Clawdbot、Moltbot&#xff09;已成长为国内领先的开源AI自动化代理工具。凭借其“自然语言驱动、插件化拓展、多平台无缝集成”的…...

使用 HashMap 优化嵌套循环:Java 对象数组转换

本文旨在提供使用 HashMap 优化 Java 嵌套循环的有效方法&#xff0c;特别是当循环涉及对象数组并进行相等检查时。通过将内部循环转换为 HashMap 查询可以显著降低时间复杂性&#xff0c;提高代码性能。本文将提供详细的步骤和示例代码&#xff0c;以帮助读者理解和应用此优化…...

某高校学生考微软MOS认证加学分

临近毕业季&#xff0c;到底是谁的学分还没有修够&#xff1f;微软MOS认证证书也可以加学分&#xff0c;每天学习两个小时&#xff0c;一周就可以完成考试&#xff0c;当天就出证书&#xff01;&#x1f4cc;关于难度选择版本难度&#xff1a;2016 < 2019 < 365&#xff…...

OpenClaw调试技巧:QwQ-32B任务失败的根本原因分析

OpenClaw调试技巧&#xff1a;QwQ-32B任务失败的根本原因分析 1. 问题背景与诊断框架 上周我在尝试用OpenClaw对接本地部署的QwQ-32B模型时&#xff0c;遇到了一个典型问题&#xff1a;简单的文件整理任务总是执行到一半就中断&#xff0c;控制台只显示"模型响应超时&qu…...

CHORD-X从零开始:C语言基础概念学习报告自动生成教程

CHORD-X从零开始&#xff1a;C语言基础概念学习报告自动生成教程 你是不是也遇到过这样的烦恼&#xff1f;作为编程老师&#xff0c;每次讲完C语言的指针、结构体这些难点&#xff0c;总想给学生一份清晰易懂的复习报告&#xff0c;但自己动手整理又太花时间。或者&#xff0c…...

Easy-Scraper:革新性HTML数据提取库的技术突破与实战应用

Easy-Scraper&#xff1a;革新性HTML数据提取库的技术突破与实战应用 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 在数据驱动决策的时代&#xff0c;网页数据采集已成为企业获取市场情报、科研机构…...

RTC成语音AI基础设施:AWS和ElevenLabs相继跟进,ZEGO已跑三年

2026 年 3 月&#xff0c;语音 AI 领域迎来一个值得关注的技术信号&#xff1a;AWS&#xff08;亚马逊云科技&#xff09;与 ElevenLabs 在同一个月内相继宣布支持 WebRTC 协议。这一时间上的高度吻合&#xff0c;折射出行业对实时语音交互底层架构的共同判断&#xff1a;传统 …...

使用AI大大提升了学习代码的效率

最近看到一个观点&#xff0c;说AI的发展导致代码越来越不值钱了&#xff0c;AI降低了我们学习的门槛&#xff0c;大大提升了学习效率。好像很多程序都可以一个人一天上架一款产品。或许有夸张成分&#xff0c;但像我们普通人都体验到了AI的方便&#xff0c;比如在项目开发的过…...