
본문 계속 1/1
STEP 8. ESP32에 코드 업로드하기







코드를 준비하고 이해한 후, ESP32 를 Arduino IDE를 사용해 프로그래밍했습니다. 프로그램을 업로드하기 전에 필요한 ESP32 보드 패키지, USB 드라이버 및 프로젝트에 필요한 라이브러리를 설치했습니다.
💻 필요한 소프트웨어
- Arduino IDE
- ESP32용 코드를 작성하고, 컴파일하고, 업로드하는 데 사용됩니다.
- 컴퓨터와 호환되는 최신 Arduino IDE 버전을 설치합니다.
🔧 ESP32 보드 패키지
- 다음 항목을 엽니다: Arduino IDE.
- 다음으로 이동합니다: File → Preferences.
- 다음 항목을 찾습니다: Additional Boards Manager URLs.
- 공식 Espressif ESP32 패키지 URL을 추가합니다:
- 다음을 클릭합니다: OK.
- 다음으로 이동합니다: Tools → Board → Boards Manager.
- 다음을 검색합니다: esp32.
- 다음을 설치합니다: esp32 by Espressif Systems.
- 설치 후 다음 경로에서 적절한 ESP32 보드를 선택합니다:
- Tools → Board → ESP32 Arduino.
🔌 USB 드라이버
ESP32 개발 보드에서 사용하는 USB-Serial 칩에 따라 적절한 드라이버가 필요할 수 있습니다.
일반적인 USB-Serial 드라이버는 다음과 같습니다:
- CP210x USB to UART Driver
- CH340/CH341 USB Driver
- FTDI Driver — 특정 보드에서 FTDI 인터페이스를 사용하는 경우에만 필요합니다.
적절한 드라이버를 설치한 후:
- 다음과 같은 데이터 전송이 가능한 USB 케이블을 사용해 ESP32를 컴퓨터에 연결합니다.
- 다음 항목을 엽니다: Device Manager (Windows).
- 다음을 확인합니다: Ports (COM & LPT).
- ESP32에 할당된 COM 포트를 확인합니다.
📚 필요한 Arduino 라이브러리
LUNARA 코드는 다음 라이브러리를 사용합니다:
- WiFi
- ESP32를 Wi-Fi 네트워크에 연결하는 데 사용됩니다.
- ESP32 Arduino 보드 패키지에 포함되어 있습니다.
- WebServer
- ESP32에서 직접 호스팅되는 웹 서버를 만드는 데 사용됩니다.
- ESP32 Arduino 코어에 포함되어 있습니다.
- Adafruit NeoPixel
- 다음을 제어하는 데 사용됩니다: 개별적으로 주소를 지정할 수 있는 NeoPixel LED 27개.
- Adafruit GFX Library
- OLED 디스플레이에 필요한 그래픽 기능을 제공합니다.
- Adafruit SSD1306
- 다음을 제어하는 데 사용됩니다: 128×64 SSD1306 OLED 디스플레이.
- Time
- 시간 동기화 및 시간 관련 기능에 사용됩니다.
- Math
- 달의 위상 계산에 필요한 수학적 계산에 사용됩니다.
실제 LUNARA 코드에서 사용되는 라이브러리는 프로젝트 소스 파일의 시작 부분에서 확인할 수 있습니다.
📦 라이브러리 설치
ESP32 코어에 포함되지 않은 라이브러리의 경우:
- 다음을 엽니다: Arduino IDE.
- 다음으로 이동합니다: Tools → Manage Libraries.
- 다음을 검색합니다: Adafruit NeoPixel.
- 설치합니다.
- 다음을 검색합니다: Adafruit GFX Library.
- 설치합니다.
- 다음을 검색합니다: Adafruit SSD1306.
- 설치합니다.
- 필요한 경우 Arduino IDE를 다시 시작합니다.
⚙️ ESP32 선택
보드를 연결한 후:
- 다음으로 이동합니다: Tools → Board.
- 사용 중인 ESP32 보드 모델을 선택합니다.
- 다음으로 이동합니다: Tools → Port.
- ESP32에 해당하는 COM 포트를 선택합니다.
- 나머지 설정은 선택한 보드와 표준 ESP32 구성에 맞게 유지합니다.
⬆️ 코드 업로드
- 다음 파일을 엽니다: LUNARA .ino 파일 Arduino IDE에서.
- 필요한 모든 라이브러리가 설치되어 있는지 확인합니다.
- 올바른 ESP32 보드를 선택합니다.
- 올바른 COM 포트를 선택합니다.
- 다음을 클릭합니다: Verify 를 클릭하여 프로그램을 컴파일하고 오류를 확인합니다.
- 컴파일이 성공하면 Upload를 클릭합니다.
- 컴파일 및 업로드 과정이 완료될 때까지 기다립니다.
- IDE에서 ESP32를 다운로드/부트 모드로 전환하라는 메시지가 표시되면, 업로드가 시작되는 동안 BOOT 버튼을 길게 누른 다음 프로그래밍이 시작되면 버튼을 놓습니다.
- 업로드가 완료되면 ESP32를 다시 시작합니다.
💡 팁: ESP32가 컴퓨터에서 감지되지 않으면 먼저 USB 케이블을 확인한 다음, 사용 중인 ESP32 보드에 맞는 USB-시리얼 드라이버를 설치합니다.
STEP 9. 연결 이해하기

ESP32에 코드를 업로드한 후 다음 단계는 모든 전자 부품이 어떻게 연결되어 있는지 이해하는 것입니다. 배선은 ESP32가 27개의 NeoPixel LED와 OLED 디스플레이를 제어할 수 있도록설계되었으며, 배터리와 충전 회로가 휴대용 전원을 제공합니다.
🔌 주요 연결
1. ESP32 → NeoPixel LED
- ESP32 GPIO 5 → NeoPixel DIN (데이터 입력)
- ESP32 GND → NeoPixel GND
- 5V 전원 → NeoPixel 5V/VCC
- NeoPixel은 데이터 체인으로 연결되어 있으며, 데이터 신호는 한 LED에서 다음 LED로 전달됩니다.
- ESP32는 단일 데이터 라인을 통해 모든 27개의 LED를 개별적으로 제어합니다.
코드는 GPIO 5를 LED 데이터 핀으로 정의하고 LED 개수를 27개로 설정합니다.
2. ESP32 → OLED 디스플레이
SSD1306 OLED는 I2C를 사용하여 ESP32와 통신합니다.
- OLED VCC → ESP32 전원
- OLED GND → ESP32 GND
- OLED SDA → ESP32 GPIO 21
- OLED SCL → ESP32 GPIO 22
코드는 특히 SDA에 GPIO 21을 사용하도록 설정하고 SCL에 GPIO 22를 사용하도록설정합니다.
3. Li-Po 배터리 → TP4056
Li-Po 배터리는 TP4056 충전 모듈 에 연결되어 충전 및 배터리 관리를 수행합니다.
TP4056을 사용하면 충전 입력을 통해 Li-Po 배터리를 충전할 수 있습니다.
⚠️ 중요: TP4056은 Li-Po 충전 모듈이며, 자체적으로 배터리 전압을 안정화된 5 V 출력으로 변환하지는 않습니다 . NeoPixel에 단일 셀 Li-Po의 전원을 공급하는 경우, 실제 전원 경로에는 적절한 전압 조정/승압 회로가 포함되어야 합니다.
4. 슬라이드 스위치
슬라이드 스위치는 이 프로젝트의 주 전원을 제어하는 장치 로 사용됩니다.
이를 통해 배터리를 분리하지 않고도 전체 시스템을 켜거나 끌 수 있습니다.
🔗 전체 연결 흐름
🧠 모든 구성 요소가 함께 작동하는 방식
- 다음은 배터리 는 휴대용 전원을 제공합니다.
- TP4056 은 Li-Po 배터리의 충전을 관리합니다.
- 슬라이드 스위치는 주 전원을 제어하는 장치이며 시스템 전원을 제어합니다.
- 중앙 컨트롤러 역할을 하는 것은 ESP32 입니다.
- GPIO 5 는 27개의 NeoPixel로 데이터를 전송합니다.
- GPIO 21 및 22 는 I2C를 통해 OLED와 통신합니다.
- OLED에는 시간과 현재 달의 위상이 표시됩니다.
- NeoPixel은 달의 조명과 애니메이션을 제공합니다.
- Wi-Fi를 사용하면 ESP32의 웹 인터페이스 를 통해 조명을 제어할 수 있습니다.
코드에서 다음 하드웨어 구성이 확인됩니다: GPIO 5에 연결된 27개의 LED 및 다음에 연결된 OLED: SDA 21 / SCL 22.
STEP 10. 인클로저에 모든 부품 조립하기












시멘트로 만든 달이 완전히 마르고 모든 전자 부품이 준비되면, 3D 프린팅 인클로저 안에 모든 부품을 이미지에 표시된 것과 정확히 같은 방식으로조립합니다.
- NeoPixel 스트립 설치:
- 27-LED NeoPixel 스트립을 달 트레이/인클로저의 지정된 안쪽 가장자리를 따라 단단히 부착합니다. LED가 일정한 간격으로 배치되고 확실히 고정되었는지 확인합니다.
- 연결 와이어 배선:
- NeoPixel 연결 와이어를 인클로저에 마련된 구멍으로통과시킵니다. 이미지에 표시된 것처럼 배선이 정돈되고 연결부가 내부의 전자 부품까지 닿도록 하는 과정입니다.
- ESP32 장착:
- 인클로저 내부의 지정된 위치에 ESP32를 놓고 단단히 고정합니다.
- 부품 고정:
- 다음과 같은 것을 사용합니다: M2 나사 및/또는 적합한 접착제 를 사용하여 전자 부품을 제자리에 고정합니다. 이 프로젝트에서는 M2 나사와 접착제를 모두 사용했으며, 부품과 장착 위치에 따라 달리 적용했습니다.
- 배터리 배치:
- 500 mAh Li-Po 배터리를 인클로저 내부에 단단히 배치하고, 날카로운 모서리와 나사에서 멀리 떨어뜨려 놓습니다.
- OLED 디스플레이 설치:
- 인클로저 전면의 개구부에 OLED 모듈을 고정하여 외부에서 디스플레이가 잘 보이도록 합니다.
- 슬라이드 스위치 설치:
- 슬라이드 스위치를 지정된 개구부에 배치하여 외부에서 쉽게 조작할 수 있도록 합니다.
- 배선 정리:
- 사용 가능한 채널과 개구부를 통해 모든 전선을 주의 깊게 배선하고 정리합니다. 인클로저를 조립했을 때 전선이 눌리거나 막히지 않도록 합니다.
- 참조 이미지 따르기:
- 모든 부품을 이미지에 표시된 것과 동일한 위치, 방향 및 배열로 조립합니다. 이미지를 ESP32, 배터리, OLED, 슬라이드 스위치, NeoPixel 스트립, 배선 및 기타 부품의 배치를 위한 주요 참조 자료로 사용합니다.
- 최종 점검:
- 인클로저를 완전히 닫기 전에 시스템 전원을 켜고 OLED, NeoPixel LED, ESP32 및 조작부가 올바르게 작동하는지 확인합니다. 모든 것이 확인되면 인클로저를 고정하고 조립을 완료합니다.
STEP 11. Moon 조립 및 고정




시멘트로 만든 Moon이 완전히 건조되면 Moon을 인클로저에 단단히 고정한 다음 인클로저를 베이스에 부착합니다.
- 인클로저 내부에 Moon 고정:
- 건조된 Moon을 Moon 인클로저 내부의 지정된 위치에 조심스럽게 배치합니다.
- 순간접착제 도포:
- 다음 위치에 순간접착제 를 도포하여 Moon을 고정합니다. 특히 LED 스트립이 부착된 주변의 접촉 지점에 바릅니다.
- 고정하는 동안 기다리기:
- 시멘트로 만든 Moon은 상당히 무거우므로 서두르지 말고 인내심을 가지세요 . 접착제가 굳는 동안 Moon을 제자리에 단단히 잡고, 이동하기 전에 접착제가 제대로 결합되도록 기다립니다.
- 정렬 확인:
- Moon을 고정한 후 제대로 정렬되어 있고 인클로저에 단단히 고정되어 있는지 확인합니다. 또한 LED 스트립과 배선이 올바른 위치에 그대로 있는지 확인합니다.
- Moon 인클로저를 베이스에 고정:
- Moon이 인클로저 내부에 단단히 고정되면 Moon 인클로저를 3D 프린트 베이스에부착합니다. 베이스에 맞게 정렬하고 단단히 고정합니다.
- 최종 검사:
- Moon이 안정적인지, 인클로저가 베이스에 단단히 부착되어 있는지, 프로젝트를 다룰 때 아무것도 움직이거나 헐거워지지 않는지 전체 조립 상태를 확인합니다.
STEP 12. 사용 및 상호작용 방법

LUNARA를 완전히 조립한 후 다음 단계에 따라 장치를 사용하고 조작합니다.
- 장치 켜기:
- 전원 스위치를 ON 위치로 밀어 이동합니다. ESP32가 시스템을 시작합니다.
- 시작 화면:
- 처음 8초동안 OLED에 장치의 IP 주소가 표시됩니다. 동시에 27개의 NeoPixel LED가 자동으로 따뜻한 흰색 Moonlight로 켜집니다.
- Moon 정보 표시:
- 8초 후 OLED에는 현재 시각과 Moon의 위상및 해당 Moon 위상 그래픽이 표시됩니다.
- 웹 서버에 접속:
- 휴대폰, 노트북 또는 컴퓨터를 LUNARA와 동일한 Wi-Fi 네트워크 에 연결하세요. 웹 브라우저를 열고 다음을 입력하세요: OLED에 표시된 IP 주소.
- Moonlight 제어:
- 웹 서버는 다음 항목을 제어할 수 있는 대화형 제어 패널을 제공합니다:
- 다양한 Moonlight 색조
- 밝기 수준
- LED 애니메이션
- 개별 LED 색상
- 27개의 LED를 개별적으로 모두 제어:
- 각각의 27개 NeoPixel LED를 개별적으로 제어할 수 있어, 나만의 맞춤형 Moonlight 패턴과 색상 조합을 만들 수 있습니다.
- 다양한 효과 실험:
- 서로 다른 색조, 밝기 수준, 애니메이션을 사용해 LUNARA의 다양한 모습을 연출하고 시멘트 Moon에 역동적인 발광 효과를 더해 보세요.
STEP 13. 결론 — 이것이 중요한 이유


LUNARA는 단순한 장식용 Moon 램프가 아닙니다. 이 작품은 수작업으로 만든 시멘트 예술, 3D 프린팅, 전자공학, 프로그래밍, IoT, 천문학 을 하나의 인터랙티브 프로젝트로 결합합니다.
이 프로젝트는 시멘트와 같은 평범한 재료가 기술을 통해 어떻게 역동적이고 표현력 있는 무언가로 변할 수 있는지 보여 줍니다. 프로그래밍 가능한 조명을 통해 Moon의 모습을 바꿀 수 있으며, ESP32는 시간과 달의 위상을 추적합니다.
무엇보다 중요한 것은 LUNARA가 모든 위상에는 저마다의 아름다움이 있다는 생각을 나타낸다는 점입니다. Moon처럼 우리도 항상 같은 강도로 빛날 필요는 없습니다. 변화는 여정의 자연스러운 일부입니다.
“Moon은 별을 향한 길의 첫 번째 이정표다.” — Arthur C. Clarke
🌕 마지막으로 전하고 싶은 말
“가장 어두운 밤에도 Moon은 언제나 빛날 작은 빛이 기다리고 있음을 일깨워 줍니다.”
LUNARA — 살아 있는 Moon
시멘트로 주조하고, 빛으로 생명을 불어넣다.
💡 아이디어가 있나요?
이 프로젝트는 훨씬 더 발전시킬 수 있으며, 여러분의 아이디어를 듣고 싶습니다!
만약 새로운 기능, 개선 사항 또는 LUNARA를 더욱 발전시킬 창의적인 방법을 생각하셨다면, 댓글 섹션에 공유해 주세요.
비슷한 것을 이미 만들어 보셨다면, 여러분의 프로젝트도 꼭 보고 싶습니다!
댓글 섹션은 여러분의 공간입니다! 🌕
또 LUNARA를 만드는 동안 어디선가 막히는 부분이 있다면, 댓글로 편하게 질문해 주세요. 문제를 해결하고 함께 방법을 찾아보도록 기꺼이 도와드리겠습니다.
이전에 비슷한 것을 만들어 본 적이 있나요? LUNARA가 다음에 무엇을 해야 할지에 대한 아이디어가 있나요? 아래에 알려 주세요!






























