

집에 온도계가 부족한 것은 아니지만, 한동안 실외 온도계도 갖고 싶었습니다. Inkbird에서 나온 유망한 Bluetooth 실외 온도계를 찾았지만, 사용해 보니 능동적으로 폴링해야만 하고 데이터를 수동적으로 전송하지 않는다는 것을 알게 되었습니다.
그렇다면 둘의 차이는 무엇일까요? 주로 전력 소비의 차이입니다. 이에 대해서는 나중에 더 자세히 설명하겠습니다.
간단히 말해, 얼마간 찾아본 끝에 다음을 발견했습니다. nRF52840 칩은 64 MHz Cortex-M4F로, RAM 256 KB와 플래시 메모리 1 MB를 갖추고 있으며 이론적으로 Bluetooth, Zigbee, Thread 통신도 지원할 수 있습니다. 결국 아래 사진과 같은 온도계를 만들었습니다.


센서로는 기상 관측소에서 흔히 사용하는 I2C 연결 센서인 BME280을 선택했습니다. 온도와 습도뿐만 아니라 기압도 측정하기 때문입니다. 또한 1.8–3.6 V 전원으로 작동할 수 있고, 측정 모드에 따라 몇 마이크로암페어만 소비합니다.
하지만 그마저도 제가 원한 것보다 많았기 때문에 배터리에 직접 연결하는 대신, nRF 칩의 GPIO 중 하나(P1.00)에 전원을 연결했습니다. GPIO는 표준 드라이브 세기에서 최대 4 mA를 처리할 수 있으므로 문제가 발생하지 않습니다. 그 대신 온도계는 nRF 칩 자체가 깨어 있고 소프트웨어가 해당 GPIO를 활성화했을 때만 전력을 소비합니다.
nRF52840 데이터시트에 따르면 칩은 저전력 SYSTEM ON 모드에서 약 3 마이크로암페어를 소비하며, 덜 낙관적인 서드파티 자료에서도 5 마이크로암페어 미만으로 설명합니다. 물론 무선 송신이 시작되면 칩이 잠시 약 15 mA를 소비할 수 있지만, 3분에 한 번씩 짧은 데이터 전송을 위해서만 깨우면 제 용도에는 충분하다고 판단했습니다.
이제 컨트롤러가 연결할 대상을 기다리며 계속 활성 상태로 남아 있기를 원하지 않았던 이유가 분명해질 것입니다. 대신 주기적으로 깨어나 짧은 BLE 광고로 데이터를 브로드캐스트합니다.
사진에 보이는 Supermini 보드에서는 GPIO P0.13을 비활성화하면 온보드 LDO도 비활성화되며, 시작 과정에서 P0.15에 연결된 빨간색 LED도 비활성화합니다. 이렇게 해서 보드의 불필요한 추가 전력 소비를 성공적으로 제거했다고 생각합니다.
일반적인 CR123A 배터리의 정격 용량은 약 1500 mAh이므로, 모든 것을 제대로 구성했다면 수년 동안 배터리를 교체하지 않아도 될 것입니다.
또 다른 흥미로운 세부 사항이 있습니다. 3.7 V 배터리를 연결하지 않은 채 USB로 보드에 전원을 공급하면 파란색 LED가 계속 깜박이며 비활성화할 수 없습니다. 다행히 VDD를 통해 보드에 직접 전원을 공급할 때는 이런 현상이 발생하지 않습니다.
배터리 이야기가 나온 김에 덧붙이자면, 이 보드는 원래 3.7 V 배터리로 전원을 공급하도록 특별히 설계되었습니다. 하지만 전압 변환으로 인한 손실을 없애기 위해 대신 직접 3 V 전원을 사용하기로 했습니다(전압 변환은 열도 발생시킵니다). 그리고 배터리를 자주 교체하고 싶지 않았기 때문에 일반적인 CR2032 대신 사진에 보이는 더 큰 CR123A를 선택했습니다.
하지만 한 가지 문제가 있습니다. Supermini 보드에는 이것을 연결할 핀이 없습니다……적어도 측면에는 없습니다. 하지만 보드를 뒤집으면 하단에 작은 패드가 있으며 이 패드에서 VDD가 노출됩니다. 따라서 안정적인 3 V 전원을 이곳에 연결해도 아무 문제 없이 사용할 수 있습니다.
다만 이 연결은 어떠한 보호 회로도 거치지 않고 칩에 직접 연결된다는 점을 기억하세요!
또한 P0.13을 비활성화할 때 다음 부품 때문에 상당한 누설 전류가 발생하는 불량 Supermini 보드 배치가 있다는 점도 언급할 가치가 있습니다. 5.6 kΩ 풀업 저항. VDDH를 통해 3.7 V로 보드에 전원을 공급하면 이 저항으로 인해 배터리에 최대 700 µA의 부하가 걸릴 수 있습니다. 이 경우 저항을 제거하거나 10 MΩ 저항으로 교체해야 합니다.
하지만 저는 VDD를 통해 칩에 직접 전원을 공급하므로 이 특정 문제는 제 회로에 영향을 주지 않습니다.

노르웨이 기업 Nordic Semiconductor가 제조하는 nRF52 제품군은 Wi-Fi용이 아니라 BLE와 저전력 2.4 GHz 무선 통신을 위한 제품입니다. 전력 소비가 매우 낮기 때문에 배터리로 구동되는 애플리케이션에는 중국산 ESP32 솔루션보다 더 적합한 선택입니다.
ZephyrOS를 통해 소프트웨어 지원도 ESPHome에 추가되었지만, 제가 확인한 바로는 현재 Zigbee 스택과 몇 가지 간단한 센서 유형만 지원하는 것 같습니다.
하지만 그것이 저를 막지는 못했습니다. 위에서 설명한 동작을 구현하는 간단한 커스텀 프로그램을 작성했습니다. PlatformIO로 컴파일할 수 있는 FreeRTOS 기반 프로젝트입니다:
https://github.com/enesbcs/iotdiysensor/tree/main/n52btemp
프로그램을 플래시하는 데 특별한 프로그래머는 필요하지 않습니다. USB를 통해 보드를 컴퓨터에 연결한 뒤, RESET과 GND 사이에 연결된 버튼을 빠르게 두 번 누르면 됩니다. 그러면 다음 이름의 드라이브가 나타납니다: NICENANO 이제 firmware.uf2 파일을 그 드라이브에 복사하기만 하면 됩니다. (이 과정은 Raspberry Pi Pico에서 일반적으로 사용하는 방법과 비슷합니다.)
프로그램 자체는 매우 간단합니다. 배터리 수명을 최대화하기 위해 가능한 모든 기능을 제외했기 때문에 OTA 지원은 구현하지 않았습니다.
따라서 연결하거나 검색할 수 있는 Bluetooth 서비스는 없습니다. 보드가 무선 기능과 마찬가지로 대부분의 시간을 절전 상태로 보내기 때문입니다. 3분마다 깨어나 31바이트 이하의 짧은 BLE 광고 패킷을 브로드캐스트한 다음 다시 절전 상태로 들어갑니다.
이 패킷의 구조는 다음 표준에 따라 구성했습니다: BTHome v2 표준(Shelly 장치에서도 사용하는 표준). Home Assistant에서는 자체 BTHome 통합 또는 Passive BLE Monitor 컴포넌트를 통해 이를 지원합니다.



하드웨어와 소프트웨어를 모두 살펴보았으니, 사실 적합한 실외용 인클로저를 먼저 구입한 다음 그에 맞춰 하드웨어를 설계했다는 점을 인정할 때가 되었습니다.
조사한 끝에 Stevenson screen을 선택했습니다. 예를 들어 allegro.pl에서는 "Stevenson outdoor temperature sensor enclosure"라는 이름으로 찾을 수 있으며, 자외선에 강한 ASA 플라스틱으로 3D 프린팅되어 있습니다.
3D 프린터와 ASA 필라멘트가 있다면 누구나 비슷한 제품을 직접 출력할 수 있습니다. 저는 9 EURO를 주고 구입했으며, 가장 작은 4단 버전을 선택했습니다.
기본 원리는 슬랫 사이로 공기가 자유롭게 순환하도록 하는 것입니다. 바닥은 거의 완전히 개방되어 있고, 흰색은 태양 복사 에너지의 대부분을 반사합니다.
설치 위치도 중요합니다. 직사광선을 피할 수 있는 그늘지고 통풍이 잘되는 곳에 설치해야 하며, 가능하면 벽에 바로 붙이지 않는 것이 좋습니다.
이 인클로저의 실제 사용 가능한 내부 높이는 5 cm에 불과하므로, 5 × 7 cm 크기의 프로토타입 보드를 5 × 5 cm로 잘라 문제없이 내부에 들어가도록 했습니다.
따뜻한 공기는 위로 올라가기 때문에 온도계를 가장 아래쪽에 배치했습니다. 따라서 칩이나 배터리에서 발생하는 열이 온도 측정에 미치는 영향이 거의 없을 것입니다.
보시다시피 길이 67 mm인 18650 배터리는 내부에 들어가지 않습니다. 이것이 다른 전원 솔루션을 찾기 시작한 이유 중 하나였습니다.
18650 배터리를 사용하려면 이 인클로저의 더 큰 7단 버전을 권장합니다. 이 버전은 높이가 이미 9 cm입니다.
4단 버전은 사실 완성된 실내용 온도계를 실외에서 사용할 때 보호할 수 있도록 설계되고 치수가 정해진 제품입니다. 예를 들면 다음과 같습니다:
Aqara LYWSD03MMC, WSDCGQ11LM, Sonoff SNZB-02, SNZB-02WD, SNZB-02P
이제 다음과 같은 의문이 생깁니다. 인클로저가 간단한 프로토타입 보드를 비와 자외선으로부터 보호해 주기는 하지만, 정말 그것만으로 충분할까요?
nRF52840과 BME280의 작동 온도 범위는 모두 -40~+85 °C이며, 일반적인 CR123A 리튬 배터리의 정격 온도 범위는 -40~+60 °C입니다.
납땜 부위에는 -40~+60 °C의 온도 범위에 대해 정격이 지정된 부식 방지 보호 코팅제를 발랐습니다. 이 문제에 관해 제가 더 할 수 있는 일은 많지 않습니다.
물론 이것은 여전히 IP67 등급의 산업용 온도계는 아닙니다. 실외 사용에 최적화한 DIY 솔루션이므로, 장기적으로 얼마나 신뢰할 수 있을지는 시간이 지나야 알 수 있습니다.
향후 개선 가능 사항: 18650 배터리를 장착할 수 있는 더 큰 Stevenson screen, 온도계와 함께 사용하는 자외선 및 조도 센서, 그리고 5 V 강압 컨버터를 통해 USB 입력에 연결하는 12 V 태양광 패널.

설치 다음 날 배터리 전압은 3.22 V에서 3.05 V로 떨어졌습니다. 3일째에는 약 3 V 부근에서 안정되었습니다.
10일간 작동한 후에도 아래 그래프에 표시된 것처럼 전압은 큰 추가 감소 없이 여전히 3 V 부근에서 변동하고 있습니다. 이는 딥 슬립 상태의 전력 소비가 실제로 예상만큼 낮으며, 배터리가 매우 오랜 시간 작동할 수 있음을 시사합니다.
원문: https://www.instructables.com/DIY-Outdoor-BLE-Thermometer/