Arduino NFC车门开锁

Arduino NFC车门开锁,arduino,nfc,uniqueidentifier,serial-number,unlock,Arduino,Nfc,Uniqueidentifier,Serial Number,Unlock,我正在尝试使用一个带有NFC屏蔽的arduino板来解锁我的车门 董事会:Arduino UNO第3版 NFC盾:2.0b版由Seeed Studio制作 因此,当NFC标签出现时,一个信号将伺服旋转180度以解锁车门。目前的问题是,我希望只有一个NFC标签能够解锁/锁定门,而不仅仅是任何一个 目前,任何NFC标签都可以转动伺服 是否有人知道调用哪个函数只返回NFC标记的UID,然后可以将其与已知的NFC标记进行比较 #包括 #包括“PN532_SPI.h” #包括“PN532.h” #包括“

我正在尝试使用一个带有NFC屏蔽的arduino板来解锁我的车门

董事会:Arduino UNO第3版 NFC盾:2.0b版由Seeed Studio制作

因此,当NFC标签出现时,一个信号将伺服旋转180度以解锁车门。目前的问题是,我希望只有一个NFC标签能够解锁/锁定门,而不仅仅是任何一个

目前,任何NFC标签都可以转动伺服

是否有人知道调用哪个函数只返回NFC标记的UID,然后可以将其与已知的NFC标记进行比较

#包括
#包括“PN532_SPI.h”
#包括“PN532.h”
#包括“NfcAdapter.h”
字符串常量myUID=“1B B3 C6 EF”;//用NFC标签的UID替换此UID
int const greenLedPin=3;//绿色led用于正确的钥匙通知
int const redLedPin=4;//红色led用于错误的钥匙通知
PN532_SPI接口(SPI,10);//使用数字引脚10处的SPI CS端子为屏蔽创建SPI接口
NfcAdapter nfc=NfcAdapter(接口);//创建NFC适配器对象
作废设置(作废){
Serial.begin(115200);//开始串行通信
Serial.println(“NDEF阅读器”);
begin();//开始nfc通信
//使LED引脚输出
引脚模式(绿色引脚,输出);
引脚模式(红色引脚,输出);
//关闭LED
数字写入(绿色,低电平);
数字写入(红色引脚,低电平);
}
无效循环(无效){
Serial.println(“扫描…”);
if(nfc.tagPresent())//检查天线区域上是否存在nfc标记
{
NfcTag tag=nfc.read();//读取nfc标记
String scannedUID=tag.getUidString();//获取NFC标记的UID
if(myUID.compareTo(scannedud)==0)//将NFC标记的UID与正确标记的UID进行比较(当compareTo返回0时存在匹配项)
{
//使用了正确的NFC标签
Serial.println(“正确的密钥”);
//闪烁绿色LED并确保红色LED熄灭
数字写入(绿色,高);
数字写入(红色引脚,低电平);
延迟(500);
数字写入(绿色,低电平);
延迟(500);
数字写入(绿色,高);
延迟(500);
数字写入(绿色,低电平);
//将鼠标放在此处以触发解锁机构(例如电机、传感器)
}否则{
//使用了不正确的NFC标签
Serial.println(“不正确的密钥”);
//闪烁红色LED并确保绿色LED熄灭
数字写入(绿色,低电平);
数字写入(红色,高);
延迟(500);
数字写入(红色引脚,低电平);
延迟(500);
数字写入(红色,高);
延迟(500);
数字写入(红色引脚,低电平);
//不要解锁!使用了不正确的NFC标记。
//将代码放在此处以触发警报(如buzzard、扬声器)或执行其他操作
}
}
延迟(2000年);
}
此代码有效。

我相信您可以使用:

readPassiveTargetID(PN532_MIFARE_ISO14443A)

要获取id。

您指出,在检测到任何标签时,您当前正在解锁。因此,您必须已经在轮询标记。如果您使用的是原始seeedstudio库,则可以使用
inListPassiveTarget()
方法或(如前面所述)readPassiveTargetID()方法对任何被动目标执行轮询

虽然
inListPassiveTarget()
只返回一个布尔值,指示是否存在任何目标,但
readPassiveTargetID()
方法为您提供了一组配置参数,还允许您检索防冲突标识符(例如ISO 14443类型a的UID):

您可以使用如下方法:

uint8_t uid[16] = { 0 };
uint8_t uidLen = 0;

if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLen)) {
    // uid will now contain uidLen bytes of the anti-collision identifier
}
如果要轮询ISO 14443 A型以外的其他卡,可以使用以下定义,而不是
PN532\u MIFARE\u ISO14443A

// ISO 14443 Type B
#define PN532_BAUD_ISO14443B   (0x03)
// FeliCa 212 kbps
#define PN532_BAUD_FELICA212   (0x01)
// FeliCa 424 kbps
#define PN532_BAUD_FELICA424   (0x02)
// Jewel Tag (NFC Forum Type 1)
#define PN532_BAUD_JEWEL       (0x04)
最后,关于使用标签的UID进行访问控制,我通常会说:不要这样做!事实证明,在许多现有系统中,这是一个非常糟糕的想法。有关更多信息,请参见这些帖子:


我也在这样做,使用NFC库示例中的示例ReadTag,我的UID如下所示:

Serial.println("\nScan electronic key\n");
if (nfc.tagPresent())
{
    NfcTag tag = nfc.read();
    Serial.println(tag.getTagType());
    String idnumber = tag.getUidString();
    Serial.print("UID: ");Serial.println(idnumber);
例如,Mifare经典“药丸”标签上的30 5C 6F 80。经过一点分析后,它以格式化字符串11的形式从库中返回,因此我将其与

String valid = ("30 5C 6F 80") ;
这种比较有效:

 if (valid == idnumber) {
    Serial.println("Yes") ;
    // simulate door open by turning LED on
    digitalWrite(lockopen, HIGH);
    delay(lockopen_interval);
    digitalWrite(lockopen, LOW); 

    } else {
      Serial.println("No") ;
    }  

谢谢你提供的信息和警告。我知道NFC标签可以被克隆,但是没有人知道我的车可以通过这种方式解锁。这是一辆1992年的车;)我明天会试试代码。
String valid = ("30 5C 6F 80") ;
 if (valid == idnumber) {
    Serial.println("Yes") ;
    // simulate door open by turning LED on
    digitalWrite(lockopen, HIGH);
    delay(lockopen_interval);
    digitalWrite(lockopen, LOW); 

    } else {
      Serial.println("No") ;
    }