JXCT Soil Sensor 7-in-1 3.10.1
IoT система мониторинга почвы на базе ESP32
Загрузка...
Поиск...
Не найдено
modbus_sensor.h
См. документацию.
1#ifndef MODBUS_SENSOR_H
2#define MODBUS_SENSOR_H
3
4#ifdef TEST_BUILD
5#include "esp32_stubs.h"
6#elif defined(ESP32) || defined(ARDUINO)
7#include <ModbusMaster.h>
8#include "Arduino.h"
9#else
10#include "esp32_stubs.h"
11#endif
12
13// ===================== КОНСТАНТЫ MODBUS И ДАННЫХ =====================
14constexpr uint16_t REG_PH = 0x0006;
15constexpr uint16_t REG_SOIL_MOISTURE = 0x0012;
16constexpr uint16_t REG_SOIL_TEMP = 0x0013;
17constexpr uint16_t REG_CONDUCTIVITY = 0x0015;
18constexpr uint16_t REG_NITROGEN = 0x001E;
19constexpr uint16_t REG_PHOSPHORUS = 0x001F;
20constexpr uint16_t REG_POTASSIUM = 0x0020;
21constexpr uint16_t REG_FIRMWARE_VERSION = 0x07;
22constexpr uint16_t REG_CALIBRATION = 0x08;
23constexpr uint16_t REG_ERROR_STATUS = 0x0B;
24constexpr uint16_t REG_DEVICE_ADDRESS = 0x0C;
25constexpr size_t SENSOR_BUFFER_SIZE = 15;
26constexpr float SENSOR_DEFAULT_FLOAT = 0.0F;
27constexpr float SENSOR_DEFAULT_SCALE = 1.0F;
28constexpr int SENSOR_MAX_VALUE = 1000;
29constexpr int SENSOR_MIN_VALUE = 100;
30
31// Допустимые пределы измерений (используем единые константы из jxct_constants.h)
32#include "jxct_constants.h"
33#include "sensor_types.h"
34#define MIN_TEMPERATURE SENSOR_TEMP_MIN
35#define MAX_TEMPERATURE SENSOR_TEMP_MAX
36#define MIN_HUMIDITY SENSOR_HUMIDITY_MIN
37#define MAX_HUMIDITY SENSOR_HUMIDITY_MAX
38#define MIN_EC SENSOR_EC_MIN
39#define MAX_EC SENSOR_EC_MAX
40#define MIN_PH SENSOR_PH_MIN
41#define MAX_PH SENSOR_PH_MAX
42#define MIN_NPK SENSOR_NPK_MIN
43#define MAX_NPK SENSOR_NPK_MAX
44
45// Структура для хранения данных с датчика (расширенная версия SensorData из sensor_types.h)
47{
48 float moisture; // Добавляем поле для влажности
49 float conductivity; // Добавляем поле для электропроводности
50 uint16_t firmware_version; // Версия прошивки
51 uint8_t error_status; // Статус ошибок
52 bool valid; // Флаг валидности данных
53 bool isValid; // Альтернативное поле валидности для веб-интерфейса
54 unsigned long last_update; // Время последнего обновления
55 unsigned long timestamp; // Альтернативное поле времени для веб-интерфейса
56
57 // ДЕЛЬТА-ФИЛЬТР v2.2.1: Поля для хранения предыдущих значений
58 float prev_temperature; // Предыдущая температура для дельта-фильтра
59 float prev_humidity; // Предыдущая влажность для дельта-фильтра
60 float prev_ec; // Предыдущая EC для дельта-фильтра
61 float prev_ph; // Предыдущий pH для дельта-фильтра
62 float prev_nitrogen; // Предыдущий азот для дельта-фильтра
63 float prev_phosphorus; // Предыдущий фосфор для дельта-фильтра
64 float prev_potassium; // Предыдущий калий для дельта-фильтра
65 unsigned long last_mqtt_publish; // Время последней публикации MQTT
66
67 // СКОЛЬЗЯЩЕЕ СРЕДНЕЕ v2.3.0: Кольцевые буферы для усреднения
68 float temp_buffer[SENSOR_BUFFER_SIZE]; // Буфер температуры (макс 15 значений)
69 float hum_buffer[SENSOR_BUFFER_SIZE]; // Буфер влажности
70 float ec_buffer[SENSOR_BUFFER_SIZE]; // Буфер EC
71 float ph_buffer[SENSOR_BUFFER_SIZE]; // Буфер pH
72 float n_buffer[SENSOR_BUFFER_SIZE]; // Буфер азота
73 float p_buffer[SENSOR_BUFFER_SIZE]; // Буфер фосфора
74 float k_buffer[SENSOR_BUFFER_SIZE]; // Буфер калия
75 uint8_t buffer_index; // Текущий индекс в буферах
76 uint8_t buffer_filled; // Количество заполненных элементов (0-15)
77
78 // RAW значения до компенсации (v2.5.1)
81 float raw_ec;
82 float raw_ph;
87
89 : SensorData(),
90 moisture(0.0F),
91 conductivity(0.0F),
93 error_status(0),
94 valid(false),
95 isValid(false),
96 last_update(0),
97 timestamp(0),
98 prev_temperature(0.0F),
99 prev_humidity(0.0F),
100 prev_ec(0.0F),
101 prev_ph(0.0F),
102 prev_nitrogen(0.0F),
103 prev_phosphorus(0.0F),
104 prev_potassium(0.0F),
106 buffer_index(0),
107 buffer_filled(0),
108 raw_temperature(0.0F),
109 raw_humidity(0.0F),
110 raw_ec(0.0F),
111 raw_ph(0.0F),
112 raw_nitrogen(0.0F),
113 raw_phosphorus(0.0F),
114 raw_potassium(0.0F),
115 recentIrrigation(false)
116 {
117 // Инициализация буферов
118 for (int i = 0; i < 15; i++)
119 {
120 temp_buffer[i] = 0.0F;
121 hum_buffer[i] = 0.0F;
122 ec_buffer[i] = 0.0F;
123 ph_buffer[i] = 0.0F;
124 n_buffer[i] = 0.0F;
125 p_buffer[i] = 0.0F;
126 k_buffer[i] = 0.0F;
127 }
128 }
129};
130
131// Структура для кэширования данных
133{
136 unsigned long timestamp;
137};
138
141String& getSensorLastError();
142
143// Получение текущих данных датчика
145
146// Инициализация Modbus
147void setupModbus();
148
149// Чтение данных с датчика
150void readSensorData();
151
152// Чтение версии прошивки
154
155// Чтение статуса ошибок
156bool readErrorStatus();
157
158// Изменение адреса устройства
159bool changeDeviceAddress(uint8_t new_address);
160
161// Проверка валидности значений
163
164// Получение кэшированных данных
166
167// Преобразование значения регистра в число с плавающей точкой
168float convertRegisterToFloat(uint16_t value, float multiplier);
169
170// Функция предварительной передачи для управления SP3485E
171void preTransmission();
172
173// Функция после передачи для управления SP3485E
174void postTransmission();
175
176// Функция для вывода ошибок Modbus
177void printModbusError(uint8_t errNum);
178
180
181// v2.3.0: Функции скользящего среднего
182void addToMovingAverage(ModbusSensorData& data, const ModbusSensorData& newReading);
183float calculateMovingAverage(const float* buffer, uint8_t window_size, uint8_t filled);
185
186// Тестовые функции
187void testSP3485E(); // Тест драйвера SP3485E
188bool testModbusConnection(); // Диагностика Modbus связи
189void testSerialConfigurations(); // Тест конфигураций Serial2
190
191#endif // MODBUS_SENSOR_H
Централизованные константы системы JXCT.
constexpr uint16_t REG_FIRMWARE_VERSION
Definition modbus_sensor.h:21
void setupModbus()
Инициализация Modbus и SP3485E.
Definition modbus_sensor.cpp:332
void preTransmission()
Подготовка к передаче данных
Definition modbus_sensor.cpp:556
constexpr uint16_t REG_CONDUCTIVITY
Definition modbus_sensor.h:17
void postTransmission()
Завершение передачи данных
Definition modbus_sensor.cpp:568
void testSerialConfigurations()
String & getSensorLastError()
Definition modbus_sensor.cpp:711
constexpr uint16_t REG_PHOSPHORUS
Definition modbus_sensor.h:19
void startRealSensorTask()
Definition modbus_sensor.cpp:592
void initMovingAverageBuffers(ModbusSensorData &data)
Definition modbus_sensor.cpp:640
SensorCache sensorCache
Definition modbus_sensor.cpp:728
bool readFirmwareVersion()
Definition modbus_sensor.cpp:387
constexpr int SENSOR_MAX_VALUE
Definition modbus_sensor.h:28
ModbusSensorData getSensorData()
Definition modbus_sensor.cpp:690
constexpr uint16_t REG_CALIBRATION
Definition modbus_sensor.h:22
void addToMovingAverage(ModbusSensorData &data, const ModbusSensorData &newReading)
Definition modbus_sensor.cpp:658
constexpr int SENSOR_MIN_VALUE
Definition modbus_sensor.h:29
constexpr uint16_t REG_SOIL_MOISTURE
Definition modbus_sensor.h:15
ModbusSensorData sensorData
Definition modbus_sensor.cpp:727
constexpr uint16_t REG_NITROGEN
Definition modbus_sensor.h:18
bool readErrorStatus()
Definition modbus_sensor.cpp:403
constexpr float SENSOR_DEFAULT_FLOAT
Definition modbus_sensor.h:26
bool changeDeviceAddress(uint8_t new_address)
constexpr size_t SENSOR_BUFFER_SIZE
Definition modbus_sensor.h:25
void testSP3485E()
Тестирование работы SP3485E.
Definition modbus_sensor.cpp:297
constexpr uint16_t REG_POTASSIUM
Definition modbus_sensor.h:20
bool validateSensorData(ModbusSensorData &data)
Definition modbus_sensor.cpp:361
void readSensorData()
Definition modbus_sensor.cpp:534
float convertRegisterToFloat(uint16_t value, float multiplier)
constexpr uint16_t REG_ERROR_STATUS
Definition modbus_sensor.h:23
bool getCachedData(ModbusSensorData &data)
Definition modbus_sensor.cpp:372
constexpr float SENSOR_DEFAULT_SCALE
Definition modbus_sensor.h:27
float calculateMovingAverage(const float *buffer, uint8_t window_size, uint8_t filled)
void printModbusError(uint8_t errNum)
Definition modbus_sensor.cpp:599
constexpr uint16_t REG_DEVICE_ADDRESS
Definition modbus_sensor.h:24
constexpr uint16_t REG_PH
Definition modbus_sensor.h:14
bool testModbusConnection()
Definition modbus_sensor.cpp:415
constexpr uint16_t REG_SOIL_TEMP
Definition modbus_sensor.h:16
Типы данных для датчиков почвы
Definition modbus_sensor.h:47
float temp_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:68
float raw_humidity
Definition modbus_sensor.h:80
float prev_ph
Definition modbus_sensor.h:61
float raw_ph
Definition modbus_sensor.h:82
float prev_ec
Definition modbus_sensor.h:60
bool valid
Definition modbus_sensor.h:52
uint8_t buffer_filled
Definition modbus_sensor.h:76
float prev_temperature
Definition modbus_sensor.h:58
float prev_phosphorus
Definition modbus_sensor.h:63
float ph_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:71
float conductivity
Definition modbus_sensor.h:49
unsigned long last_update
Definition modbus_sensor.h:54
float prev_humidity
Definition modbus_sensor.h:59
unsigned long last_mqtt_publish
Definition modbus_sensor.h:65
uint8_t error_status
Definition modbus_sensor.h:51
float hum_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:69
float k_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:74
float p_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:73
float raw_phosphorus
Definition modbus_sensor.h:84
float ec_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:70
bool recentIrrigation
Definition modbus_sensor.h:86
float raw_nitrogen
Definition modbus_sensor.h:83
bool isValid
Definition modbus_sensor.h:53
ModbusSensorData()
Definition modbus_sensor.h:88
uint8_t buffer_index
Definition modbus_sensor.h:75
uint16_t firmware_version
Definition modbus_sensor.h:50
float prev_nitrogen
Definition modbus_sensor.h:62
float prev_potassium
Definition modbus_sensor.h:64
float raw_temperature
Definition modbus_sensor.h:79
float n_buffer[SENSOR_BUFFER_SIZE]
Definition modbus_sensor.h:72
float raw_ec
Definition modbus_sensor.h:81
float raw_potassium
Definition modbus_sensor.h:85
unsigned long timestamp
Definition modbus_sensor.h:55
float moisture
Definition modbus_sensor.h:48
Definition modbus_sensor.h:133
ModbusSensorData data
Definition modbus_sensor.h:134
unsigned long timestamp
Definition modbus_sensor.h:136
bool is_valid
Definition modbus_sensor.h:135
Данные датчика
Definition sensor_types.h:77