ESP32 - Keypad - Solenoid Lock

In deze handleiding leert u hoe u een keypad, solenoid lock en ESP32 samen gebruikt. Concreet: als een gebruiker het wachtwoord correct invoert op het keypad, schakelt de ESP32 de solenoid lock in.

De handleiding bevat ook code die de solenoid lock voor een bepaalde tijd aanzet en daarna automatisch weer uitschakelt zonder gebruik te maken van de delay() functie. De ESP32 code ondersteunt bovendien meerdere wachtwoorden.

Hardware Benodigd

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB-kabel Type-C
1×Toetsenbord 3x4
1×Relais
1×Jumperdraden
1×Magneetslot
1×12V Voedingadapter
1×(Optioneel) DC Power Jack
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Keypad en Solenoid Lock

Bent u niet vertrouwd met keypad en solenoid lock, inclusief hun pinouts, functionaliteiten en programmering? Verken dan de onderstaande uitgebreide tutorials over deze onderwerpen:

Aansluitschema

ESP32 keypad solenoid lock wiring diagram

This image is created using Fritzing. Click to enlarge image

ESP32 Code - schakel de solenoid lock aan als het wachtwoord correct is

De onderstaande code zet de solenoid lock aan als het ingevoerde wachtwoord correct is.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-keypad-solenoid-lock */ #include <Keypad.h> #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {12, 14, 27, 26}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the solenoid lock } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); digitalWrite(RELAY_PIN, LOW); } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Snelle Stappen

  • Als u voor het eerst een ESP32 gebruikt, bekijk dan hoe u de omgeving voor ESP32 instelt in Arduino IDE.
  • Maak de bedrading volgens bovenstaande afbeelding.
  • Verbind de ESP32 met uw PC via een micro USB-kabel.
  • Open de Arduino IDE op uw PC.
  • Selecteer het juiste ESP32-bord (bijv. ESP32 Dev Module) en de juiste COM-poort.
  • Verbind ESP32 met PC via USB-kabel
  • Open Arduino IDE, selecteer het juiste bord en poort
  • Klik op het Libraries-icoon in de linkerzijbalk van de Arduino IDE.
  • Zoek op “keypad”, vind dan de keypad bibliotheek van Mark Stanley, Alexander Brevig
  • Klik op de knop Installeren om de keypad bibliotheek te installeren.
ESP32 keypad library
  • Kopieer de bovenstaande code en open deze in Arduino IDE
  • Klik op de Upload-knop in Arduino IDE om de code naar de ESP32 te uploaden
Arduino IDE Upload Code
  • Druk op de toetsen 7124 en daarna op de toets #
  • Druk op de toetsen 1234 en daarna op de toets #
  • Bekijk het resultaat in de Serial Monitor en de status van de solenoid lock
COM6
Send
The password is incorrect, try again The password is correct => unlock
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code Uitleg

De geautoriseerde wachtwoorden zijn vooraf gedefinieerd in de ESP32 code.

Er wordt een string gebruikt om het door de gebruiker ingevoerde wachtwoord op te slaan, genoemd input string. Op het keypad worden twee toetsen (* en #) gebruikt voor speciale functies: het wissen van het wachtwoord en het beëindigen van de invoer. Wanneer een toets op het keypad wordt ingedrukt:

  • Als de toets geen van de twee speciale toetsen is, wordt deze toegevoegd aan de input string
  • Als de ingedrukte toets * is, wordt de input string gewist. Hiermee kunt u het invoeren van het wachtwoord starten of opnieuw starten
  • Als de ingedrukte toets # is:
    • Wordt de input string vergeleken met de vooraf gedefinieerde wachtwoorden. Als er een match is met een van deze wachtwoorden, wordt de solenoid lock ingeschakeld.
    • Ongeacht of het wachtwoord correct is, wordt de input string gewist om klaar te zijn voor de volgende invoer

ESP32 Code - zet een solenoid lock aan gedurende een bepaalde tijd als het wachtwoord correct is

De onderstaande code zet de solenoid lock gedurende 5 seconden aan als het wachtwoord correct is. Na 5 seconden wordt de solenoid lock weer uitgeschakeld.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-keypad-solenoid-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // in milliseconds #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {12, 14, 27, 26}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed relay.high(); // lock the solenoid lock } void loop() { relay.loop(); // MUST call the loop() function first char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct, turning ON relay"); relay.high(); // set high before making a low pulse relay.pulse(UNLOCK_TIME); // deactivate the solenoid lock during UNLOCK_TIME duration } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Let op dat bovenstaande code gebruikmaakt van de ezOutput bibliotheek, die het eenvoudig maakt om tijdmanagement te doen zonder blokkering (non-blocking). U kunt de ezOutput Library Installatiehandleiding raadplegen.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!