A29. MFRC522: RFID

專案說明

偵測 RFID,若有偵測 RFID 到則印出 ID

此為 LinkIt 7697 BlocklyDuino v3 新功能, 預計於七月初發佈

電路圖

  • LinkIt 7697
  • MFRC522 RFID 模組
  • RFID 卡片或鈕扣
  • 麵包板
  • 杜邦線


(圖片由 Fritzing 產生, LinkIt 7697 fritzing 下載)

透過 SPI 介面來連接此 RFID 模組

  • 3V3 : 3V3 電源供應
  • GND : 接 GND
  • MISO : 接到 P12,為 LinkIt 7697 的 SPI-MISO 腳位
  • MOSI : 接到 P11,為 LinkIt 7697 的 SPI-MOSI 腳位
  • SCK : 接到 P13,為 LinkIt 7697 的 SPI-SCK 腳位
  • SDA 或 SS: 接到 P10,此根腳位用來做 Chip Select

可以參考 LinkIt 7697 pin-out diagram 了解更多腳位資訊



積木畫布



此積木回傳的參數為 "字串物件",可以用來和字串做比對是否為已知的卡片 ID
請注意若要使用比較的積木,需將"字串物件"放於前面,"字串"放於後面,不然會編議失敗


 


產生的 Arduino 程式如下

#include <SPI.h>
#include <MFRC522.h>

String read_id;
MFRC522 rfid(/*SS_PIN*/ 10, /*RST_PIN*/ 9);

String mfrc522_readID()
{
  String ret;
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial())
  {
    MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

    for (byte i = 0; i < rfid.uid.size; i++) {
      ret += (rfid.uid.uidByte[i] < 0x10 ? "0" : "");
      ret += String(rfid.uid.uidByte[i], HEX);
    }
  }

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
  return ret;
}

void setup()
{
  SPI.begin();
  rfid.PCD_Init();
  Serial.begin(9600);
}

void loop()
{
  read_id = mfrc522_readID();
  if (read_id != "") {
    Serial.print("偵測到 RFID: ");
    Serial.println(read_id);
  }
  delay(1000);
}


若有針刺到 RFID 卡片或鈕扣,會在序列埠監控視窗印出 ID