get pms5003 working
", readings_index); "); "); "); "); ", "); ", "); "); "); "); "); "); "); "); "); "); "); ", link_status); ", link_status); "); ", readings[reading_i].pm1, readings[reading_i].pm2_5, readings[reading_i].pm10); ", reading_i);
This commit is contained in:
parent
9dd4ee4163
commit
0e513dc79a
2 changed files with 34 additions and 24 deletions
40
node1.c
40
node1.c
|
|
@ -101,6 +101,7 @@ int main() {
|
||||||
|
|
||||||
if (absolute_time_diff_us(last_sensor_reading, now) >=
|
if (absolute_time_diff_us(last_sensor_reading, now) >=
|
||||||
SENSOR_READING_INTERVAL_US) {
|
SENSOR_READING_INTERVAL_US) {
|
||||||
|
printf("Sensor reading: %d\n", readings_index);
|
||||||
last_sensor_reading = now;
|
last_sensor_reading = now;
|
||||||
printf("Making BME280 Reading\n");
|
printf("Making BME280 Reading\n");
|
||||||
current_bem280_reading = bme280_read(&bem_config);
|
current_bem280_reading = bme280_read(&bem_config);
|
||||||
|
|
@ -117,18 +118,21 @@ int main() {
|
||||||
pms5003_warmup(&pms_config);
|
pms5003_warmup(&pms_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (readings_index == 4) {
|
if (readings_index == 4) {
|
||||||
// printf("Starting reads on PMSS5003\n");
|
printf("Starting reads on PMSS5003\n");
|
||||||
// pms5003_start_reading(&pms_config);
|
pms5003_start_reading(&pms_config);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if (readings_index == 6) {
|
if (readings_index == 6) {
|
||||||
// printf("Finished reading PMSS5003\n");
|
printf("Finished reading PMSS5003\n");
|
||||||
// current_pms5003_reading = pms5003_finish_reading(&pms_config);
|
current_pms5003_reading = pms5003_finish_reading(&pms_config);
|
||||||
// snprintf(msg_to_send, sizeof(msg_to_send), "M02,%.2f,%.2f,%2f\n",
|
snprintf(msg_to_send, sizeof(msg_to_send), "M02,%.2f,%.2f,%2f\n",
|
||||||
// current_pms5003_reading.pm1, current_pms5003_reading.pm2_5,
|
current_pms5003_reading.pm1, current_pms5003_reading.pm2_5,
|
||||||
// current_pms5003_reading.pm10);
|
current_pms5003_reading.pm10);
|
||||||
// }
|
printf(
|
||||||
|
"Sending particle matter readings to backend server...\n");
|
||||||
|
send_msg(msg_to_send);
|
||||||
|
}
|
||||||
|
|
||||||
readings_index++;
|
readings_index++;
|
||||||
if (readings_index >= 10) {
|
if (readings_index >= 10) {
|
||||||
|
|
@ -142,27 +146,27 @@ int main() {
|
||||||
// Check connection status
|
// Check connection status
|
||||||
int link_status = cyw43_tcpip_link_status(&cyw43_state, CYW43_ITF_STA);
|
int link_status = cyw43_tcpip_link_status(&cyw43_state, CYW43_ITF_STA);
|
||||||
|
|
||||||
printf("[WiFi Status Check]\n");
|
// printf("[WiFi Status Check]\n");
|
||||||
printf(" Link Status: ");
|
// printf(" Link Status: ");
|
||||||
switch (link_status) {
|
switch (link_status) {
|
||||||
case CYW43_LINK_DOWN:
|
case CYW43_LINK_DOWN:
|
||||||
printf("DOWN\n");
|
// printf("DOWN\n");
|
||||||
gpio_put(WIFI_STATUS_LED_PIN, false);
|
gpio_put(WIFI_STATUS_LED_PIN, false);
|
||||||
break;
|
break;
|
||||||
case CYW43_LINK_JOIN:
|
case CYW43_LINK_JOIN:
|
||||||
printf("JOINING\n");
|
// printf("JOINING\n");
|
||||||
gpio_put(WIFI_STATUS_LED_PIN, false);
|
gpio_put(WIFI_STATUS_LED_PIN, false);
|
||||||
break;
|
break;
|
||||||
case CYW43_LINK_NOIP:
|
case CYW43_LINK_NOIP:
|
||||||
printf("NO IP\n");
|
// printf("NO IP\n");
|
||||||
gpio_put(WIFI_STATUS_LED_PIN, false);
|
gpio_put(WIFI_STATUS_LED_PIN, false);
|
||||||
break;
|
break;
|
||||||
case CYW43_LINK_UP:
|
case CYW43_LINK_UP:
|
||||||
printf("UP\n");
|
// printf("UP\n");
|
||||||
gpio_put(WIFI_STATUS_LED_PIN, true);
|
gpio_put(WIFI_STATUS_LED_PIN, true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("UNKNOWN (%d)\n", link_status);
|
// printf("UNKNOWN (%d)\n", link_status);
|
||||||
gpio_put(WIFI_STATUS_LED_PIN, false);
|
gpio_put(WIFI_STATUS_LED_PIN, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
18
pms5003.c
18
pms5003.c
|
|
@ -5,6 +5,7 @@
|
||||||
#include <hardware/regs/intctrl.h>
|
#include <hardware/regs/intctrl.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <hardware/watchdog.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Lib for Plantower PMS5003 Particulate Matter (PM) Sensor
|
Lib for Plantower PMS5003 Particulate Matter (PM) Sensor
|
||||||
|
|
@ -50,6 +51,7 @@ static pms5003_reading extract_pm_values_from_rx_buf() {
|
||||||
|
|
||||||
static void on_uart_rx() {
|
static void on_uart_rx() {
|
||||||
// TODO: make the uart1 dynamic
|
// TODO: make the uart1 dynamic
|
||||||
|
watchdog_update();
|
||||||
while (read && reading_i < MAX_READINGS && uart_is_readable(uart1)) {
|
while (read && reading_i < MAX_READINGS && uart_is_readable(uart1)) {
|
||||||
uint8_t ch = uart_getc(uart1);
|
uint8_t ch = uart_getc(uart1);
|
||||||
// start of a message
|
// start of a message
|
||||||
|
|
@ -57,6 +59,13 @@ static void on_uart_rx() {
|
||||||
printf("pms5003 reading received\n");
|
printf("pms5003 reading received\n");
|
||||||
rx_i = 0;
|
rx_i = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bounds check before accessing array
|
||||||
|
if (rx_i >= 32) {
|
||||||
|
rx_i = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
rx_buf[rx_i] = ch;
|
rx_buf[rx_i] = ch;
|
||||||
rx_i++;
|
rx_i++;
|
||||||
// end of message
|
// end of message
|
||||||
|
|
@ -65,11 +74,6 @@ static void on_uart_rx() {
|
||||||
printf("pm1: %f, pm2.5: %f, pm10: %f\n", readings[reading_i].pm1, readings[reading_i].pm2_5, readings[reading_i].pm10);
|
printf("pm1: %f, pm2.5: %f, pm10: %f\n", readings[reading_i].pm1, readings[reading_i].pm2_5, readings[reading_i].pm10);
|
||||||
reading_i++;
|
reading_i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// guard
|
|
||||||
if (rx_i > 32) {
|
|
||||||
rx_i = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,7 +86,7 @@ void pms5003_init(pms5003_config *new_config, uart_inst_t *uart, uint8_t tx_pin,
|
||||||
uart_set_format(uart, 8, 1, UART_PARITY_NONE);
|
uart_set_format(uart, 8, 1, UART_PARITY_NONE);
|
||||||
irq_set_exclusive_handler(UART1_IRQ, on_uart_rx);
|
irq_set_exclusive_handler(UART1_IRQ, on_uart_rx);
|
||||||
irq_set_enabled(UART1_IRQ, true);
|
irq_set_enabled(UART1_IRQ, true);
|
||||||
uart_set_irq_enables(uart, true, false);
|
uart_set_irq_enables(uart, false, false);
|
||||||
|
|
||||||
// high level or suspending is normal working status, while low level is
|
// high level or suspending is normal working status, while low level is
|
||||||
// sleeping mode.
|
// sleeping mode.
|
||||||
|
|
@ -126,11 +130,13 @@ void pms5003_warmup(pms5003_config *config) { gpio_put(config->enable_pin, 1); }
|
||||||
void pms5003_start_reading(pms5003_config *config) {
|
void pms5003_start_reading(pms5003_config *config) {
|
||||||
reading_i = 0;
|
reading_i = 0;
|
||||||
read = true;
|
read = true;
|
||||||
|
uart_set_irq_enables(config->uart, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
pms5003_reading pms5003_finish_reading(pms5003_config *config) {
|
pms5003_reading pms5003_finish_reading(pms5003_config *config) {
|
||||||
printf("readings_i: %d\n", reading_i);
|
printf("readings_i: %d\n", reading_i);
|
||||||
read = false;
|
read = false;
|
||||||
|
uart_set_irq_enables(config->uart, false, false);
|
||||||
gpio_put(config->enable_pin, 0);
|
gpio_put(config->enable_pin, 0);
|
||||||
pms5003_reading average_reading = compute_avarage_reading();
|
pms5003_reading average_reading = compute_avarage_reading();
|
||||||
reading_i = 0;
|
reading_i = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue