Update src/arduino/card_scanner.ino

main
Eyuep Sueyruege 2023-11-21 16:13:43 +01:00
parent 4bd1daed40
commit 07eaebe774
1 changed files with 129 additions and 36 deletions

View File

@ -1,53 +1,146 @@
// imports
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 22
#define SS_PIN 21
// Pin Definition
#define SS_PIN 10
#define RST_PIN 9
String lastCardName = "";
// Instatiate Motor and RFID Module
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
MFRC522 rfid(SS_PIN, RST_PIN);
// Define an array of UUIDs
const char* uuids[] = {
"1391d43",
"3263784d",
"b1fcbd6",
"a24aee4b",
"b1a37b9",
"a21d9c4d",
"b1e8316",
"929b444d",
"f12a5c9",
"717f5347",
"c1b6af9"
};
byte nuidPICC[4];
// Corresponding names for each UUID
const char* names[] = {
"Card1",
"Card2",
"Card3",
"Card4",
"Card5",
"Card6",
"Card7",
"Card8",
"Card9",
"Card10",
"Card11"
};
unsigned long lastReadTime = 0;
unsigned long readInterval = 1000; // Interval between card reading operations in milliseconds
WiFiMulti wifiMulti;
// Setup for first time
void setup() {
// Serial Begin
Serial.begin(9600);
// Init SPI bus
SPI.begin();
// Init MFRC522
rfid.PCD_Init();
Serial.begin(115200);
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
Serial.println();
Serial.println("Waiting for connection to Wi-Fi...");
wifiMulti.addAP("SSID", "Password"); // Add your WLAN SSID and password
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to Wi-Fi...");
}
Serial.println("Connected to Wi-Fi!");
}
// iteration
void loop() {
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if (!rfid.PICC_IsNewCardPresent()){
return;
}
// Verify if the NUID has been read
if (!rfid.PICC_ReadCardSerial()){
return;
}
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
// Check if it's time to read a card
if (millis() - lastReadTime > readInterval) {
if (readCard()) {
sendHttpRequest(lastCardName);
}
String id = "ID: "+String(nuidPICC[0])+" : "+String(nuidPICC[1])+" : "+String(nuidPICC[2])+" : "+String(nuidPICC[3]);
Serial.println(id);
delay(1000);
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
lastReadTime = millis();
}
}
bool readCard() {
// Look for new cards
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
return false;
}
// Print UID
Serial.print("Card read. UID: ");
String uidString = "";
for (byte i = 0; i < mfrc522.uid.size; ++i) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
uidString += String(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
// Search for the UID in the array and get the corresponding name
const char* cardName = getCardName(uidString.c_str());
lastCardName = cardName;
Serial.print("Card name: ");
Serial.println(cardName);
return true;
}
const char* getCardName(const char* uid) {
for (int i = 0; i < sizeof(uuids) / sizeof(uuids[0]); i++) {
if (strcmp(uid, uuids[i]) == 0) {
return names[i];
}
}
return "Unknown Card";
}
void sendHttpRequest(String card) {
HTTPClient http;
Serial.println("[HTTP] begin...");
// Create the URL with the name as a query parameter
String serverUrl = "http://IP_Address:3000/result/";
String uidString = "";
for (byte i = 0; i < mfrc522.uid.size; ++i) {
uidString += String(mfrc522.uid.uidByte[i], HEX);
}
const char* cardName = getCardName(uidString.c_str());
serverUrl += cardName;
http.begin(serverUrl);
Serial.println("[HTTP] GET...");
int httpCode = http.GET();
if (httpCode > 0) {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}