IOT RFID NAME + DATE
IOT RFID NAME + DATE
APPSCRIPT
// penerima data dari nodeMCU
// coding untuk app script
// link spreadsheet : https://docs.google.com/spreadsheets/d/1F8UuZzgArNo2dvITgA_kLXijfPT8xmQllsTkTW92nMg/edit?gid=0#gid=0
// short link : 1F8UuZzgArNo2dvITgA_kLXijfPT8xmQllsTkTW92nMg
// link deploy : https://script.google.com/macros/s/AKfycbwmKBkrRPQm25v7al2t_62OCUOPu_xHs8dYjmJm6nL_Jo3nGly_AI1TTWamJGonI27S/exec
// format link untuk mengirim data : https://script.google.com/macros/s/AKfycbwmKBkrRPQm25v7al2t_62OCUOPu_xHs8dYjmJm6nL_Jo3nGly_AI1TTWamJGonI27S/exec?rfid=1ef12379
// sort deploy untuk coding C++ : AKfycbwmKBkrRPQm25v7al2t_62OCUOPu_xHs8dYjmJm6nL_Jo3nGly_AI1TTWamJGonI27S
function doGet(e) {
Logger.log(JSON.stringify(e));
var result = 'Ok';
if (e.parameter == 'undefined') {
result = 'No Parameters';
} else {
var sheet_id = '1F8UuZzgArNo2dvITgA_kLXijfPT8xmQllsTkTW92nMg'; // Spreadsheet ID
var sheet = SpreadsheetApp.openById(sheet_id).getActiveSheet();
var newRow = sheet.getLastRow() + 1;
var rowData = [];
var Curr_Date = new Date();
rowData[0] = Curr_Date; // Date in column A
var Curr_Time = Utilities.formatDate(Curr_Date, "Asia/Jakarta", 'HH:mm:ss');
rowData[1] = Curr_Time; // Time in column B
// Initialize all columns with empty values
rowData[2] = ''; // RFID UID
rowData[3] = ''; // NAMA (new column D)
for (var param in e.parameter) {
Logger.log('In for loop, param=' + param);
var value = stripQuotes(e.parameter[param]);
Logger.log(param + ':' + e.parameter[param]);
switch (param) {
case 'rfid':
rowData[2] = value; // RFID UID in column C
rowData[3] = getNameFromRFID(value); // Get name based on RFID
result = 'RFID UID Written on column C and Name on column D';
break;
default:
result = "unsupported parameter";
}
}
Logger.log(JSON.stringify(rowData));
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function getNameFromRFID(rfid) {
// Convert RFID to lowercase for case-insensitive comparison
var uid = rfid.toLowerCase();
// Mapping RFID UID to names
var rfidMap = {
'1ef12379': 'asun',
'30c37fc9': 'alesha',
'37fa7959': 'aeyza',
'3ab32279': 'ummi'
};
// Return the name if found, otherwise return 'Unknown'
return rfidMap[uid] || 'Unknown';
}
function stripQuotes(value) {
return value.replace(/^["']|['"]$/g, "");
}
C++
// RFID coding untuk nodeMCU
// mengirim data dari RFID ke spreadsheet
// RFID NODE MCU with bluetooth
//sda = d4
//sck = d5
//mosi = d7
//miso = d6
// gnd = gnd
// rst = d3
// 3,3v = 3,3v
// nodeMCU TX = RX HC05
// link spreadsheet : https://docs.google.com/spreadsheets/d/19_2b-ATX20ZIUaQ7M2HQT0PiJ5DF6ppLoaJqIOjBqrg/edit?gid=0#gid=0
// link deploy : https://script.google.com/macros/s/AKfycbzkaR8bit4nfZHuoBpG57UG-bxcKxyi2XzaO6S8OX4a6ccFWOJBzcwPtzJBpwjjpNiEqg/exec
// format link untuk mengirim data : https://script.google.com/macros/s/AKfycbzkaR8bit4nfZHuoBpG57UG-bxcKxyi2XzaO6S8OX4a6ccFWOJBzcwPtzJBpwjjpNiEqg/exec?rfid=5A2B3C4D
// sort deploy untuk coding C++ : AKfycbwmKBkrRPQm25v7al2t_62OCUOPu_xHs8dYjmJm6nL_Jo3nGly_AI1TTWamJGonI27S
#include <SPI.h>
#include <MFRC522.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
// Pin definitions for RFID RC522
#define RST_PIN D3
#define SS_PIN D4 // sda
// Pin definition for notification LED
#define NOTIFICATION_PIN D1 // GPIO 5
// Pin definition for standby LED
#define STANDBY_PIN D2 // GPIO 4
MFRC522 mfrc522(SS_PIN, RST_PIN);
// WiFi credentials
const char* ssid = "www.asun86.com"; // Your WiFi SSID
const char* password = ""; // Your WiFi password
// Google Apps Script details
const char* host = "script.google.com";
const int httpsPort = 443;
String GAS_ID = "AKfycbxdysRw_3O2c5JdixggrLULQCX1CpifEvHKi64MRBNoYBv1Oa0vLnM8OGk_6SizFxuq"; // Your Google Apps Script ID
WiFiClientSecure client;
// Variables for standby LED blinking
unsigned long previousMillis = 0;
const long standbyInterval = 500; // Interval for standby LED blinking (ms)
bool standbyLedState = LOW;
void setup() {
Serial.begin(9600);
delay(1000);
// Initialize SPI and RFID
SPI.begin();
mfrc522.PCD_Init();
// Initialize notification pin
pinMode(NOTIFICATION_PIN, OUTPUT);
digitalWrite(NOTIFICATION_PIN, LOW); // Ensure LED is off initially
// Initialize standby pin
pinMode(STANDBY_PIN, OUTPUT);
digitalWrite(STANDBY_PIN, LOW); // Ensure LED is off initially
Serial.println();
Serial.println("RFID Reader Initialized");
Serial.println("Scan a MIFARE 1K Tag to read UID...");
// Connect to WiFi
connectToWiFi();
client.setInsecure(); // Bypass SSL certificate verification
}
void loop() {
// Handle standby LED blinking
blinkStandbyLED();
// Check for a new card
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
// Stop standby LED blinking while processing
digitalWrite(STANDBY_PIN, LOW);
// Read and print UID of the Card
String uidString = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
if (mfrc522.uid.uidByte[i] < 0x10) {
uidString += "0";
}
uidString += String(mfrc522.uid.uidByte[i], HEX);
}
Serial.print("Card UID: ");
Serial.println(uidString);
// Send UID to Google Apps Script
sendRFIDData(uidString);
// Halt the card and stop crypto
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
delay(500); // Delay before next read standardnya 2000
}
void blinkStandbyLED() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= standbyInterval) {
previousMillis = currentMillis;
// Toggle the standby LED
standbyLedState = !standbyLedState;
digitalWrite(STANDBY_PIN, standbyLedState);
}
}
void connectToWiFi() {
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// Blink notification LED to indicate WiFi connection
for (int i = 0; i < 3; i++) {
digitalWrite(NOTIFICATION_PIN, HIGH);
delay(200);
digitalWrite(NOTIFICATION_PIN, LOW);
delay(200);
}
} else {
Serial.println("");
Serial.println("WiFi connection failed!");
// Blink both LEDs to indicate connection failure
for (int i = 0; i < 5; i++) {
digitalWrite(NOTIFICATION_PIN, HIGH);
digitalWrite(STANDBY_PIN, HIGH);
delay(200);
digitalWrite(NOTIFICATION_PIN, LOW);
digitalWrite(STANDBY_PIN, LOW);
delay(200);
}
}
}
void sendRFIDData(String uid) {
Serial.println("==========");
Serial.print("Connecting to ");
Serial.println(host);
// Turn on notification LED when starting to send data
digitalWrite(NOTIFICATION_PIN, HIGH);
if (!client.connect(host, httpsPort)) {
Serial.println("Connection failed");
digitalWrite(NOTIFICATION_PIN, LOW); // Turn off LED if connection fails
return;
}
// Create the URL with RFID UID parameter
String url = "/macros/s/" + GAS_ID + "/exec?rfid=" + uid;
Serial.print("Requesting URL: ");
Serial.println(url);
// Send HTTP GET request
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: ESP8266RFID\r\n" +
"Connection: close\r\n\r\n");
Serial.println("Request sent");
// Wait for response
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 1000) { // standard 5000
Serial.println(">>> Client Timeout !");
client.stop();
digitalWrite(NOTIFICATION_PIN, LOW); // Turn off LED on timeout
return;
}
}
// Read response
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("Closing connection");
Serial.println("==========");
// Blink LED to indicate successful data transmission
for (int i = 0; i < 5; i++) {
digitalWrite(NOTIFICATION_PIN, HIGH);
delay(100);
digitalWrite(NOTIFICATION_PIN, LOW);
delay(100);
}
}