This shows you the differences between two versions of the page.
|
iothings:proiecte:2021:homesecurity [2022/01/28 00:04] 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 | + | * **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 118: | Line 118: | ||
| </code> | </code> | ||
| - | * 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 |
| <code c> | <code c> | ||
| Line 135: | Line 135: | ||
| </code> | </code> | ||
| - | * Type code - If the card was valid the user is prompted to input the security code | + | * **Type code** - If the card was valid the user is prompted to input the security code |
| <code c> | <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> | </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]] \\ | ||