dust sensor: first working sketch

tatry_variant
Mateusz Lubecki 2022-09-18 06:59:53 +02:00
rodzic bd8b738ff8
commit 5dae491c2b
7 zmienionych plików z 46 dodań i 22 usunięć

Wyświetl plik

@ -5,15 +5,18 @@
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../system/src/davis_vantage/davis.c \
../system/src/davis_vantage/davis_parsers.c
../system/src/davis_vantage/davis_parsers.c \
../system/src/davis_vantage/sds011.c
OBJS += \
./system/src/davis_vantage/davis.o \
./system/src/davis_vantage/davis_parsers.o
./system/src/davis_vantage/davis_parsers.o \
./system/src/davis_vantage/sds011.o
C_DEPS += \
./system/src/davis_vantage/davis.d \
./system/src/davis_vantage/davis_parsers.d
./system/src/davis_vantage/davis_parsers.d \
./system/src/davis_vantage/sds011.d
# Each subdirectory must supply rules for building sources it contributes

Wyświetl plik

@ -5,15 +5,18 @@
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../system/src/davis_vantage/davis.c \
../system/src/davis_vantage/davis_parsers.c
../system/src/davis_vantage/davis_parsers.c \
../system/src/davis_vantage/sds011.c
OBJS += \
./system/src/davis_vantage/davis.o \
./system/src/davis_vantage/davis_parsers.o
./system/src/davis_vantage/davis_parsers.o \
./system/src/davis_vantage/sds011.o
C_DEPS += \
./system/src/davis_vantage/davis.d \
./system/src/davis_vantage/davis_parsers.d
./system/src/davis_vantage/davis_parsers.d \
./system/src/davis_vantage/sds011.d
# Each subdirectory must supply rules for building sources it contributes

Wyświetl plik

@ -73,6 +73,9 @@ const config_data_mode_t __attribute__((section(".config_section_default.mode"))
.wx_umb = 0,
#endif
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _VICTRON
.victron = 1,

Wyświetl plik

@ -93,6 +93,10 @@ const config_data_mode_t __attribute__((section(".config_section_first.mode")))
.wx_anemometer_pulses_constant = _ANEMOMETER_PULSES_IN_10SEC_PER_ONE_MS_OF_WINDSPEED,
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _DIGI_ONLY_789
.digi_only_ssids = 1,
#else

Wyświetl plik

@ -73,6 +73,9 @@ const config_data_mode_t __attribute__((section(".config_section_second.mode")))
.wx_umb = 0,
#endif
#ifdef _DUST_SDS011_SERIAL
.wx_dust_sensor = WX_DUST_SDS011_SERIAL,
#endif
#ifdef _VICTRON
.victron = 1,

Wyświetl plik

@ -68,6 +68,7 @@
#include "drivers/dallas.h"
#include "drivers/i2c.h"
#include "drivers/analog_anemometer.h"
#include "dust_sensor/sds011.h"
#include "aprs/wx.h"
#include "../system/include/modbus_rtu/rtu_serial_io.h"
@ -1126,9 +1127,11 @@ int main(int argc, char* argv[]){
}
#endif
}
else if ((main_config_data_mode & WX_DUST_SDS011_SERIAL) > 0) {
else if ((main_config_data_mode->wx_dust_sensor & WX_DUST_SDS011_SERIAL) > 0) {
if (main_kiss_srl_ctx_ptr->srl_rx_state == SRL_RX_DONE) {
sds011_get_pms(main_kiss_srl_ctx_ptr->srl_rx_buf_pointer, 10, &rte_wx_pm10, &rte_wx_pm2_5);
// restart reception
srl_receive_data(main_kiss_srl_ctx_ptr, 10, 0xAA, 0, 0, 0, 0);

Wyświetl plik

@ -18,23 +18,28 @@ int sds011_get_pms(uint8_t * data, uint16_t data_ln, uint16_t * pm_10, uint16_t
// values received from sensor
uint8_t head = *(data + 0);
uint8_t command_id = *(data + 1);
uint8_t checksum = *(data + 9);
uint8_t checksum = *(data + 8);
// calculate checksum
for (int i = 2; i < 9; i++) {
local_checksum += *(data + i);
if (command_id == 0xC0) {
// calculate checksum
for (int i = 2; i < 8; i++) {
local_checksum += *(data + i);
}
if ((local_checksum & 0xFF) != checksum) {
return -2;
}
local_checksum = *(data + 2) | (*(data + 3) << 8);
*pm_2_5 = local_checksum;
local_checksum = *(data + 4) | (*(data + 5) << 8);
*pm_10 = local_checksum;
return 0;
}
if ((local_checksum & 0xFF) != checksum) {
return -2;
else {
return -3;
}
local_checksum = *(data + 1) | (*(data + 2) << 8);
*pm_2_5 = local_checksum;
local_checksum = *(data + 4) | (*(data + 5) << 8);
*pm_10 = local_checksum;
return 0;
}