nRF54L15

zephyr dht11 driver 사용하기

병남 2025. 9. 21. 01:01

zephyr rtos 동작환경에서 dht11 센서를 사용하는 sample 코드를 검색했는데 찾지 못해서 만들었습니다.

 

zephyr에는 dht드라이버가 포함되어 있는데 아래 경로에서 찾을 수 있습니다. 

zephyr/drivers/sensor/aosong/dht

 

동작환경

zephyr OS : v4.0.99

nRF Connect SDK v3.0.1

 

동작로그

 

개발환경 

nRF54L15-DK Board + DHT11 sensor

 

prj.conf

# 센서 API 활성화
CONFIG_SENSOR=y
# DHT 드라이버 활성화
CONFIG_DHT=y
# printk() 함수를 사용하기 위한 설정
CONFIG_PRINTK=y
# printk() 함수에서 부동소수점을 출력하기 위한 설정
CONFIG_CBPRINTF_FP_SUPPORT=y

 

app.overlay ( """""" dio-gpios 설정값 주의"""""")

/ {
    /* 1. C 코드에서 'dht0'라는 별칭으로 쉽게 접근할 수 있도록 설정합니다. */
    aliases {
        dht0 = &dht;
    };

    /* 2. DHT 센서 장치를 정의합니다. */
    dht: dht_sensor {
        compatible = "aosong,dht";
        dio-gpios = <&gpio1 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
        status = "okay";
    };
};

 

main.c

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/sys/printk.h>

/* DeviceTree 별칭 'dht0'로부터 센서 디바이스 구조체를 가져옵니다. */
static const struct device *dht_dev = DEVICE_DT_GET(DT_ALIAS(dht0));

int main(void)
{
    /* 1. 센서 장치가 준비되었는지 확인합니다. */
    if (!device_is_ready(dht_dev)) {
        printk("Error: DHT sensor is not ready.\n");
        printk("Please check the overlay file and prj.conf settings.\n");
        return 0;
    }

    printk("✅ Starting the DHT sensor example on the nRF54L15-DK\n");
    printk("----------------------------------------\n");

    while (1) {
        /* 2. 센서로부터 새로운 데이터를 가져옵니다. */
        if (sensor_sample_fetch(dht_dev) != 0) {
            printk("Error: Failed to retrieve sensor data. Please check your connection.\n");
            k_sleep(K_SECONDS(2));
            continue;
        }

        /* 3. 필요한 데이터 채널(온도, 습도)의 값을 읽어옵니다. */
        struct sensor_value temp, humidity;

        sensor_channel_get(dht_dev, SENSOR_CHAN_AMBIENT_TEMP, &temp);
        sensor_channel_get(dht_dev, SENSOR_CHAN_HUMIDITY, &humidity);

        /* 4. 결과를 콘솔에 출력합니다. (sensor_value_to_double 함수 사용) */
        printk("temperature: %.2f C\n", sensor_value_to_double(&temp));
        printk("humidity: %.2f %%\n", sensor_value_to_double(&humidity));
        printk("----------------------------------------\n");

        /* DHT 센서는 응답이 느리므로 최소 2초 이상 대기합니다. */
        k_sleep(K_SECONDS(3));
    }
    return 0;
}

 

빌드 후 flash하면 아래와 같이 동작하는 것을 확인할 수 있습니다.

 

동작영상

 

 

'nRF54L15' 카테고리의 다른 글

zephyr pms7003 driver 사용하기  (0) 2025.09.22