Uploaded All Related Files For RFID Attendance Project
This commit is contained in:
parent
f58baa8998
commit
d4c7181cbe
BIN
3D Model/16X2 LCD Screen.ipt
Normal file
BIN
3D Model/16X2 LCD Screen.ipt
Normal file
Binary file not shown.
BIN
3D Model/Back Face.ipt
Normal file
BIN
3D Model/Back Face.ipt
Normal file
Binary file not shown.
BIN
3D Model/Box Face.ipt
Normal file
BIN
3D Model/Box Face.ipt
Normal file
Binary file not shown.
BIN
3D Model/MRFC552 Board.ipt
Normal file
BIN
3D Model/MRFC552 Board.ipt
Normal file
Binary file not shown.
BIN
3D Model/RFID Attendance System.iam
Normal file
BIN
3D Model/RFID Attendance System.iam
Normal file
Binary file not shown.
BIN
3D Model/the base.ipt
Normal file
BIN
3D Model/the base.ipt
Normal file
Binary file not shown.
BIN
Documents/Attendance Hardware.docx
Normal file
BIN
Documents/Attendance Hardware.docx
Normal file
Binary file not shown.
BIN
Documents/Operation flowchart.pdf
Normal file
BIN
Documents/Operation flowchart.pdf
Normal file
Binary file not shown.
BIN
Documents/Operation flowchart.vsdx
Normal file
BIN
Documents/Operation flowchart.vsdx
Normal file
Binary file not shown.
@ -0,0 +1,128 @@
|
|||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
// File System & ESP8266
|
||||||
|
#include <FS.h> //this needs to be first, or it all crashes and burns...
|
||||||
|
#define strtFS SPIFFS.begin()
|
||||||
|
#define wipeFS SPIFFS.format()
|
||||||
|
|
||||||
|
// Button
|
||||||
|
#include <Button.h> // Button Library
|
||||||
|
//#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
|
||||||
|
#include <WiFi.h>
|
||||||
|
|
||||||
|
// Needed For Library
|
||||||
|
#include <DNSServer.h>
|
||||||
|
//#include <ESP8266WebServer.h>
|
||||||
|
#include <WebServer.h>
|
||||||
|
#include <WiFiManager.h> //https://github.com/zhouhan0126/WIFIMANAGER-ESP32
|
||||||
|
#include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
|
// User Data To Be Displayed
|
||||||
|
String u_id = "";
|
||||||
|
String u_name = "";
|
||||||
|
String u_package = "";
|
||||||
|
String u_starttime = "";
|
||||||
|
String u_timing = "";
|
||||||
|
String u_remain = "";
|
||||||
|
String u_valid = "";
|
||||||
|
String u_sysmsg = "";
|
||||||
|
|
||||||
|
/* THIS SECTION IS FOR BASIC I/O */
|
||||||
|
//Button button(D3);
|
||||||
|
Button button(3);
|
||||||
|
|
||||||
|
/* WIFI MANAGER FUNCTION FLAG */
|
||||||
|
bool shouldSaveConfig = false;
|
||||||
|
String WiFi_SSID = "";
|
||||||
|
String WiFi_PASS = "";
|
||||||
|
|
||||||
|
/* DEVICE INFO */
|
||||||
|
const String devName = "TAKEONE WIFID ";// + String(ESP.getChipId());
|
||||||
|
String devID = ""; // Changable Via Web Interface
|
||||||
|
String devPASS = ""; // Changable Via Web Interface
|
||||||
|
const String devMac = String(WiFi.macAddress());
|
||||||
|
const String server = "http://192.168.1.3/index.php?card=";
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
#include <rBase64.h>
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
//#include <ESP8266HTTPClient.h>
|
||||||
|
#include <HTTPClient.h>
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <MFRC522.h>
|
||||||
|
|
||||||
|
//#define SS_PIN D8
|
||||||
|
//#define RST_PIN D0
|
||||||
|
#define SS_PIN 5
|
||||||
|
#define RST_PIN 4
|
||||||
|
|
||||||
|
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
#include <TimeTrigger.h>
|
||||||
|
|
||||||
|
// Recuring Time Events
|
||||||
|
TimeTrigger blink(3000);
|
||||||
|
TimeTrigger testWiFi(1000);
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
// Including I2C Library
|
||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
|
// Define I2C Pins
|
||||||
|
//#define SDA_PIN D2
|
||||||
|
//#define SCL_PIN D1
|
||||||
|
#define SDA_PIN 21
|
||||||
|
#define SCL_PIN 22
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
// Download From https://github.com/lucasmaziero/LiquidCrystal_I2C
|
||||||
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
//#define I2C_LCD 0x3F
|
||||||
|
#define I2C_LCD 0x27
|
||||||
|
|
||||||
|
// Set the LCD address to 0x27 for a 16 chars and 2 line display
|
||||||
|
LiquidCrystal_I2C lcd(I2C_LCD, 16, 2);
|
||||||
|
|
||||||
|
// Included Libraries ------------------------------------
|
||||||
|
|
||||||
|
#include <RtcDS3231.h>
|
||||||
|
#include <EepromAt24C32.h>
|
||||||
|
#define countof(a) (sizeof(a) / sizeof(a[0]))
|
||||||
|
|
||||||
|
RtcDS3231<TwoWire> Rtc(Wire);
|
||||||
|
EepromAt24c32<TwoWire> RtcEeprom(Wire);
|
||||||
|
|
||||||
|
const char data[] = "What time is it in Greenwich?";
|
||||||
|
const uint16_t stringAddr = 64; // stored on page boundary
|
||||||
|
|
||||||
|
//========================================================
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
// Calling Setup Routine
|
||||||
|
_setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
//========================================================
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// Calling Loop Routine
|
||||||
|
_loop();
|
||||||
|
|
||||||
|
// Listen To Commands
|
||||||
|
command_reader();
|
||||||
|
}
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
117
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/HTTP.ino
Normal file
117
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/HTTP.ino
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
//====================================================================
|
||||||
|
// HTTP REQUESTS FROM WEB
|
||||||
|
//====================================================================
|
||||||
|
// HTTP Request To Send Data To Server Via WiFi
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
String prepare_HTTPData(String url, String data)
|
||||||
|
{
|
||||||
|
// Just For Display
|
||||||
|
Serial.println();
|
||||||
|
Serial.println("Sending To AWS Server ------------------------");
|
||||||
|
Serial.println();
|
||||||
|
|
||||||
|
// Card Code
|
||||||
|
String card = data;
|
||||||
|
|
||||||
|
// fOR TESTING PURPOSES
|
||||||
|
//url = "http://rfid.takeone.tech/index.php";
|
||||||
|
|
||||||
|
// PLANNER AWS LINK
|
||||||
|
//url += "?json=";
|
||||||
|
|
||||||
|
// COMBINNING INTO JSON DATA MESSAGE
|
||||||
|
data = post_json(data);
|
||||||
|
|
||||||
|
// Conversion Result
|
||||||
|
String ENCODED = base64(data);
|
||||||
|
|
||||||
|
// Serial Print Message
|
||||||
|
Serial.println(" -> CARD : " + card);
|
||||||
|
// Printing Data
|
||||||
|
Serial.println(" -> JSON DATA : " + data);
|
||||||
|
|
||||||
|
// New URL
|
||||||
|
url += ENCODED;
|
||||||
|
|
||||||
|
// Shows Us How It Would Look
|
||||||
|
Serial.println(" -> SERVER Request : " + url);
|
||||||
|
|
||||||
|
// Returnning The Value
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// Send Http Request
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
String read_payload(String Request)
|
||||||
|
{
|
||||||
|
// HTTP Request
|
||||||
|
HTTPClient http;
|
||||||
|
|
||||||
|
// Empty PayLoad
|
||||||
|
String payload = "";
|
||||||
|
|
||||||
|
// HTTP Status Code
|
||||||
|
int httpCode = 0;
|
||||||
|
|
||||||
|
// Transmit Trials Count
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
// Counts
|
||||||
|
if(count < 3) {
|
||||||
|
count++;
|
||||||
|
Serial.println(" -> Trial #" + String(count));
|
||||||
|
//ESP.wdtFeed(); // Clearing Watch Dog Timer
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// configure traged server and url
|
||||||
|
http.begin(Request); //HTTP
|
||||||
|
Serial.print(" -> [HTTP] begin GET...\n");
|
||||||
|
|
||||||
|
// start connection and send HTTP header
|
||||||
|
httpCode = http.GET();
|
||||||
|
|
||||||
|
// httpCode will be negative on error
|
||||||
|
if(httpCode > 0) {
|
||||||
|
// HTTP header has been send and Server response header has been handled
|
||||||
|
Serial.printf(" -> [HTTP] GET... code: %d\n", httpCode);
|
||||||
|
// file found at server
|
||||||
|
if(httpCode == HTTP_CODE_OK) {
|
||||||
|
payload = http.getString();
|
||||||
|
Serial.println(" -> [HTTP] Response " + payload);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Serial.printf(" -X [HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
|
||||||
|
payload = "";
|
||||||
|
}
|
||||||
|
} while(httpCode != HTTP_CODE_OK);
|
||||||
|
|
||||||
|
// Ending The Http Request
|
||||||
|
http.end();
|
||||||
|
|
||||||
|
// Returnning Payload
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// BASE64 Data Encoding
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
String base64(String data)
|
||||||
|
{
|
||||||
|
// Conversion Object
|
||||||
|
rBase64generic<4000> mybase64;
|
||||||
|
|
||||||
|
// Encoding The Data
|
||||||
|
if (mybase64.encode(data) == RBASE64_STATUS_OK) {
|
||||||
|
return mybase64.result();
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
66
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/JSON.ino
Normal file
66
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/JSON.ino
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
//====================================================================
|
||||||
|
// JSON DATA REQUESTS
|
||||||
|
//====================================================================
|
||||||
|
// BUILDING JSON DATA FROM 3 ELEMTS : devID, devPASS, TADNUMBER
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
String post_json(String idCARD)
|
||||||
|
{
|
||||||
|
// Building The Buffer
|
||||||
|
DynamicJsonDocument data(2000);
|
||||||
|
|
||||||
|
// Inserting Data
|
||||||
|
data["request"] = "attendance";
|
||||||
|
data["divID"] = devID; // This is Predefined In The Seetings
|
||||||
|
data["divPASS"] = devPASS; // This Is Predefined In the Settings
|
||||||
|
data["divMAC"] = devMac; // This is from ESP8266 MacAddress Function
|
||||||
|
data["divDate"] = __DATE__; // This is from RTC Module
|
||||||
|
data["divTime"] = __TIME__; // This is from RTC Module
|
||||||
|
data["userRFID"] = idCARD; // This is from RFID Card Scanned By User
|
||||||
|
|
||||||
|
// Creating Output Memory
|
||||||
|
String output;
|
||||||
|
|
||||||
|
// Inserting Data To Output Variable
|
||||||
|
serializeJson(data, output);
|
||||||
|
|
||||||
|
// Clearing Data Memory
|
||||||
|
data.clear();
|
||||||
|
|
||||||
|
// Returnning Generated String
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// BUILDING JSON DATA FROM 3 ELEMTS : devID, devPASS, TADNUMBER
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool person_read(String json)
|
||||||
|
{
|
||||||
|
// Building The Buffer
|
||||||
|
DynamicJsonDocument data(3000); // building JSON Buffer
|
||||||
|
// Reading Data From JSON
|
||||||
|
DeserializationError error = deserializeJson(data, json);
|
||||||
|
|
||||||
|
// Make Sure Was Converted Correctly
|
||||||
|
if(error) {
|
||||||
|
Serial.println("Error Parsing JSON");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reading Data
|
||||||
|
u_id = data["response"].as<String>();
|
||||||
|
u_name = data["name"].as<String>();
|
||||||
|
u_package = data["package"].as<String>();
|
||||||
|
u_starttime = data["starttime"].as<String>();
|
||||||
|
u_timing = data["timing"].as<String>();
|
||||||
|
u_remain = data["remain"].as<String>();
|
||||||
|
u_valid = data["valid"].as<String>();
|
||||||
|
u_sysmsg = data["sysmsg"].as<String>();
|
||||||
|
|
||||||
|
// Clearing Buffer
|
||||||
|
data.clear();
|
||||||
|
|
||||||
|
// Successfull
|
||||||
|
return true;
|
||||||
|
}
|
||||||
100
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/LCD.ino
Normal file
100
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/LCD.ino
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
//====================================================================
|
||||||
|
// LCD Library Functions
|
||||||
|
//====================================================================
|
||||||
|
// LCD Initialize
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_begin()
|
||||||
|
{
|
||||||
|
// Begin Wire
|
||||||
|
Wire.begin(SDA_PIN, SCL_PIN);
|
||||||
|
// Begin LCD
|
||||||
|
lcd.begin(SDA_PIN, SCL_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Clear
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_clear()
|
||||||
|
{
|
||||||
|
lcd.clear();
|
||||||
|
lcd.home();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Testing Back Light
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool lcd_islight()
|
||||||
|
{
|
||||||
|
return lcd.getBacklight();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Light On
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_light_on()
|
||||||
|
{
|
||||||
|
lcd.backlight();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Light Off
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_light_off()
|
||||||
|
{
|
||||||
|
lcd.noBacklight();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Light Toggle
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_light_toggle()
|
||||||
|
{
|
||||||
|
if(lcd_islight())
|
||||||
|
{
|
||||||
|
lcd_light_off();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lcd_light_on();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Line 1
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_line1(String line1)
|
||||||
|
{
|
||||||
|
lcd.setCursor(0, 0);
|
||||||
|
lcd.print(line1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// LCD Line 2
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void lcd_line2(String line2)
|
||||||
|
{
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(line2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
String lcd_center(String text)
|
||||||
|
{
|
||||||
|
int space = (16 - text.length())/2;
|
||||||
|
String txt_space = "";
|
||||||
|
|
||||||
|
for(int i=0; i<space; i++) {
|
||||||
|
txt_space += " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
return txt_space + text;
|
||||||
|
}
|
||||||
53
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/LOOP.ino
Normal file
53
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/LOOP.ino
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/* ===================================================================================
|
||||||
|
* MAIN LOOP
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void _loop()
|
||||||
|
{
|
||||||
|
// Reading The RFID
|
||||||
|
String card = rfid_read();
|
||||||
|
|
||||||
|
// Checking Card Content
|
||||||
|
if(card != "")
|
||||||
|
{
|
||||||
|
// Reset The Timer
|
||||||
|
blink.Reset();
|
||||||
|
|
||||||
|
// Turn On The LED
|
||||||
|
lcd_light_on();
|
||||||
|
|
||||||
|
// Display
|
||||||
|
lcd_line1("CARD: " + card);
|
||||||
|
|
||||||
|
// Send to Server
|
||||||
|
String payload = read_payload(prepare_HTTPData(server, card));
|
||||||
|
|
||||||
|
// Reading The Payload
|
||||||
|
person_read(payload);
|
||||||
|
|
||||||
|
// Wait For LED To Turn OFF
|
||||||
|
while(!blink.Trigger())
|
||||||
|
{
|
||||||
|
// Clearing Watch Dog Timer
|
||||||
|
//ESP.wdtFeed();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Turn Off The Light
|
||||||
|
lcd_light_off();
|
||||||
|
|
||||||
|
// Clearing Display
|
||||||
|
lcd_clear();
|
||||||
|
|
||||||
|
// Clearing The Blink Counter
|
||||||
|
testWiFi.Reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clearing Watch Dog Timer
|
||||||
|
//ESP.wdtFeed();
|
||||||
|
|
||||||
|
// This Indicates That WiFi Is Alive
|
||||||
|
if(testWiFi.Trigger() && checkWiFi() == true)
|
||||||
|
{
|
||||||
|
digitalWrite(D4, !digitalRead(D4));
|
||||||
|
}
|
||||||
|
}
|
||||||
45
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/RFID.ino
Normal file
45
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/RFID.ino
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/* ===================================================================================
|
||||||
|
* RFID Reader Read
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void rfid_begin()
|
||||||
|
{
|
||||||
|
SPI.begin(); // Init SPI bus
|
||||||
|
rfid.PCD_Init(); // Init MFRC522
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================================================================
|
||||||
|
|
||||||
|
String rfid_read()
|
||||||
|
{
|
||||||
|
String card = "";
|
||||||
|
|
||||||
|
// Look for new cards
|
||||||
|
if ( ! rfid.PICC_IsNewCardPresent())
|
||||||
|
return "";
|
||||||
|
|
||||||
|
// Verify if the NUID has been readed
|
||||||
|
if ( ! rfid.PICC_ReadCardSerial())
|
||||||
|
return "";
|
||||||
|
|
||||||
|
// Store NUID into nuidPICC array
|
||||||
|
for (byte i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
card += String(rfid.uid.uidByte[i], HEX);
|
||||||
|
}
|
||||||
|
|
||||||
|
// REMOVE UNWANTED SPACES
|
||||||
|
card.trim();
|
||||||
|
|
||||||
|
// CHANGE TO CAPITAL LETTERS
|
||||||
|
card.toUpperCase();
|
||||||
|
|
||||||
|
// Halt PICC
|
||||||
|
rfid.PICC_HaltA();
|
||||||
|
|
||||||
|
// Stop encryption on PCD
|
||||||
|
rfid.PCD_StopCrypto1();
|
||||||
|
|
||||||
|
// Return Card Data
|
||||||
|
return card;
|
||||||
|
}
|
||||||
10
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/RTC.ino
Normal file
10
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/RTC.ino
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
void rtc_begin()
|
||||||
|
{
|
||||||
|
// Starting RTC
|
||||||
|
Rtc.Begin();
|
||||||
|
// TurnOn RTC EEPROM
|
||||||
|
RtcEeprom.Begin();
|
||||||
|
// Read Date Time
|
||||||
|
RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
|
||||||
|
}
|
||||||
43
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/SERIAL.ino
Normal file
43
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/SERIAL.ino
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//====================================================================
|
||||||
|
// SERIAL COMMANDS
|
||||||
|
//====================================================================
|
||||||
|
// LISTENS TO ALL COMMANDS
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void command_reader()
|
||||||
|
{
|
||||||
|
if(Serial.available())
|
||||||
|
{
|
||||||
|
// SERIAL STRING READER
|
||||||
|
String msg = Serial.readStringUntil('\n');
|
||||||
|
msg.trim();
|
||||||
|
|
||||||
|
// RESTART THE DEVICE
|
||||||
|
command_restart(msg);
|
||||||
|
|
||||||
|
// RECONFIG THE WIFI MANAGER
|
||||||
|
command_reconfig(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// RESTART THE DEVICE
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void command_restart(String input) {
|
||||||
|
if(input == "restart" || input == "RESTART") {
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// RECONFIG THE DEVICE
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
void command_reconfig(String input) {
|
||||||
|
if(input == "config" || input == "CONFIG") {
|
||||||
|
reconfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
32
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/SETUP.ino
Normal file
32
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/SETUP.ino
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* ===================================================================================
|
||||||
|
* VOID SETUP
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void _setup()
|
||||||
|
{
|
||||||
|
// Serial Monitor
|
||||||
|
Serial.begin(115200);
|
||||||
|
delay(10);
|
||||||
|
|
||||||
|
// TurnOn RTC Module
|
||||||
|
//SPIFFS.format();
|
||||||
|
|
||||||
|
// Begin LCD
|
||||||
|
lcd_begin();
|
||||||
|
|
||||||
|
// Turn Off LCD Light
|
||||||
|
lcd_light_off();
|
||||||
|
|
||||||
|
// Wipe
|
||||||
|
lcd_clear();
|
||||||
|
|
||||||
|
// WiFi Connection
|
||||||
|
setupWiFi();
|
||||||
|
|
||||||
|
// RFID Begin
|
||||||
|
rfid_begin();
|
||||||
|
|
||||||
|
// Blue LED
|
||||||
|
pinMode(D4, OUTPUT);
|
||||||
|
digitalWrite(D4, !LOW);
|
||||||
|
}
|
||||||
239
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/WIFI.ino
Normal file
239
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/WIFI.ino
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
/* ===================================================================================
|
||||||
|
* THIS SECTION IS FOR METHODES AND FUNCTIONS
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void setupWiFi()
|
||||||
|
{
|
||||||
|
// Turn On LCD
|
||||||
|
lcd_light_on();
|
||||||
|
|
||||||
|
// Printing Device Mac Address
|
||||||
|
Serial.println();
|
||||||
|
Serial.println("-----------------------------------------------------------");
|
||||||
|
Serial.println(" TAKEONE WIFI MANAGER STARTING ");
|
||||||
|
Serial.println("-----------------------------------------------------------");
|
||||||
|
//Serial.println("TAKEONE: MAC Address:");
|
||||||
|
//Serial.println("TAKEONE: " + devMac);
|
||||||
|
|
||||||
|
// Starting File System
|
||||||
|
Serial.println("TAKEONE: Mounting File System");
|
||||||
|
read_config();
|
||||||
|
|
||||||
|
// The extra parameters to be configured (can be either global or just in the setup)
|
||||||
|
WiFiManagerParameter custom_devID("devID", "Club UserID", devID.c_str(), 100);
|
||||||
|
WiFiManagerParameter custom_devPASS("devPASS", "Club Password", devPASS.c_str(), 100);
|
||||||
|
|
||||||
|
//WiFiManager Local intialization. Once its business is done, there is no need to keep it around
|
||||||
|
WiFiManager wifiManager;
|
||||||
|
|
||||||
|
//set config save notify callback
|
||||||
|
wifiManager.setSaveConfigCallback(saveConfigCallback);
|
||||||
|
|
||||||
|
//add all your parameters here
|
||||||
|
//wifiManager.addParameter(&custom_server);
|
||||||
|
wifiManager.addParameter(&custom_devID);
|
||||||
|
wifiManager.addParameter(&custom_devPASS);
|
||||||
|
|
||||||
|
// Display Booting Up Message
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("TAKEONE WiFi");
|
||||||
|
lcd_line2("RFID < READY >");
|
||||||
|
delay(2500);
|
||||||
|
|
||||||
|
// Reset Settings
|
||||||
|
if(button.pressed())
|
||||||
|
{
|
||||||
|
reconfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display On OLED
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("CONNECTING TO");
|
||||||
|
lcd_line2("WiFi ROUTER");
|
||||||
|
delay(2500);
|
||||||
|
|
||||||
|
// Trying To Connect To Network Or Reconfig
|
||||||
|
if (!wifiManager.autoConnect(devName.c_str())) {
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("CONNECTION TO");
|
||||||
|
lcd_line2("ROUTER FAILD!");
|
||||||
|
Serial.println("failed to connect and hit timeout");
|
||||||
|
delay(3000);
|
||||||
|
//reset and try again, or maybe put it to deep sleep
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("< REBOOTING >");
|
||||||
|
delay(3000);
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copying The SSID & Password Of Successfully Connected Network
|
||||||
|
WiFi_SSID = wifiManager.getSSID();
|
||||||
|
WiFi_PASS = wifiManager.getPassword();
|
||||||
|
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("CONNECTION");
|
||||||
|
lcd_line2("< SUCCESSFUL >");
|
||||||
|
delay(2500);
|
||||||
|
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("IP ADDRESS");
|
||||||
|
lcd_line2(WiFi.localIP().toString());
|
||||||
|
delay(2500);
|
||||||
|
|
||||||
|
//read updated parameters
|
||||||
|
devID = custom_devID.getValue();
|
||||||
|
devPASS = custom_devPASS.getValue();
|
||||||
|
|
||||||
|
//save the custom parameters to FS
|
||||||
|
if (shouldSaveConfig) {
|
||||||
|
Serial.println("saving config");
|
||||||
|
DynamicJsonDocument json(4000);
|
||||||
|
|
||||||
|
// Assignning Parameters To JSON
|
||||||
|
json["devID"] = devID;
|
||||||
|
json["devPASS"] = devPASS;
|
||||||
|
|
||||||
|
// Opening The File For Reading
|
||||||
|
File configFile = SPIFFS.open("/config.json", "w");
|
||||||
|
|
||||||
|
// Checking If File Opened
|
||||||
|
if (!configFile) {
|
||||||
|
Serial.println("failed to open config file for writing");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print JSON Content On Monitor
|
||||||
|
String memory = "";
|
||||||
|
serializeJson(json, memory);
|
||||||
|
|
||||||
|
// Print To Serial Monitor
|
||||||
|
Serial.println(memory);
|
||||||
|
|
||||||
|
// Write To File
|
||||||
|
configFile.print(memory);
|
||||||
|
|
||||||
|
// Closing Config File
|
||||||
|
configFile.close();
|
||||||
|
|
||||||
|
// Clearing The Buffer Memory
|
||||||
|
json.clear();
|
||||||
|
//end save
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display Data
|
||||||
|
Serial.println("TAKEONE: divID : " + devID);
|
||||||
|
Serial.println("TAKEONE: divPASS : " + devPASS);
|
||||||
|
Serial.println("TAKEONE: divMAC : " + devMac);
|
||||||
|
|
||||||
|
// End Of WiFi Manager
|
||||||
|
Serial.println("-----------------------------------------------------------");
|
||||||
|
|
||||||
|
// Clearing LCD
|
||||||
|
lcd_clear();
|
||||||
|
|
||||||
|
// Turnning Off LCD Light
|
||||||
|
lcd_light_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===================================================================================
|
||||||
|
* THIS SECTION IS FOR METHODES AND FUNCTIONS
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void saveConfigCallback ()
|
||||||
|
{
|
||||||
|
Serial.println("Should Save Config File");
|
||||||
|
shouldSaveConfig = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===================================================================================
|
||||||
|
* THIS SECTION IS FOR METHODES AND FUNCTIONS
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void reconfig()
|
||||||
|
{
|
||||||
|
lcd_clear();
|
||||||
|
lcd_light_on();
|
||||||
|
lcd_line1("Reset WiFi");
|
||||||
|
lcd_line2("Settings");
|
||||||
|
|
||||||
|
// Make Sure That Spiffs Started
|
||||||
|
if(!strtFS) {
|
||||||
|
delay(1000);
|
||||||
|
wipeFS;
|
||||||
|
}
|
||||||
|
|
||||||
|
WiFiManager wifiManager;
|
||||||
|
delay(1500);
|
||||||
|
wifiManager.resetSettings();
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1("Formating SPIFFS");
|
||||||
|
delay(1500);
|
||||||
|
|
||||||
|
// LCD Display
|
||||||
|
lcd_clear();
|
||||||
|
lcd_line1(lcd_center("< REBOOTING >"));
|
||||||
|
delay(1500);
|
||||||
|
lcd_light_off();
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===================================================================================
|
||||||
|
* THIS SECTION IS FOR METHODES AND FUNCTIONS
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
bool checkWiFi()
|
||||||
|
{
|
||||||
|
if(WiFi.status() == WL_CONNECTED)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===================================================================================
|
||||||
|
* Reading Config File
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void read_config()
|
||||||
|
{
|
||||||
|
// After Suceessfull Do The Following
|
||||||
|
if(strtFS)
|
||||||
|
{
|
||||||
|
Serial.println(" -> Mounted File System");
|
||||||
|
if (SPIFFS.exists("/config.json")) {
|
||||||
|
//file exists, reading and loading
|
||||||
|
Serial.println(" -> Reading Config File");
|
||||||
|
File configFile = SPIFFS.open("/config.json", "r");
|
||||||
|
if (configFile) {
|
||||||
|
//Serial.println(" -> Opened Config File");
|
||||||
|
size_t size = configFile.size();
|
||||||
|
// Allocate a buffer to store contents of the file.
|
||||||
|
std::unique_ptr<char[]> buf(new char[size]);
|
||||||
|
configFile.readBytes(buf.get(), size);
|
||||||
|
|
||||||
|
// Display The Read Data
|
||||||
|
String mydata = String(buf.get());
|
||||||
|
mydata.trim();
|
||||||
|
//Serial.println(" -> My Stored Data : " + mydata);
|
||||||
|
|
||||||
|
// JSON Document
|
||||||
|
DynamicJsonDocument json(2000);
|
||||||
|
DeserializationError error = deserializeJson(json, mydata);
|
||||||
|
|
||||||
|
if (!error) {
|
||||||
|
devID = json["devID"].as<String>();
|
||||||
|
devPASS = json["devPASS"].as<String>();
|
||||||
|
} else {
|
||||||
|
Serial.println(" -> failed to load json config");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clearing JSON Memory
|
||||||
|
json.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Serial.println(" -> failed to mount FS");
|
||||||
|
}
|
||||||
|
}
|
||||||
43
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/WIRE.ino
Normal file
43
Firmware Code/ESP8266_I2C_LCD_SPI_RFID/WIRE.ino
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* ===================================================================================
|
||||||
|
* WIRE SCANNER
|
||||||
|
* =================================================================================*/
|
||||||
|
|
||||||
|
void wire_scanner()
|
||||||
|
{
|
||||||
|
byte error, address;
|
||||||
|
int nDevices;
|
||||||
|
|
||||||
|
Serial.println("Scanning...");
|
||||||
|
|
||||||
|
nDevices = 0;
|
||||||
|
for(address = 1; address < 127; address++ )
|
||||||
|
{
|
||||||
|
// The i2c_scanner uses the return value of
|
||||||
|
// the Write.endTransmisstion to see if
|
||||||
|
// a device did acknowledge to the address.
|
||||||
|
Wire.beginTransmission(address);
|
||||||
|
error = Wire.endTransmission();
|
||||||
|
|
||||||
|
if (error == 0)
|
||||||
|
{
|
||||||
|
Serial.print("I2C device found at address 0x");
|
||||||
|
if (address<16)
|
||||||
|
Serial.print("0");
|
||||||
|
Serial.print(address,HEX);
|
||||||
|
Serial.println(" !");
|
||||||
|
|
||||||
|
nDevices++;
|
||||||
|
}
|
||||||
|
else if (error==4)
|
||||||
|
{
|
||||||
|
Serial.print("Unknown error at address 0x");
|
||||||
|
if (address<16)
|
||||||
|
Serial.print("0");
|
||||||
|
Serial.println(address,HEX);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (nDevices == 0)
|
||||||
|
Serial.println("No I2C devices found\n");
|
||||||
|
else
|
||||||
|
Serial.println("done\n");
|
||||||
|
}
|
||||||
BIN
Laser Cut Plan/ATTENDANCE SYSTEM.cdr
Normal file
BIN
Laser Cut Plan/ATTENDANCE SYSTEM.cdr
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user