Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Akansh SaxenaMITULPawan singh
Published

Digital Outing System Using RFID

It's a simple digital outing system which uses RFID technology to register the details of the student moving across the college campus gate.

IntermediateShowcase (no instructions)3 days2,996
Digital Outing System Using RFID

Things used in this project

Story

Read more

Schematics

Schematic diagram

System Architecture

Code

NodeMCU Code

Arduino
It is a code for the hardware working on the project i.e. NodeMCU
void setup() 
{
  Serial.begin(9600);// Initiate a serial communication
  SPI.begin();      // Initiate  SPI bus
  ESP.wdtEnable(4);
  client.setServer(mqtt_server,1883);
  client.setCallback(callback);
  ESP.wdtDisable();
  pinMode(2,INPUT);
  pinMode(3,OUTPUT);
  pinMode(0,INPUT);
  pinMode(16,OUTPUT);
  pinMode(15,OUTPUT);
  pinMode(10,OUTPUT);
  mfrc522.PCD_Init();// Initiate MFRC522
    WiFi.begin(ssid, wifi_password);

  // Wait until the connection has been confirmed before continuing
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 if (client.connect(clientID)) {
    Serial.println("Connected to MQTT Broker!");
  }
  else {
    Serial.println("Connection to MQTT Broker failed...");
  }
}
void loop() 
{
    client.loop();
  // Look for new cards
  digitalWrite(3,LOW);
  digitalWrite(16,LOW);
  digitalWrite(15,LOW);
  digitalWrite(10,HIGH);
  while(!initcard())ESP.wdtFeed();
  //Show UID on serial monitor
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();
  data+="{";
  data+="\'";
  data+="ID";
  data+="\'";  
  data+=":";
  data+="\'";
  data+=content;
  data+="\'";
  data+="}";
  Serial.println(data);
  char c[25];
  for (int q=0;q<25;q++)
  c[q]=data[q];
  client.connect("First");
  client.publish("Data2",c);
  w = "z";
  ESP.wdtDisable();
  while(w=="z")
  {
    client.subscribe("Data3");
    if (w!="z")
    { 
      client.disconnect();
      break;
      }
      
   }
  ESP.wdtEnable(4); 
  memset(&c[0], 0, sizeof(c)); 
  Serial.println("Exited from loop 1"); 
  data ="";
  if(w=="0")
  { 
    client.connect(clientID);
    w="z";
  Serial.println("Reached in loop2");  
  y=digitalRead(2);
  z=digitalRead(0);
  Serial.println();
  digitalWrite(10,LOW);
while((y==HIGH) && (z==HIGH))
{  
   y=digitalRead(2);
   z=digitalRead(0);
   digitalWrite(3,HIGH);
   ESP.wdtFeed();
   if((y==LOW)||(z==LOW))
   {
   if (y==LOW) 
   {p="Home";
   digitalWrite(16,HIGH);}
   else{
   p="Market";
   digitalWrite(15,HIGH);}
  data+="{";
  data+="\'";
  data+="ID";
  data+="\'";  
  data+=":";
  data+="\'";
  data+=content;
  data+="\'";
  data+=",";
  data+="\'";
  data+="Purpose";
  data+="\'";
  data+=":";
  data+="\'";
  data+=p;
  data+="\'";
  data+="}";
  Serial.println(data);
   char c[100];
   for (int q=0;q<data.length();q++)
   c[q]=data[q];
  digitalWrite(3,LOW);
  if (client.publish(mqtt_topic,c)) {
      Serial.println("Button pushed and message sent!");
    }
     else {
      Serial.println("Message failed to send. Reconnecting to MQTT Broker and trying again");
      client.connect(clientID);
      delay(1000); // This delay ensures that client.publish doesn't clash with the client.connect call
      client.publish(mqtt_topic,c);
    }
  data="";
  memset(&c[0], 0, sizeof(c));
  delay(1000);
   break;
   }
  }
 }
}

Backend Script

Python
This works with the SQLite database and updates Django.
def on_message(client, userdata, message):
    if message.topic == "Data":
        e=""
        c=message.payload
        for i in range(37):
            e+=c[i]
        q=0
        d=ast.literal_eval(e)
        y=time()
        if (d['Purpose']=="Mrkt"):
            d['Purpose']="Market"
        conn=sqlite3.connect('db.sqlite3')
        c=conn.cursor()
        c.execute("""CREATE TABLE IF NOT EXISTS student_nodemcu (RFID varchar(30),Purpose varchar(20),Status varchar(20), In_Time varchar(20), Out_Time varchar(20))""")
        c.execute("SELECT * FROM student_nodemcu")
        fetch = c.fetchall()
        for f in fetch:
            if (str(f[1])==str(d['ID'])):
                       q=1
                       c.execute("UPDATE student_nodemcu SET Status= 'OUT' WHERE RFID=(?)",(str(f[1]),))
                       c.execute("UPDATE student_nodemcu SET Purpose= (?) WHERE RFID=(?)",(d['Purpose'],str(f[1])))
                       c.execute("UPDATE student_nodemcu SET Out_Time= (?) WHERE RFID=(?)",(y,str(f[1])))
                       c.execute("UPDATE student_nodemcu SET In_Time= (?) WHERE RFID=(?)",("-",str(f[1])))

        if q==0: 
           c.execute("""INSERT INTO student_nodemcu (RFID,Purpose,Status,Out_Time,In_Time) VALUES((?), (?),(?),(?),(?))""", (d['ID'],d['Purpose'],'OUT',y,"-") )
        conn.commit()
        conn.close()

Credits

Akansh Saxena
2 projects • 5 followers
I'm currently an engineering student. My field of interest is hardware and working on projects. I always love to learn new things about it.
Contact
MITUL
1 project • 4 followers
I am a student doing Masters in Electronic Systems. I am interested and Digital Systems Design and Embedded Systems Design.
Contact
Pawan singh
1 project • 5 followers
An enthusiastic student with highly motivated and pursuing bachelors in ECE.Expert in implementation of each step of the project.
Contact

Comments

Please log in or sign up to comment.