From 41d7972301d58d7ee4aac13d0f4c73ad1b02ae77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hatvani=20Tam=C3=A1s?= Date: Thu, 6 Feb 2025 15:12:50 +0100 Subject: [PATCH] added nfc module to wake pc --- IrSendRecv.ino | 100 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 99 insertions(+), 1 deletion(-) diff --git a/IrSendRecv.ino b/IrSendRecv.ino index 1641f15..3b5ab77 100644 --- a/IrSendRecv.ino +++ b/IrSendRecv.ino @@ -5,6 +5,12 @@ #include #include +#include +#include + +#include +#include + const char* ssid PROGMEM = "paradicsom"; const char* password PROGMEM = "19700318"; @@ -13,6 +19,8 @@ const char* githubFileURL PROGMEM = "https://raw.githubusercontent.com/htamas121 const String githubToken PROGMEM = "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"; String gitwebpage = ""; +const char* wakeUrl PROGMEM = "http://192.168.50.69:5000/wake"; + const char* ntpServer PROGMEM = "hu.pool.ntp.org"; const long gmtOffset_sec PROGMEM = 3600; const int daylightOffset PROGMEM = 3600; @@ -23,6 +31,9 @@ const unsigned long interval PROGMEM = 5 * 60; WebServer server(80); HTTPClient httpClient; +WiFiUDP UDP; +WakeOnLan WOL(UDP); + //#define DECODE_NEC // Includes Apple and Onkyo. To enable all protocols , just comment/disable this line. #define NEC_PROTOCOL 8 @@ -33,12 +44,39 @@ HTTPClient httpClient; #define DELAY_AFTER_SEND 1000 #define DELAY_AFTER_LOOP 5000 +#define SDA A4 +#define SCL A5 + +Adafruit_PN532 nfc(SDA, SCL); + +// Known NFC card UID (replace with your specific card UID) +const uint8_t knownUID[] PROGMEM = { 0x23, 0xD8, 0x4F, 0x15 }; // Replace with your card UID +const int uidLength PROGMEM = sizeof(knownUID) / sizeof(knownUID[0]); + void setup() { + Serial.flush(); + delay(2000); Serial.begin(115200); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); + //nfc + Serial.println("Initializing nfc board..."); + nfc.begin(); + uint32_t versionData = nfc.getFirmwareVersion(); + + if(!versionData){ + Serial.println("Did not find pn532 compatible board!"); + while(true){ + Serial.print("."); + } + } + + nfc.SAMConfig(); + Serial.println("NFC is initialized"); + + //wifi WiFi.begin(ssid, password); Serial.println("connecting to wifi"); @@ -98,6 +136,20 @@ void setup() { } void loop() { + //check every time if wifi is active + if(!WiFi.isConnected()) { + WiFi.disconnect(); + WiFi.begin(ssid, password); + + Serial.print("Reconnecting to wifi"); + while (WiFi.status() != WL_CONNECTED) { + delay(250); + Serial.print("."); + } + + Serial.println("\n\n"); + } + //calculates time to run webpage pull function time_t now = time(NULL); if(now - lastRunTime >= interval){ @@ -106,6 +158,46 @@ void loop() { printTime(); } + //nfc + uint8_t success; + uint8_t uid[7]; // Buffer to hold the UID + uint8_t uidLength; // Length of the UID + + // Look for an NFC card + Serial.println("Waiting for an NFC card..."); + success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); + + if (success) { + Serial.println("NFC Card detected!"); + Serial.print("UID Length: "); Serial.println(uidLength); + Serial.print("UID Value: "); + for (uint8_t i = 0; i < uidLength; i++) { + Serial.print(" 0x"); Serial.print(uid[i], HEX); + } + Serial.println(); + + // Check if the detected card matches the known UID + if (uidLength == sizeof(knownUID) && memcmp(uid, knownUID, uidLength) == 0) { + Serial.println("Known NFC card detected! Sending HTTP request..."); + + /*httpClient.begin(wakeUrl); + int httpResponseCode = httpClient.GET(); + if (httpResponseCode > 0) { + Serial.printf("HTTP Response Code: %d\n", httpResponseCode); + } else { + Serial.printf("Error sending HTTP request: %s\n", httpClient.errorToString(httpResponseCode).c_str()); + } + httpClient.end();*/ + + wakePc(); + } else { + Serial.println("Unknown NFC card."); + } + + delay(2000); // Debounce delay + } + //nfc end + server.handleClient(); // Handle incoming client requests } @@ -130,7 +222,7 @@ void pullWebpageData(){ if(httpResponse > 0){ gitwebpage = httpClient.getString(); Serial.println("File content: "); - Serial.println(gitwebpage); + //Serial.println(gitwebpage); Serial.println("Pulled web data"); }else{ Serial.printf("Error code: %d\n", httpResponse); @@ -153,4 +245,10 @@ void printTime(){ } else { Serial.println("Failed to obtain time"); } +} + +void wakePc(){ + Serial.println("waking pc"); + const char* MacAddress PROGMEM = "70:85:C2:94:14:33"; + WOL.sendMagicPacket(MacAddress); } \ No newline at end of file