From f2638dddce4f21c210f04f5e33d0a916929cf1ea Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Wed, 9 Apr 2025 17:51:28 +0200 Subject: [PATCH] init pms5003 lib --- CmakeLists.txt | 2 +- node1.c | 30 +++++++++++++++++++++++------- pms5003.c | 33 +++++++++++++++++++++++++++++++++ pms5003.h | 20 ++++++++++++++++++++ 4 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 pms5003.c create mode 100644 pms5003.h diff --git a/CmakeLists.txt b/CmakeLists.txt index 7dcb1ad..412eef0 100644 --- a/CmakeLists.txt +++ b/CmakeLists.txt @@ -19,7 +19,7 @@ pico_sdk_init() # the executable -add_executable( node1 node1.c bme280.c ) +add_executable( node1 node1.c bme280.c pms5003.c ) pico_set_program_version(node1 "0.1") pico_set_program_name(node1 "node_one") diff --git a/node1.c b/node1.c index 371aa11..258bb9e 100644 --- a/node1.c +++ b/node1.c @@ -1,21 +1,37 @@ +#include #include #include #include "pico/stdlib.h" #include "bme280.h" - - +#include "pms5003.h" int main() { stdio_init_all(); + + // Setup BME280 bme280_config config; bme280_init(&config, i2c1, 14, 15); - bme280_reading current_reading; + bme280_reading current_bem280_reading; + + // Setup PMS5003 + pms5003_config pms_config; + pms5003_init(&pms_config, uart1, 20, 21); + pms5003_reading current_pms5003_reading; + while (true) { sleep_ms(5000); // wait 5 sec printf("Making reading\n"); - current_reading = bme280_read(&config); - printf("Tempature: %.2f\n", current_reading.temperature); - printf("Pressure: %.2f\n", current_reading.pressure); - printf("Humidity: %.2f\n", current_reading.humidity); + + // Read BME280 + current_bem280_reading = bme280_read(&config); + printf("Tempature: %.2f\n", current_bem280_reading.temperature); + printf("Pressure: %.2f\n", current_bem280_reading.pressure); + printf("Humidity: %.2f\n", current_bem280_reading.humidity); + + // Read PMS5003 + current_pms5003_reading = pms5003_read(&pms_config); + printf("PM1: %.2f\n", current_pms5003_reading.pm1); + printf("PM2.5: %.2f\n", current_pms5003_reading.pm2_5); + printf("PM10: %.2f\n", current_pms5003_reading.pm10); } } diff --git a/pms5003.c b/pms5003.c new file mode 100644 index 0000000..5dba5d6 --- /dev/null +++ b/pms5003.c @@ -0,0 +1,33 @@ +#include "pms5003.h" +#include "hardware/uart.h" +#include "pico/stdlib.h" +#include +#include + +/** +Lib for Plantower PMS5003 Particulate Matter (PM) Sensor + +Detects PM1, PM2.5, PM10 particulates + +Sourcces: + - +https://shop.pimoroni.com/products/pms5003-particulate-matter-sensor-with-cable + - https://github.com/pimoroni/pms5003-python/blob/main/pms5003/__init__.py + - https://github.com/vogelrh/pms5003c/tree/master +*/ + +void pms5003_init(pms5003_config *new_config, uart_inst_t *uart, uint8_t tx_pin, + uint8_t rx_pin) { + uart_init(uart, 9600); + gpio_set_function(tx_pin, UART_FUNCSEL_NUM(uart, tx_pin)); + gpio_set_function(rx_pin, UART_FUNCSEL_NUM(uart, rx_pin)); + new_config->uart = uart; +} + +pms5003_reading pms5003_read(pms5003_config *config) { + pms5003_reading reading; + reading.pm1 = 0; + reading.pm2_5 = 0; + reading.pm10 = 0; + return reading; +} diff --git a/pms5003.h b/pms5003.h new file mode 100644 index 0000000..16cc66a --- /dev/null +++ b/pms5003.h @@ -0,0 +1,20 @@ +#ifndef PMS5003_H +#define PMS5003_H +#include "hardware/uart.h" +#include + +typedef struct { + float pm1; + float pm2_5; + float pm10; +} pms5003_reading; + +typedef struct { + uart_inst_t *uart; +} pms5003_config; + +void pms5003_init(pms5003_config *config, uart_inst_t *uart, uint8_t tx_pin, + uint8_t rx_pin); + +pms5003_reading pms5003_read(pms5003_config *config); +#endif /* PMS5003_H */