서론
엠비언트 라이트의 본격적인 제작에 앞서, H/W와 S/W 설계를 진행해보고자 합니다. H/W 부분에서는 차량과 연결될 전장 부분, Bluetooth로 제어를 담당할 ESP32, NeoPixel의 연결을 다룹니다. S/W 부분에서는 Bluetooth LE를 활용한 ESP32와 iOS 간의 통신, 그리고 데이터 구조를 다룰 예정입니다. 다음과 같은 기술적 요구사항을 가지고, 앞서 말한 내용들에 대한 간단한 설계를 진행해 보도록 하겠습니다.
Requirements
- (H/W) LED에 안정적인 전압(5 or 12V)을 공급시켜야 함
- (S/W) LED의 색은 전체적으로 제어하거나, 위치에 따라 개별적으로 제어할 수 있어야 하며, 서로 다른 색의 사이는 그래디언트 형태로 나타나야 함
- 가속도 센서에 따라 조명값을 제어할 수 있도록 해야 함(옵션)
H/W Wiring
이 부분에서는 NeoPixel의 사양에 대해 아직 정확히 정해진 바가 없어 표기가 어려운 면이 있습니다. 입력으로 5v 전원을 받는 WS2813 제품을 사용할 경우, 전원 입력 부에 5V DC 컨버터가 추가되며, 12V 전원을 받는 WS2815 제품을 사용할 경우 일단은.. 12v 전원을 그대로 받는 걸로 하겠습니다.
S/W Data Scheme
S/W는 Bluetooth 관련 연결과, 데이터를 어떻게 다룰 것인지를 정의합니다. iOS App에서 데이터를 수정함에 따라서, ESP32는 블루투스 정보를 받아 NeoPixel에 보내줍니다. 모든 데이터는 uint8(0-255)행태이며, Service와 Characteristic는 각각의 UUID를 가지고 있습니다. iOS App에서는 Service UUID를 통해 ESP32를 찾고, 연결한 후, 통신하고자 하는 Characteristics로 데이터를 보내줍니다. 여기서 Color 배열은 엠비언트 라이트를 단색으로, 일괄적으로 조절할지, 위치에 따라 개별로 제어할지 정의합니다. pos는 개별 제어를 원하는 led의 위치를 의미하며, num은 제어를 원하는 led를 지칭합니다.(시간적 문제로 일단은 최대 4가지 색깔까지 개별로 제어할 수 있도록 했습니다.) num이 0인 경우, LED의 색은 일괄적으로 변합니다.
마치며
기술적 요구사항에 따른 기본적인 설계가 완료되었습니다. 이제 애플리케이션을 개발하고, 펌웨어를 개발하고, 하드웨어 Wiring을 구현한 후, 실제로 설치까지 해 보도록 하겠습니다. 가장 큰 난관이 한 번도 경험해 보지 못한 iOS App으로 BLE를 사용하는 것이니, 어려운 것 부터 차근차근 해 보겠습니다. 감사합니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고 클릭으로 고마움을 간단히 표현할 수 있습니다.
개발환경(Desktop) | Ryzen 5900X, RTX 3080
개발환경(Laptop) | M1 MacBook Air / Mac OS 15.0 Monterey, Python 3.9, ESP-IDF v4.3, EasyEDA 6.4.24
개발환경(Jetson Nano) | JetPack 4.6[L4T 32.6.1], Python 3.6.9, PyTorch 1.8.0, torchvision 0.9.0, OpenCV 4.5.4
제품 개발 및 기타 문의 | dokixote@wklabs.io 혹은 오른쪽 아래 채팅을 통해 문의