Differences

This shows you the differences between two versions of the page.

Link to this comparison view

iothings:proiecte:2021:homesecurity [2022/01/27 23:54]
robert.olteanu1909 [Software Description]
iothings:proiecte:2021:homesecurity [2022/01/28 01:14] (current)
robert.olteanu1909 [References]
Line 37: Line 37:
 Next thing the software is split in two main parts: Next thing the software is split in two main parts:
   - Initial setup - this is where all the components / modules are getting initialized   - Initial setup - this is where all the components / modules are getting initialized
-    * WiFi - The ESP32 tries to connect to the configured network until succeed and it gets the IP address +    ​* **WiFi** - The ESP32 tries to connect to the configured network until succeed and it gets the IP address 
-    * MQTT - The Adafruit.io supports data transfer using MQTT, and on this initial setup there is needed to subscribe to all topics needed while the publishers doesn'​t need to.+    ​* **MQTT** - The Adafruit.io supports data transfer using MQTT, and on this initial setup there is needed to subscribe to all topics needed while the publishers doesn'​t need to.
  
 <code c> <code c>
Line 52: Line 52:
 </​code>​ </​code>​
  
-    * RFC522 - Initialize the SPI Bus then initialize the RFID module. +    ​* **RFC522** - Initialize the SPI Bus then initialize the RFID module. 
-    * LCD16x2 - Initialize the LCD and if the module supports, the backlight for a better display of messages +    ​* **LCD16x2** - Initialize the LCD and if the module supports, the backlight for a better display of messages 
-    * Keypad - Define the keypad and it's GPIO pins used+    ​* **Keypad** - Define the keypad and it's GPIO pins used
  
 <code c> <code c>
Line 96: Line 96:
 </​code>​ </​code>​
   - Loop - this is looping until the ESP32 is stopped by user.   - Loop - this is looping until the ESP32 is stopped by user.
-    * Connect to MQTT - this is done on each iteration to ensure a good connectivity+    ​* **Connect to MQTT** - this is done on each iteration to ensure a good connectivity 
 +    * **Read code subscription** - first time after initial setup the user must insert his/her keycode of 4 characters inside Adafruit.io dashboard
  
 <code c> <code c>
Line 117: Line 118:
 </​code>​ </​code>​
  
-    * Read code subscription - first time after initial setup the user must insert his/her keycode of 4 characters inside Adafruit.io dashboard +    * **Card scan** - Wait until a card is scanned and check if it's a valid one 
-    ​* Card scan - Wait until a card is scanned and check if it's a valid one + 
-    * Type code - If the card was valid the user is prompted to input the security code+<code c> 
 +if(rfid.PICC_IsNewCardPresent()) { 
 +Serial.println("​Card present"​);​ 
 +if(rfid.PICC_ReadCardSerial()) { 
 +    Serial.println("​Read Serial"​);​ 
 +    for (int i=0; i<​rfid.uid.size;​ i++) { 
 +    if(rfid.uid.uidByte[i] != availableCard[i]) { 
 +        char msg[] = "​Invalid card scanned";​ 
 +        hs_log.publish(msg);​ // publish message  
 +        lcd.clear();​ 
 +        lcd.setCursor(0,​0);​ 
 +        lcd.print("​Invalid card"​);​ 
 +        delay(3000);​ // wait to be able to see the message from lcd 
 +</​code>​ 
 + 
 +    ​* **Type code** - If the card was valid the user is prompted to input the security code 
 + 
 +<code c> 
 +bool scannedCard() { 
 +  int idx = 0; 
 + 
 +  lcd.clear();​ 
 +  lcd.setCursor(0,​0);​ 
 +  lcd.print("​Insert code:"​);​ 
 +  lcd.setCursor(0,​1);​ 
 +   
 +  do { 
 +    do{ 
 +      keyp = keypad.getKey();​ 
 +    }while(!keyp);​ 
 +    kcode[idx] = keyp; 
 +    idx++; 
 +    lcd.print("​*"​);​ 
 +  }while(idx < 4); 
 + 
 +  for(int i=0; i<​4;​i++){ 
 +    if(kcode[i] != code.charAt(i)) { // code is the variable containing the current keycode 
 +      return false; 
 +    } 
 +  } 
 +  return true; 
 +
 +</​code>​ 
 + 
 +    * **Update status** - anything from opening a door / disabling alarm etc. 
 + 
 +<code c> 
 +lcd.clear();​ 
 +lcd.setCursor(0,​0);​ 
 +lcd.print("​Door opened"​);​ 
 +char msg[] = "Door opened";​ 
 +hs_log.publish(msg);​ // publish message to logs 
 +delay(7000);​ // open door / disable alarm etc. 
 +lcd.clear();​ 
 +lcd.setCursor(0,​0);​ 
 +lcd.print("​Door closed"​);​ 
 +char msg2[] = "Door closed";​ 
 +hs_log.publish(msg2);​ // publish message to logs 
 +delay(3000);​ // wait to be able to read the lcd message 
 +</​code>​
 ====== Software logical workflow ====== ====== Software logical workflow ======
-{{ iothings:​proiecte:​2021:​hs_schematic.png }}+Down below I created a small logical workflow for the code described in the previous chapter to be easily understood.
  
  
-====== References ====== 
  
 +{{ iothings:​proiecte:​2021:​hs_schematic.png }}
  
  
 +====== References ======
 +
 +[1] - [[http://​esp32.net/​]] \\
 +[2] - [[https://​lastminuteengineers.com/​how-rfid-works-rc522-arduino-tutorial/​]] \\
 +[3] - [[https://​esp32io.com/​tutorials/​esp32-rfid-nfc]] \\
 +[4] - [[https://​randomnerdtutorials.com/​esp32-esp8266-i2c-lcd-arduino-ide/​]] \\
 +[5] - [[https://​esp32io.com/​tutorials/​esp32-keypad]] \\
 +[6] - [[https://​io.adafruit.com/​api/​docs/​mqtt.html#​adafruit-io-mqtt-api]] \\
 +[7] - [[https://​raw.githubusercontent.com/​AchimPieters/​esp32-homekit-camera/​master/​Images/​ESP32-38%20PIN-DEVBOARD.png]] \\
iothings/proiecte/2021/homesecurity.1643320498.txt.gz · Last modified: 2022/01/27 23:54 by robert.olteanu1909
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0