<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706</link><pubDate>Thu, 19 Mar 2026 11:36:22 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>e14cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Current Revision posted to Documents by e14cstanton on 3/19/2026 11:36:22 AM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8MjzPjKQX1U"&gt;https://youtu.be/8MjzPjKQX1U&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk158uta0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/interval_5F00_000028.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-03-81/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk15b2cs1" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/interval_5F00_000324.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;p data-start="2625" data-end="2731"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/interval_5F00_000440.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk15os2g2" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-03-81/interval_5F00_000445.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151051"&gt;Episode 706 Resources&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-ce7ca" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ce7ca'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-89f53" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('89f53'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ba8fa" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ba8fa'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-1ebe0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('1ebe0'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9097d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('9097d'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-197e1" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('197e1'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: rfid security project, rfid access control system, mfrc522 esp32 tutorial, embedded systems rfid project, rfid door lock diy, esp32 rfid project, solenoid lock control esp32, esp32 relay control, arduino rfid lock, diy electronic lock, esp32 home automation, friday_release, rfid reader esp32 code&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/6</link><pubDate>Thu, 19 Mar 2026 11:36:22 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 6 posted to Documents by cstanton on 3/19/2026 11:36:22 AM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://youtu.be/8MjzPjKQX1U"&gt;https://youtu.be/8MjzPjKQX1U&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk158uta0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000028.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk15b2cs1" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000324.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;p data-start="2625" data-end="2731"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000440.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk15os2g2" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000445.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151051"&gt;Episode 706 Resources&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-43c6d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('43c6d'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6019f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6019f'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-190c4" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('190c4'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-9dc1c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('9dc1c'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ff809" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ff809'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fcbc3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fcbc3'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: rfid security project, rfid access control system, mfrc522 esp32 tutorial, embedded systems rfid project, rfid door lock diy, esp32 rfid project, solenoid lock control esp32, esp32 relay control, arduino rfid lock, diy electronic lock, esp32 home automation, friday_release, rfid reader esp32 code&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/5</link><pubDate>Wed, 18 Mar 2026 19:12:32 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 5 posted to Documents by cstanton on 3/18/2026 7:12:32 PM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk158uta0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;&lt;img alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000028.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk15b2cs1" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000324.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;p data-start="2625" data-end="2731"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000440.png" /&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk15os2g2" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;&lt;img loading="lazy" alt="image" style="max-height:360px;max-width:640px;"  src="/resized-image/__size/1280x720/__key/communityserver-wikis-components-files/00-00-00-04-35/interval_5F00_000445.png" /&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151051"&gt;Episode 706 Resources&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-1dbf9" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('1dbf9'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-b3db3" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('b3db3'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6af37" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6af37'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6ce36" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6ce36'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-591c6" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('591c6'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-39ab5" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('39ab5'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: rfid security project, rfid access control system, mfrc522 esp32 tutorial, embedded systems rfid project, rfid door lock diy, esp32 rfid project, solenoid lock control esp32, esp32 relay control, arduino rfid lock, diy electronic lock, esp32 home automation, friday_release, rfid reader esp32 code&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/4</link><pubDate>Wed, 18 Mar 2026 19:02:32 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 4 posted to Documents by cstanton on 3/18/2026 7:02:32 PM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jk14mrv4c"&gt;In Closing&lt;/h2&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&amp;nbsp;&lt;a href="https://community.element14.com/challenges-projects/element14-presents/m/files/151051"&gt;Episode 706 Resources&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-5303b" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5303b'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-cdd5a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('cdd5a'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-e2895" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('e2895'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-05c2d" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('05c2d'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-5ab8a" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('5ab8a'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-a1718" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('a1718'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: rfid security project, rfid access control system, mfrc522 esp32 tutorial, embedded systems rfid project, rfid door lock diy, esp32 rfid project, solenoid lock control esp32, esp32 relay control, arduino rfid lock, diy electronic lock, esp32 home automation, friday_release, rfid reader esp32 code&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/3</link><pubDate>Wed, 18 Mar 2026 19:00:47 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 3 posted to Documents by cstanton on 3/18/2026 7:00:47 PM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jk14mrv4c"&gt;In Closing&lt;/h2&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-23585" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('23585'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6a5b7" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6a5b7'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-7739c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('7739c'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-fea44" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('fea44'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-6f164" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('6f164'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-4e2a9" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('4e2a9'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: rfid security project, rfid access control system, mfrc522 esp32 tutorial, embedded systems rfid project, rfid door lock diy, esp32 rfid project, solenoid lock control esp32, esp32 relay control, arduino rfid lock, diy electronic lock, esp32 home automation, friday_release, rfid reader esp32 code&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/2</link><pubDate>Wed, 18 Mar 2026 18:58:04 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 2 posted to Documents by cstanton on 3/18/2026 6:58:04 PM&lt;br /&gt;
&lt;p&gt;In this project, Mark builds a simple but effective RFID-based access control system using an ESP32 and MFRC522 reader. The system can be programmed to recognise a specific RFID tag and trigger a relay or solenoid lock, making it ideal for securing enclosures, doors, or equipment. The video covers the full process, from circuit design and component selection to firmware setup and real-world installation, including mounting the reader behind glass and integrating a locking mechanism.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14q843d"&gt;Get Locked In and Watch the Project Build&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14qbh8e"&gt;Building an RFID-Controlled Lock with ESP32&lt;/h2&gt;
&lt;p data-start="76" data-end="395"&gt;Mark&amp;rsquo;s project walks through a complete, working RFID access control system built around an ESP32 and a common MFRC522 reader. It&amp;rsquo;s positioned as a flexible foundation, something that can open a door, trigger a relay, or secure equipment, and the implementation reflects that balance between simplicity and practical use.&lt;/p&gt;
&lt;blockquote data-start="397" data-end="540"&gt;
&lt;p data-start="399" data-end="540"&gt;&amp;ldquo;Once you build it, you can use it to open a mechanical lock or control a relay&amp;hellip; whatever you see fit.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk13p5rs0" data-section-id="3eqxvn" data-start="547" data-end="565"&gt;Parts Overview&lt;/h2&gt;
&lt;p data-start="569" data-end="602"&gt;At its core, the system combines:&lt;/p&gt;
&lt;ul data-start="604" data-end="851"&gt;
&lt;li data-section-id="hj2jh3" data-start="604" data-end="638"&gt;
&lt;p data-start="606" data-end="638"&gt;An ESP32 as the controller&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1nfgkz6" data-start="639" data-end="687"&gt;
&lt;p data-start="641" data-end="687"&gt;An MFRC522 RFID reader for tag detection&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="y4appc" data-start="688" data-end="734"&gt;
&lt;p data-start="690" data-end="734"&gt;A relay or solenoid lock for actuation&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="7tba99" data-start="735" data-end="803"&gt;
&lt;p data-start="737" data-end="803"&gt;A transistor + flyback diode to safely drive inductive loads&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="51bzrc" data-start="804" data-end="851"&gt;
&lt;p data-start="806" data-end="851"&gt;A push button to enter programming mode&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="853" data-end="906"&gt;The design is intentionally minimal. As Mark puts it:&lt;/p&gt;
&lt;blockquote data-start="908" data-end="980"&gt;
&lt;p data-start="910" data-end="980"&gt;&amp;ldquo;And that&amp;rsquo;s all there is to it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="982" data-end="1148"&gt;That simplicity is one of the strengths of the project, there&amp;rsquo;s no unnecessary abstraction, just the essential building blocks required to make a usable access system.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13p5rt1" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-04-35/MD_2D00_26-RFID-for-ESP32-Schematic.pdf"&gt;community.element14.com/.../MD_2D00_26-RFID-for-ESP32-Schematic.pdf&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id="mcetoc_1jk13p5rt2" data-section-id="6r2aa4" data-start="1155" data-end="1188"&gt;Hardware Design Considerations&lt;/h2&gt;
&lt;p data-start="1190" data-end="1300"&gt;The circuit reflects a standard embedded control pattern: low-power logic controlling a higher-power actuator.&lt;/p&gt;
&lt;ul data-start="1318" data-end="1707"&gt;
&lt;li data-section-id="7qqoxy" data-start="1318" data-end="1403"&gt;
&lt;p data-start="1320" data-end="1403"&gt;The transistor acts as a switch, allowing the ESP32 GPIO to control a 12V load.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="bgg3b" data-start="1404" data-end="1624"&gt;
&lt;p data-start="1406" data-end="1492"&gt;The flyback diode protects against voltage spikes from the relay or solenoid coil:&lt;/p&gt;
&lt;blockquote data-start="1498" data-end="1624"&gt;
&lt;p data-start="1500" data-end="1624"&gt;&amp;ldquo;A diode that protects the transistor from the spikes that are generated by the coil.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li data-section-id="1ik93mj" data-start="1626" data-end="1707"&gt;
&lt;p data-start="1628" data-end="1707"&gt;The button input enables runtime configuration without reflashing firmware.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="1709" data-end="1959"&gt;Mark also explores different locking mechanisms,from small cabinet latches to larger solenoids, highlighting flexibility in real-world applications. Notably, all examples operate at 12V, which is a practical choice for readily available actuators.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qg7f3" data-section-id="1rmc4bb" data-start="1966" data-end="1994"&gt;Physical Build and Layout&lt;/h2&gt;
&lt;p data-start="1998" data-end="2137"&gt;Rather than staying on a breadboard, Mark moves quickly into a semi-permanent build using perfboard. He physically trims the board to size:&lt;/p&gt;
&lt;blockquote data-start="2139" data-end="2236"&gt;
&lt;p data-start="2141" data-end="2236"&gt;&amp;ldquo;I use a knife&amp;hellip; and I should be able to simply break it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2238" data-end="2482"&gt;This step is easy to overlook but important,it signals a transition from prototype to deployable hardware. The layout decisions (like diagonal placement due to pin pitch) are practical, not aesthetic. This is typical of fast, functional builds.&lt;/p&gt;
&lt;p data-start="2484" data-end="2553"&gt;There are also moments where routing issues appear and are corrected:&lt;/p&gt;
&lt;blockquote data-start="2555" data-end="2623"&gt;
&lt;p data-start="2557" data-end="2623"&gt;&amp;ldquo;We solve that in a minute.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="2625" data-end="2731"&gt;That kind of iterative adjustment is realistic and useful for viewers attempting to replicate the project.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk13qtbr4" data-section-id="904ixf" data-start="2738" data-end="2776"&gt;Firmware Architecture and Behaviour&lt;/h2&gt;
&lt;p data-start="2778" data-end="2892"&gt;The firmware is straightforward but well structured. It uses the MFRC522 library stack and EEPROM for persistence.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk13qtbr5" data-section-id="3yyknn" data-start="2894" data-end="2917"&gt;Libraries and setup&lt;/h3&gt;
&lt;p data-start="2919" data-end="2941"&gt;The project relies on:&lt;/p&gt;
&lt;ul data-start="2943" data-end="3052"&gt;
&lt;li data-section-id="9cf25d" data-start="2943" data-end="2981"&gt;
&lt;p data-start="2945" data-end="2981"&gt;&lt;code data-start="2945" data-end="2956"&gt;MFRC522v2&lt;/code&gt; for RFID communication&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1btx2xu" data-start="2982" data-end="3014"&gt;
&lt;p data-start="2984" data-end="3014"&gt;&lt;code data-start="2984" data-end="2989"&gt;SPI&lt;/code&gt; for hardware interface&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1qg4jmw" data-start="3015" data-end="3052"&gt;
&lt;p data-start="3017" data-end="3052"&gt;&lt;code data-start="3017" data-end="3025"&gt;EEPROM&lt;/code&gt; for non-volatile storage&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3054" data-end="3092"&gt;Only one external install is required:&lt;/p&gt;
&lt;blockquote data-start="3094" data-end="3181"&gt;
&lt;p data-start="3096" data-end="3181"&gt;&amp;ldquo;You need to install&amp;hellip; RFID MFRC522, version 2.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="mcetoc_1jk13s1q96" data-section-id="qwj6nm" data-start="3188" data-end="3211"&gt;Key logic and code breakdown&lt;/h3&gt;
&lt;h4 data-start="3213" data-end="3257"&gt;1. Pin configuration and mode selection&lt;/h4&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define relais 14
#define pswitch 12
#define led 2
char programmode=0;&lt;/pre&gt;&lt;/p&gt;
&lt;ul data-start="3342" data-end="3438"&gt;
&lt;li data-section-id="1uejnxd" data-start="3342" data-end="3369"&gt;
&lt;p data-start="3344" data-end="3369"&gt;Relay output on GPIO 14&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1t55i8g" data-start="3370" data-end="3403"&gt;
&lt;p data-start="3372" data-end="3403"&gt;Programming switch on GPIO 12&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1u57rno" data-start="3404" data-end="3438"&gt;
&lt;p data-start="3406" data-end="3438"&gt;LED used as a status indicator&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="3440" data-end="3478"&gt;At boot, the system checks the button:&lt;/p&gt;
&lt;p data-start="3440" data-end="3478"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if(digitalRead(pswitch)==0){
  programmode=1;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3540" data-end="3646"&gt;This is a simple but effective pattern: boot-time mode selection avoids needing serial commands or UI.&lt;/p&gt;
&lt;h4 data-start="3653" data-end="3680"&gt;2. RFID detection loop&lt;/h4&gt;
&lt;p data-start="3682" data-end="3730"&gt;The main loop exits early if no card is present:&lt;/p&gt;
&lt;p data-start="3682" data-end="3730"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (!mfrc522.PICC_IsNewCardPresent()) {
  return;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="3796" data-end="3861"&gt;This keeps execution efficient and avoids unnecessary processing.&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;Once a card is detected, its UID is read and converted:&lt;/p&gt;
&lt;p data-start="3863" data-end="3918"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;String uidString = &amp;quot;&amp;quot;;
for (byte i = 0; i &amp;lt; mfrc522.uid.size; i++) {
  if (mfrc522.uid.uidByte[i] &amp;lt; 0x10) {
    uidString += &amp;quot;0&amp;quot;; 
  }
  uidString += String(mfrc522.uid.uidByte[i], HEX);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4121" data-end="4208"&gt;This conversion step is important, it ensures a consistent string format for comparison.&lt;/p&gt;
&lt;h4 data-start="4215" data-end="4252"&gt;3. EEPROM storage and comparison&lt;/h4&gt;
&lt;p data-start="4254" data-end="4310"&gt;The system uses EEPROM to store a single authorised UID:&lt;/p&gt;
&lt;p data-start="4254" data-end="4310"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;EEPROM.writeString(0,uidString);
EEPROM.commit();&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;And later compares it:&lt;/p&gt;
&lt;p data-start="4374" data-end="4396"&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;if (uidString == EEPROM.readString(0)){
  digitalWrite(relais, HIGH);
}&lt;/pre&gt;&lt;/p&gt;
&lt;p data-start="4482" data-end="4520"&gt;Mark summarises the behaviour clearly:&lt;/p&gt;
&lt;blockquote data-start="4522" data-end="4634"&gt;
&lt;p data-start="4524" data-end="4634"&gt;&amp;ldquo;If there is a match, then it will open the door or activate the relay.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="mcetoc_1jk140qb77" data-section-id="1qovlx" data-start="4641" data-end="4664"&gt;Design observations, Limitations and Future Improvements&lt;/h2&gt;
&lt;ul data-start="4666" data-end="4885"&gt;
&lt;li data-section-id="p2tiew" data-start="4666" data-end="4738"&gt;
&lt;p data-start="4668" data-end="4738"&gt;Single UID storage keeps the logic simple but limits scalability&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="ph6glf" data-start="4739" data-end="4798"&gt;
&lt;p data-start="4741" data-end="4798"&gt;EEPROM use is appropriate for persistence across resets&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="5a0muc" data-start="4799" data-end="4885"&gt;
&lt;p data-start="4801" data-end="4885"&gt;The 3-second relay activation (&lt;code data-start="4832" data-end="4845"&gt;delay(3000)&lt;/code&gt;) is fixed, this could be parameterised&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-start="4930" data-end="5004"&gt;The final application is a practical one: securing a 3D printer enclosure.&lt;/p&gt;
&lt;blockquote data-start="5006" data-end="5118"&gt;
&lt;p data-start="5008" data-end="5118"&gt;&amp;ldquo;I do have a curious kid&amp;hellip; this way I can prevent her from opening it.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="5731" data-end="5842"&gt;Mark hints at broader applications but doesn&amp;rsquo;t extend the design further. There are several obvious next steps:&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s38" data-section-id="12h2z7b" data-start="5844" data-end="5874"&gt;1. Multiple user support&lt;/h3&gt;
&lt;p data-start="5875" data-end="5970"&gt;Currently only one UID is stored. Expanding to a list would make this viable for shared access.&lt;/p&gt;
&lt;h3 id="mcetoc_1jk14m2s39" data-section-id="1q31xxl" data-start="5972" data-end="6004"&gt;2. Security considerations&lt;/h3&gt;
&lt;ul data-start="6005" data-end="6110"&gt;
&lt;li data-section-id="ge0cnw" data-start="6005" data-end="6060"&gt;
&lt;p data-start="6007" data-end="6060"&gt;UID-based authentication can be cloned on some tags&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="3whyj1" data-start="6061" data-end="6110"&gt;
&lt;p data-start="6063" data-end="6110"&gt;No encryption or challenge-response mechanism&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3a" data-section-id="1wyv41g" data-start="6112" data-end="6136"&gt;3. Feedback and UX&lt;/h3&gt;
&lt;ul data-start="6137" data-end="6235"&gt;
&lt;li data-section-id="19k8plh" data-start="6137" data-end="6187"&gt;
&lt;p data-start="6139" data-end="6187"&gt;Add buzzer or LED patterns for success/failure&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1vwjvi7" data-start="6188" data-end="6235"&gt;
&lt;p data-start="6190" data-end="6235"&gt;Serial output is useful but not user-facing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mcetoc_1jk14m2s3b" data-section-id="34lb6a" data-start="6237" data-end="6265"&gt;4. Power and enclosure&lt;/h3&gt;
&lt;ul data-start="6266" data-end="6367"&gt;
&lt;li data-section-id="1jhp9bn" data-start="6266" data-end="6318"&gt;
&lt;p data-start="6268" data-end="6318"&gt;No dedicated enclosure or power regulation shown&lt;/p&gt;
&lt;/li&gt;
&lt;li data-section-id="1ahkpcn" data-start="6319" data-end="6367"&gt;
&lt;p data-start="6321" data-end="6367"&gt;Long-term installs would need proper housing&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mcetoc_1jk14mrv4c"&gt;In Closing&lt;/h2&gt;
&lt;p data-start="6389" data-end="6575"&gt;This project does exactly what it sets out to do: deliver a working RFID-controlled lock with minimal overhead. It&amp;rsquo;s approachable, adaptable, and grounded in real use rather than theory.&lt;/p&gt;
&lt;p data-start="6577" data-end="6742"&gt;The combination of ESP32, MFRC522, and a simple transistor driver is well understood&amp;mdash;but Mark&amp;rsquo;s implementation shows how quickly that can become something practical.&lt;/p&gt;
&lt;blockquote data-start="6744" data-end="6822"&gt;
&lt;p data-start="6746" data-end="6822"&gt;&amp;ldquo;Present my ring&amp;hellip; and it will open.&amp;rdquo; &lt;span class="" data-state="closed"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;That direct cause-and-effect is what makes the project useful, and easy to build upon.&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14t1q0f" data-start="6824" data-end="6909"&gt;Supporting Files and Links&lt;/h2&gt;
&lt;p data-start="6824" data-end="6909" data-is-last-node="" data-is-only-node=""&gt;-&amp;nbsp;&lt;/p&gt;
&lt;h2 id="mcetoc_1jk14tsn2g"&gt;Bill of Materials&lt;/h2&gt;
&lt;table class="e14-product-bom-main"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;a id="e14-product-link-8382c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396,2575349,9338365,1458986,3638667&amp;nsku=45X5832,84Y9603,38K0258,42K2813,08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_BUY_KIT" class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('8382c'));" data-farnell="2402396,2575349,9338365,1458986,3638667" data-newark="45X5832,84Y9603,38K0258,42K2813,08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc=",,,,,,,," data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Kit&lt;/a&gt; &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WURTH ELEKTRONIK Tactile Switch, WS-TATV Series, Top Actuated, Through Hole, Round Button&lt;/td&gt;
&lt;td&gt;WURTH ELEKTRONIK&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-d7f5c" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2402396&amp;nsku=45X5832&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('d7f5c'));" data-farnell="2402396" data-newark="45X5832" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transistor BC517-D74Z&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-62bec" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=2575349&amp;nsku=84Y9603&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('62bec'));" data-farnell="2575349" data-newark="84Y9603" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resistor 1K&lt;/td&gt;
&lt;td&gt;Multicomp pro&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-ab7d8" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=9338365&amp;nsku=38K0258&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('ab7d8'));" data-farnell="9338365" data-newark="38K0258" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diode 1n4001&lt;/td&gt;
&lt;td&gt;Onsemi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-819d0" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=1458986&amp;nsku=42K2813&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('819d0'));" data-farnell="1458986" data-newark="42K2813" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID Tag KW9Z-T1X5B&lt;/td&gt;
&lt;td&gt;IDEC&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a id="e14-product-link-37b9f" data-at-areainteracted="rte-content" data-at-type="click" data-at-link-type="button" href="https://referral.element14.com/OrderCodeView?fsku=3638667&amp;nsku=08AJ1980&amp;COM=e14c-noscript&amp;CMP=e14c-noscript&amp;osetc=e14-noscript-tracking-loss" data-at-label="PRODUCT_POPUP_OPEN"class="e14-embedded e14_shopping-cart-far e14-button" onclick="event.preventDefault();e14.func.displayProduct(e14.meta.user.country, this, 'embedded-link', e14.func.getProductLinkJSON('37b9f'));" data-farnell="3638667" data-newark="08AJ1980" data-comoverride="" data-cmpoverride="" data-cpc="undefined" data-avnetemea="" data-avnetema="" data-avnetasia="" &gt;Buy Now&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Product Name&lt;/th&gt;
&lt;th&gt;Manufacturer&lt;/th&gt;
&lt;th&gt;Quantity&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 Doit Devkit V1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RFID reader PCB develp. Kit RC522&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;USB cable and USB power supply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock mechanism 5V&lt;/td&gt;
&lt;td&gt;BADODO Security&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr class="xs-hide"&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: friday_release&lt;/div&gt;
</description></item><item><title>ESP32 + RFID = Smart Access Control in a Simple DIY Build -- Episode 706</title><link>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706/revision/1</link><pubDate>Wed, 18 Mar 2026 17:58:26 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:00c882a8-ef9a-4c52-b5a7-21829f3469ca</guid><dc:creator>cstanton</dc:creator><comments>https://community.element14.com/challenges-projects/element14-presents/project-videos/w/documents/72037/esp32-rfid-smart-access-control-in-a-simple-diy-build----episode-706#comments</comments><description>Revision 1 posted to Documents by cstanton on 3/18/2026 5:58:26 PM&lt;br /&gt;
&lt;p&gt;s&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>