RC522使用NodeMCU向电脑发送卡号

   日期:2021-02-26     浏览:161    评论:0    
核心提示:RC522使用NodeMCU向电脑发送卡号NodeMCU和RC522接线图项目背景:需要使用一台主机接6-8个RC522读卡器模块,鉴于技术太菜,而且串口通讯偶尔会出现丢包现象,没有选用常用的Arduino Uno+RC522,而是使用Esp8266来进行网络通讯。读卡后直接向电脑发送UDP消息。按图接好线之后,默认已经安装好NodeMCU和RC522的库了。这是普通的读取IC卡卡号的代码,这份代码只能读取卡号然后将卡号打印至串口。#include <SPI.h>#include

RC522使用NodeMCU向电脑发送卡号

NodeMCU和RC522接线图

项目背景:需要使用一台主机接6-8个RC522读卡器模块,鉴于技术太菜,而且串口通讯偶尔会出现丢包现象,没有选用常用的Arduino Uno+RC522,而是使用Esp8266来进行网络通讯。读卡后直接向电脑发送UDP消息。

按图接好线之后,默认已经安装好NodeMCU和RC522的库了。
这是普通的读取IC卡卡号的代码,这份代码只能读取卡号然后将卡号打印至串口。

#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 5 // 配置针脚
#define SS_PIN 4
MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;
void setup() { 
  Serial.begin(9600); // 设置串口波特率为9600
  SPI.begin();        // SPI开始
  mfrc522.PCD_Init(); // Init MFRC522 card
  Serial.println("test-demo-start");
}


void loop() { 
  // 寻找新卡
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    //Serial.println("没有找到卡");
    return;
  }

  // 选择一张卡
  if ( ! mfrc522.PICC_ReadCardSerial()) { 
    Serial.println("没有卡可选");
    return;
  }


  // 显示卡片的详细信息
  Serial.print(F("卡片 UID:"));
  dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
  Serial.println();
 
  // 检查兼容性
  if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI
          &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K
          &&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) { 
    Serial.println(F("仅仅适合Mifare Classic卡的读写"));
    return;
  }

  MFRC522::StatusCode status;
  if (status != MFRC522::STATUS_OK) { 
    Serial.print(F("身份验证失败?或者是卡链接失败"));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  //停止 PICC
  mfrc522.PICC_HaltA();
  //停止加密PCD
  mfrc522.PCD_StopCrypto1();
  return;
}


void printHex(byte *buffer, byte bufferSize) { 
  for (byte i = 0; i < bufferSize; i++) { 
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

关键在于,Serial.print(buffer[i], HEX);这行代码只能在串口监视器上看到,无法获取并使用udp发送。
下面是完整代码

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

#define STASSID "你的wifi账号"
#define STAPSK "你的wifi密码"

//目标IP
IPAddress targetIP(192, 168, 1, 101);//目标IP
unsigned int targetPort = 20000;      // 本机端口号和目标的端口号

//Rc522配置
#define RST_PIN 5 // 配置针脚
#define SS_PIN 4
MFRC522 mfrc522(SS_PIN, RST_PIN);   // 创建新的RFID实例
MFRC522::MIFARE_Key key;
String  Card_UID;

WiFiUDP Udp;

void setup() { 
  Serial.begin(9600); // 设置串口波特率为9600
  //初始化读卡器
  SPI.begin();        // SPI开始
  mfrc522.PCD_Init(); // Init MFRC522 card
  Serial.println("test-demo-start");

  //连接Wifi
  WiFi.mode(WIFI_STA);
  WiFi.begin(STASSID, STAPSK);
  while (WiFi.status() != WL_CONNECTED) { 
    Serial.print('.');
    delay(500);
  }
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());
  Serial.printf("UDP server on port %d\n", targetPort);
  Udp.begin(targetPort);
}


void loop() { 
  // 寻找新卡
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    // Serial.println("没有找到卡");
    return;
  }

  // 选择一张卡
  if ( ! mfrc522.PICC_ReadCardSerial()) { 
    Serial.println("没有卡可选");
    return;
  }

  // 发送卡ID至目标设备
  Udp.beginPacket(targetIP, targetPort);
  Card_UID = dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
  Udp.write(Card_UID.c_str());//String格式转换为char*
  Udp.endPacket();

  // 检查兼容性
  if (    piccType != MFRC522::PICC_TYPE_MIFARE_MINI
          &&  piccType != MFRC522::PICC_TYPE_MIFARE_1K
          &&  piccType != MFRC522::PICC_TYPE_MIFARE_4K) { 
    Serial.println(F("仅仅适合Mifare Classic卡的读写"));
    return;
  }

  MFRC522::StatusCode status;
  if (status != MFRC522::STATUS_OK) { 
    Serial.print(F("身份验证失败?或者是卡链接失败"));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  //停止 PICC
  mfrc522.PICC_HaltA();
  //停止加密PCD
  mfrc522.PCD_StopCrypto1();
  return;
}


String dump_byte_array(byte *buffer, byte bufferSize) { 
  String id;//十进制ID
  for (byte i = 0; i < bufferSize; i++) { 
    id += (buffer[i] / 10);
    id += (buffer[i] % 10);
    //itoa(buffer[i],hexID,16);可以转成十六进制
  }
  Serial.println(p);
  return id;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服