스마트 IoT 자 제작: ESP8266, 아두이노 & 초음파 센서로 실시간 모니터링
부품 및 소모품
| 부품 | 수량 |
| 아두이노 우노 (Arduino UNO) | 1 |
| HC-SR04 초음파 센서 | 1 |
| 브레드보드 | 1 |
| 1kΩ 저항 | 4 | ESP8266 레벨 시프팅용 |
| ESP8266 ESP-01 모듈 | 1 |
| 점퍼 와이어 | 약 15~20개 |
앱 및 온라인 서비스
프로젝트 소개
주방 용기(자/병)에 초음파 센서를 부착하여 내용물 레벨을 실시간 측정, ESP8266으로 Wi-Fi 통해 로컬 서버(PHP/MySQL)에 전송, 웹페이지에서 확인하는 IoT 프로토타입입니다.
1단계: 준비물
- 하드웨어: 아두이노 우노, 초음파 센서, 투명 플라스틱 병, 브레드보드, ESP-01, 점퍼 와이어, 2kΩ 저항 2개 (ESP TX→아두이노 RX 레벨 다운)
- 소프트웨어: 아두이노 IDE, Notepad++/Sublime Text, Apache 서버(XAMPP 등), MySQL DB
2단계: 배선
- 초음파 센서: Trig→D9, Echo→D10, VCC/GND 연결
- ESP-01: VCC/GND→3.3V, CH_PD→3.3V, TX→아두이노 D2 (직결), RX→아두이노 D3 (1k/2k 분압 후 연결)
- 아두이노는 SoftwareSerial(D2, D3)로 ESP와 통신
3단계: 아두이노 펌웨어
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // RX, TX
long duration; int distance;
void setup() {
Serial.begin(9600); esp.begin(9600);
esp.println("AT"); response(3000);
esp.println("AT+CIOBAUD=9600"); response(1000);
esp.println("AT+CWMODE=1"); response(2000);
esp.println("AT+CWJAP=\"SSID\",\"PASSWORD\""); response(10000);
pinMode(9, OUTPUT); pinMode(10, INPUT);
}
void loop() {
// 초음파 거리 측정
digitalWrite(9, LOW); delayMicroseconds(2);
digitalWrite(9, HIGH); delayMicroseconds(10);
digitalWrite(9, LOW);
duration = pulseIn(10, HIGH);
distance = duration * 0.034 / 2;
// ESP로 TCP 연결 후 HTTP GET 전송
esp.println("AT+CIPSTART=\"TCP\",\"YOUR_SERVER_IP\",80"); response(5000);
esp.println("AT+CIPSEND=80"); response(2000);
esp.print("GET /your_php_script.php?distance=");
esp.print(distance);
esp.println("\r\nabcd1234"); response(5000);
}
void response(int waitTime) {
for (int i=0; i
4단계: 서버 사이드 (PHP + MySQL)
- 데이터 삽입 PHP: `$_GET['distance']` 수신 → MySQL INSERT
- 데이터 표시 PHP: DB에서 최신 값 조회 → HTML 테이블/그래프 출력
- DB 테이블: `id`, `distance`, `timestamp` 컬럼
5단계: 테스트 및 향후 계획
- 보드레이트(9600) 일치 필수, ESP 에러 시 재설정
- 안드로이드 앱 및 웹 GUI 대시보드 추후 공개 예정 (깃허브 참고)
깃허브 저장소
전체 코드 및 README: https://github.com/santynaren/iotsmartjar