RFIDの特定の領域を読み取る
RFIDタグの特定の領域は自由な値を読み書きできるので、これを読み取って特定の文言が入っていれば開錠するという、鍵として利用できるRFIDタグの判別に利用した。
最初はRFIDのUIDを利用して開錠していたのだが、UIDの複製をするには特殊なRFIDタグが必要で、コストは2000円以上するものだったので、断念した。
もともと、防犯目的ではないので、いくらでも複製可能なことのほうがメリットある。
もし、鍵を盗難されて問題が発生したのなら、内部の判定文言を変えて、鍵も書き換えればよいだけのこと。
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); // 認証用 // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; byte block; MFRC522::StatusCode status; byte len; // Check is the PICC of Classic MIFARE type if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) { //Serial.println(F("Your tag is not of type MIFARE Classic.")); return; } block = 1; //Serial.println(F("Authenticating using key A...")); status = rfid.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(rfid.uid)); if (status != MFRC522::STATUS_OK) { //Serial.print(F("PCD_Authenticate() failed: ")); //Serial.println(rfid.GetStatusCodeName(status)); return; } // else Serial.println(F("PCD_Authenticate() success: ")); // RFIDの1blockを読み取るために大きい配列を定義。16+2 byte buffer_read[18]; char buffer_char[18]; status = rfid.MIFARE_Read(block, buffer_read, &len); if (status != MFRC522::STATUS_OK) { //Serial.print(F("Reading failed: ")); //Serial.println(rfid.GetStatusCodeName(status)); return; } // byte型をchar型に変換してStringインスタンス作成 strcpy((char *)buffer_char,buffer_read); String get_string = String(buffer_char); |