아두이노와 ESP8266으로 만드는 와이파이 스마트 도어락 - 스마트폰으로 잠금 해제
부품 및 소모품
부품 수량 비고
아두이노 우노 R3 (Arduino UNO R3) 1
ESP8266 와이파이 모듈 (PCB 안테나 타입) 1 ElectroPeak 제품 기준
달링턴 고전력 트랜지스터 1 솔레노이드 구동용
솔레노이드 도어락 (Lock-style Solenoid) 1 도어 잠금 장치용
앱 및 온라인 서비스
프로젝트 소개
이 튜토리얼과 다른 멋진 프로젝트들은 ElectroPeak 공식 웹사이트 에서 확인하실 수 있습니다.
이 튜토리얼에서는 아두이노 기반 스마트 도어락을 만드는 방법을 배웁니다. 이 스마트락은 휴대폰으로 잠금을 해제할 수 있는 기능을 제공합니다. 프로젝트를 완료하면 다음을 할 수 있게 됩니다:
특정 QR 코드 생성 방법 학습
ESP8266으로 로그인 페이지 구현 방법 학습
휴대폰으로 도어 잠금 해제 구현
스마트락으로 문 보안 강화하기
요즘은 최첨단 기술을 활용해 가정이나 사무실 보안을 강화할 수 있습니다. 스마트폰과 스마트 기기 사용이 보편화되고 가격도 저렴해져, 우리 주변 기기들을 더 스마트하게 만들기 좋은 환경이 되었습니다. 매일 엔지니어와 기술자들이 새로운 시스템과 도구를 개발하여 홈 오토메이션을 더 스마트하게 만들고, 삶을 더 안전하고 편리하게 만들어주고 있습니다. 아마도 키패드나 지문 인식 방식을 사용하는 스마트 도어락을 본 적이 있을 것입니다.
이 프로젝트에서는 키패드나 복잡한 기계적 요소 없이, 와이파이와 솔레노이드 락을 이용한 아두이노 기반 시스템을 만듭니다. 이것이 이 시스템의 장점입니다. 문에 QR 코드를 부착하고, 권한이 있는 사람이 QR 코드를 스캔하여 로그인 페이지에 접속한 뒤 비밀번호를 입력하면 솔레노이드 락이 해제됩니다. 아두이노 보드, 솔레노이드 드라이버, ESP8266만으로 로컬 와이파이 연결을 구현합니다. 시작해볼까요.
회로도
코드
먼저 ESP-01용 코드를 작성하여 로그인 페이지를 생성하고 사용자로부터 비밀번호를 받아 시리얼 포트를 통해 아두이노로 전송합니다. 그런 다음 아두이노용 코드를 작성하여 ESP-01로부터 데이터를 수신하고 서보 모터(솔레노이드)를 제어합니다. 두 코드 모두 아두이노 IDE로 컴파일 및 업로드합니다.
라이브러리 추가 후 코드 업로드 방법:
아두이노 공식 사이트 에서 OS에 맞는 소프트웨어 다운로드 및 설치
아두이노 IDE 실행 후 텍스트 에디터 비우기
다음 코드 복사 붙여넣기
Tools > Board에서 보드 선택
아두이노를 PC에 연결하고 Tools > Port에서 COM 포트 설정
업로드(화살표) 버튼 클릭
아두이노 코드
String inputString = ""; // 수신 데이터를 저장할 문자열
bool stringComplete = false; // 문자열 완료 여부
void setup() {
Serial.begin(115200); // 시리얼 통신 초기화
inputString.reserve(200); // 200바이트 예약
pinMode(9, OUTPUT); // 솔레노이드 제어 핀
}
void loop() {
// 줄바꿈 문자가 도착하면 문자열 처리
if (stringComplete) {
if (inputString == "your_password") { // 비밀번호 일치 시
digitalWrite(9, HIGH); // 솔레노이드 작동
delay(300);
digitalWrite(9, LOW);
Serial.println(inputString);
// 문자열 초기화
inputString = "";
stringComplete = false;
}
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read(); // 새 바이트 읽기
inputString += inChar; // 문자열에 추가
// 줄바꿈 문자면 플래그 설정
if (inChar == '\n') {
stringComplete = true;
}
}
}
ESP8266 코드
ESP-01 코드 업로드 시 아두이노 IDE에서 ESP 보드를 선택해야 합니다.
File > Preferences에서 Additional Boards Manager URLs에 https://arduino.esp8266.com/stable/package_esp8266com_index.json 추가
Tools > Board > Boards Manager에서 ESP8266 설치
Tools > Board에서 "Generic ESP8266 Module" 선택
USB-TTL 컨버터를 업로더 하드웨어로 설정 (컨버터 연결 후 Tools > Port에서 올바른 포트 선택)
새 스케치에 다음 코드 복사 후 업로드
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// 와이파이 네트워크 설정
const char* ssid = "YourSSID";
const char* password = "YourPASSWORD";
ESP8266WebServer server(80);
char htmlResponse[3000];
void handleRoot() {
snprintf(htmlResponse, 3000,
"<!DOCTYPE html>\
<html lang=\"en\">\
<head>\
<style>\
body {background-color: rgb(160, 0, 53);}\
h3 {color: white;text-align:center;}\
p {color: white; text-align:center;}\
div {color: white; text-align:center;}\
input {text-align:center;}\
</style>\
<meta charset=\"utf-8\">\
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
</head>\
<body>\
<h3><center>Electropeak Smart Security Door</center></h3>\
<p><center>Please type your ID</center></p>\
<div>ID: <input type='text' name='pass_word' id='pass_word' align='center' size=10 autofocus></div>\
<div>\
<br><button id=\"save_button\">Log In</button>\
</div>\
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js\"></script>\
<script>\
var pass;\
$('#save_button').click(function(e){\
e.preventDefault();\
pass = $('#pass_word').val();\
$.get('/save?pass=' + pass, function(data){\
console.log(data);\
});\
});\
</script>\
</body>\
</html>");
server.send(200, "text/html", htmlResponse);
}
void handleSave() {
if (server.arg("pass") != "") {
Serial.println(server.arg("pass")); // 아두이노로 비밀번호 전송
}
}
void setup() {
Serial.begin(115200);
delay(10);
// 와이파이 연결
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/save", handleSave);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
테스트 및 QR 코드 생성
코드 업로드 후 아두이노 IDE의 시리얼 모니터를 열어 IP 주소 확인
브라우저 주소창에 IP 주소 입력하여 웹 서버 UI 확인
텍스트 박스에 ID(비밀번호) 입력 후 올바르면 아두이노가 락 작동
주의: ESP8266과 동일한 와이파이 공유기에 연결되어 있어야 합니다.
이제 사용자가 쉽게 웹페이지에 접속할 수 있도록 QR 코드를 만듭니다. 온라인 QR 코드 생성 도구를 이용하세요. (추천: qr-code-generator.com )
확인한 IP 주소를 입력란에 붙여넣기
"Create QR Code" 클릭
QR 코드를 출력하여 문 근처에 부착하세요. 도어를 해제하려면 와이파이에 접속 후 QR 코드를 스캔하고 ID를 입력하면 됩니다.
향후 개선 사항
로그인 페이지의 전문적인 UI 디자인 적용
사용자별 권한 레벨 또는 시간 기반 권한 추가
이 튜토리얼과 다른 멋진 프로젝트들은 ElectroPeak 공식 웹사이트 에서 확인하실 수 있습니다.