pms7003 공기질센서 드라이버는 아래 경로에서 찾을 수 있습니다.
zephyr/drivers/sensor/pms7003
동작환경
zephyr OS : v4.0.99
nRF Connect SDK v3.0.1
동작로그
개발환경
nRF54L15-DK Board + pms7003 sensor
prj.conf
# General kernel settings
CONFIG_PRINTK=y
CONFIG_MAIN_STACK_SIZE=2048
# Enable the sensor subsystem and the PMS7003 driver
CONFIG_SENSOR=y
CONFIG_PMS7003=y
# PMS7003 uses UART
CONFIG_SERIAL=y
# Enable interrupt-driven UART communication
CONFIG_UART_INTERRUPT_DRIVEN=y
# Enable floating point support for printf to display sensor values
CONFIG_CBPRINTF_FP_SUPPORT=y
# Enable Sensor Debug Log
CONFIG_LOG=y
CONFIG_SENSOR_LOG_LEVEL_DBG=y
app.overlay
/{
aliases {
pms0 = &pms7003;
};
};
&uart21 {
compatible = "nordic,nrf-uarte";
current-speed = <9600>;
status = "okay";
pinctrl-0 = <&uart21_default>;
pinctrl-1 = <&uart21_sleep>;
pinctrl-names = "default", "sleep";
pms7003:pms7003 {
compatible = "plantower,pms7003";
label = "PMS7003";
status = "okay";
};
};
&pinctrl {
uart21_default: uart21_default {
group1 {
psels = <NRF_PSEL(UART_TX, 1, 11)>,
<NRF_PSEL(UART_RX, 1, 12)>;
};
};
uart21_sleep: uart21_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 1, 11)>,
<NRF_PSEL(UART_RX, 1, 12)>;
low-power-enable;
};
};
};
main.c
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/sys/printk.h>
#include <stdio.h>
static const struct device *pms_dev = DEVICE_DT_GET(DT_ALIAS(pms0));
/* sensor_value를 double로 변환하여 출력하는 헬퍼 함수 */
static void print_sensor_value(const char *name, const struct sensor_value *val)
{
printk("%s: %.2f ug/m3\n", name, sensor_value_to_double(val));
}
int main(void)
{
if (!device_is_ready(pms_dev)) {
printk("PMS7003 sensor device not ready!\n");
return 1;
}
printk("PMS7003 Particulate Matter Sensor Sample (using alias)\n");
while (1) {
struct sensor_value pm1p0, pm2p5, pm10p0;
int ret;
/* 센서로부터 새로운 데이터를 가져옵니다. */
ret = sensor_sample_fetch(pms_dev);
if (ret) {
printk("Failed to fetch sample from PMS7003: %d\n", ret);
k_sleep(K_MSEC(200));
continue;
}
/* 각 채널(PM1.0, PM2.5, PM10)의 값을 읽어옵니다. */
sensor_channel_get(pms_dev, SENSOR_CHAN_PM_1_0, &pm1p0);
sensor_channel_get(pms_dev, SENSOR_CHAN_PM_2_5, &pm2p5);
sensor_channel_get(pms_dev, SENSOR_CHAN_PM_10, &pm10p0);
/* 읽어온 값을 출력합니다. */
print_sensor_value("PM 1.0", &pm1p0);
print_sensor_value("PM 2.5", &pm2p5);
print_sensor_value("PM 10.0", &pm10p0);
printk("----------------------------------------\n");
k_sleep(K_MSEC(100));
}
}
build & flash하면 아래와 같이 동작하는 것을 확인할 수 있습니다.
동작영상
'nRF54L15' 카테고리의 다른 글
zephyr dht11 driver 사용하기 (0) | 2025.09.21 |
---|