JXCT Soil Sensor 7-in-1 v3.4.9 (June 2025)
Professional IoT soil monitoring system with ESP32, Modbus RTU, MQTT, and advanced compensation algorithms
|
Работа с Modbus-датчиком JXCT. Подробнее...
#include <Arduino.h>
#include "modbus_sensor.h"
#include "jxct_device_info.h"
#include "jxct_config_vars.h"
#include "debug.h"
#include "logger.h"
#include "jxct_constants.h"
#include "sensor_compensation.h"
#include "calibration_manager.h"
Функции | |
void | debugPrintBuffer (const char *prefix, uint8_t *buffer, size_t length) |
void | testSP3485E () |
Тестирование работы SP3485E. | |
void | setupModbus () |
Инициализация Modbus и SP3485E. | |
uint16_t | calculateCRC16 (uint8_t *data, size_t length) |
bool | validateSensorData (SensorData &data) |
bool | getCachedData (SensorData &data) |
bool | readFirmwareVersion () |
bool | readErrorStatus () |
bool | changeDeviceAddress (uint8_t new_address) |
bool | testModbusConnection () |
bool | readSingleRegister (uint16_t reg_addr, const char *reg_name, float multiplier, void *target, bool is_float) |
Чтение одного регистра с обработкой ошибок | |
int | readBasicParameters () |
Чтение основных параметров (температура, влажность, pH, EC) | |
int | readNPKParameters () |
Чтение NPK параметров (азот, фосфор, калий) | |
static void | saveRawSnapshot (SensorData &d) |
static void | updateIrrigationFlag (SensorData &d) |
static void | applyCompensationIfEnabled (SensorData &d) |
void | finalizeSensorData (bool success) |
Финализация данных датчика (валидация, кэширование, скользящее среднее) | |
void | readSensorData () |
float | convertRegisterToFloat (uint16_t value, float multiplier) |
void | preTransmission () |
Подготовка к передаче данных | |
void | postTransmission () |
Завершение передачи данных | |
void | realSensorTask (void *pvParameters) |
void | startRealSensorTask () |
void | printModbusError (uint8_t errNum) |
void | initMovingAverageBuffers (SensorData &data) |
void | addToMovingAverage (SensorData &data, float temp, float hum, float ec, float ph, float n, float p, float k) |
float | calculateMovingAverage (float *buffer, uint8_t window_size, uint8_t filled) |
SensorData | getSensorData () |
Переменные | |
ModbusMaster | modbus |
SensorData | sensorData |
SensorCache | sensorCache |
String | sensorLastError = "" |
static unsigned long | lastIrrigationTs = 0 |
Работа с Modbus-датчиком JXCT.
Реализация функций и задач для опроса датчика по Modbus RTU, преобразование данных, управление линией передачи.
См. определение в файле modbus_sensor.cpp
void addToMovingAverage | ( | SensorData & | data, |
float | temp, | ||
float | hum, | ||
float | ec, | ||
float | ph, | ||
float | n, | ||
float | p, | ||
float | k ) |
См. определение в файле modbus_sensor.cpp строка 606
Перекрестные ссылки SensorData::buffer_filled, SensorData::buffer_index, calculateMovingAverage(), config, DEBUG_PRINTF, SensorData::ec, SensorData::ec_buffer, SensorData::hum_buffer, SensorData::humidity, k, SensorData::k_buffer, SensorData::n_buffer, SensorData::nitrogen, SensorData::p_buffer, SensorData::ph, SensorData::ph_buffer, SensorData::phosphorus, SensorData::potassium, SensorData::temp_buffer и SensorData::temperature.
Используется в finalizeSensorData().
|
static |
См. определение в файле modbus_sensor.cpp строка 399
Перекрестные ссылки CalibrationManager::applyCalibration(), CLAY, config, correctEC(), correctNPK(), correctPH(), SensorData::ec, SensorData::humidity, LOAM, SensorData::nitrogen, PEAT, SensorData::ph, SensorData::phosphorus, SensorData::potassium, SAND, SANDPEAT и SensorData::temperature.
Используется в finalizeSensorData().
uint16_t calculateCRC16 | ( | uint8_t * | data, |
size_t | length ) |
См. определение в файле modbus_sensor.cpp строка 109
float calculateMovingAverage | ( | float * | buffer, |
uint8_t | window_size, | ||
uint8_t | filled ) |
См. определение в файле modbus_sensor.cpp строка 674
Перекрестные ссылки config.
Используется в addToMovingAverage().
bool changeDeviceAddress | ( | uint8_t | new_address | ) |
См. определение в файле modbus_sensor.cpp строка 183
Перекрестные ссылки modbus и REG_DEVICE_ADDRESS.
float convertRegisterToFloat | ( | uint16_t | value, |
float | multiplier ) |
См. определение в файле modbus_sensor.cpp строка 495
Используется в readSingleRegister().
void debugPrintBuffer | ( | const char * | prefix, |
uint8_t * | buffer, | ||
size_t | length ) |
См. определение в файле modbus_sensor.cpp строка 24
Перекрестные ссылки currentLogLevel, LOG_DEBUG и logDebug().
void finalizeSensorData | ( | bool | success | ) |
Финализация данных датчика (валидация, кэширование, скользящее среднее)
success | Флаг успешности чтения всех параметров |
См. определение в файле modbus_sensor.cpp строка 442
Перекрестные ссылки addToMovingAverage(), applyCompensationIfEnabled(), logError(), logSuccess(), logWarn(), saveRawSnapshot(), sensorCache, sensorData, updateIrrigationFlag() и validateSensorData().
Используется в readSensorData().
bool getCachedData | ( | SensorData & | data | ) |
См. определение в файле modbus_sensor.cpp строка 144
Перекрестные ссылки MODBUS_CACHE_TIMEOUT и sensorCache.
SensorData getSensorData | ( | ) |
См. определение в файле modbus_sensor.cpp строка 730
Перекрестные ссылки SensorData::conductivity, SensorData::ec, SensorData::humidity, SensorData::isValid, SensorData::last_update, SensorData::moisture, sensorData, SensorData::timestamp и SensorData::valid.
void initMovingAverageBuffers | ( | SensorData & | data | ) |
См. определение в файле modbus_sensor.cpp строка 588
Перекрестные ссылки SensorData::buffer_filled, SensorData::buffer_index, DEBUG_PRINTLN, SensorData::ec_buffer, SensorData::hum_buffer, SensorData::k_buffer, SensorData::n_buffer, SensorData::p_buffer, SensorData::ph_buffer и SensorData::temp_buffer.
void postTransmission | ( | ) |
Завершение передачи данных
Выключает передатчик и включает приемник с необходимой задержкой. Важно: Задержка 50 мкс необходима для корректного переключения режимов
См. определение в файле modbus_sensor.cpp строка 517
Перекрестные ссылки MODBUS_DE_PIN и MODBUS_RE_PIN.
Используется в setupModbus() и testModbusConnection().
void preTransmission | ( | ) |
Подготовка к передаче данных
Включает передатчик и отключает приемник с необходимой задержкой. Важно: Задержка 50 мкс необходима для стабилизации сигналов на шине RS-485
См. определение в файле modbus_sensor.cpp строка 505
Перекрестные ссылки MODBUS_DE_PIN и MODBUS_RE_PIN.
Используется в setupModbus() и testModbusConnection().
void printModbusError | ( | uint8_t | errNum | ) |
См. определение в файле modbus_sensor.cpp строка 547
Перекрестные ссылки logError() и logSuccess().
Используется в readFirmwareVersion() и readSingleRegister().
int readBasicParameters | ( | ) |
Чтение основных параметров (температура, влажность, pH, EC)
См. определение в файле modbus_sensor.cpp строка 319
Перекрестные ссылки readSingleRegister(), REG_CONDUCTIVITY, REG_PH, REG_SOIL_MOISTURE, REG_SOIL_TEMP и sensorData.
Используется в readSensorData().
bool readErrorStatus | ( | ) |
См. определение в файле modbus_sensor.cpp строка 172
Перекрестные ссылки modbus, REG_ERROR_STATUS и sensorData.
bool readFirmwareVersion | ( | ) |
См. определение в файле modbus_sensor.cpp строка 153
Перекрестные ссылки logError(), logSensor(), logSuccess(), modbus и printModbusError().
int readNPKParameters | ( | ) |
Чтение NPK параметров (азот, фосфор, калий)
См. определение в файле modbus_sensor.cpp строка 342
Перекрестные ссылки readSingleRegister(), REG_NITROGEN, REG_PHOSPHORUS, REG_POTASSIUM и sensorData.
Используется в readSensorData().
void readSensorData | ( | ) |
См. определение в файле modbus_sensor.cpp строка 478
Перекрестные ссылки finalizeSensorData(), logSensor(), readBasicParameters() и readNPKParameters().
Используется в realSensorTask().
bool readSingleRegister | ( | uint16_t | reg_addr, |
const char * | reg_name, | ||
float | multiplier, | ||
void * | target, | ||
bool | is_float ) |
Чтение одного регистра с обработкой ошибок
reg_addr | Адрес регистра |
reg_name | Название регистра для логирования |
multiplier | Множитель для конвертации |
target | Указатель на переменную для сохранения результата |
is_float | Флаг - сохранять как float или int |
См. определение в файле modbus_sensor.cpp строка 284
Перекрестные ссылки convertRegisterToFloat(), logDebug(), logError(), modbus и printModbusError().
Используется в readBasicParameters() и readNPKParameters().
void realSensorTask | ( | void * | pvParameters | ) |
См. определение в файле modbus_sensor.cpp строка 525
Перекрестные ссылки COLOR_CYAN, config, logPrintHeader(), logSystem() и readSensorData().
Используется в startRealSensorTask().
|
static |
См. определение в файле modbus_sensor.cpp строка 362
Перекрестные ссылки SensorData::ec, SensorData::humidity, SensorData::nitrogen, SensorData::ph, SensorData::phosphorus, SensorData::potassium, SensorData::raw_ec, SensorData::raw_humidity, SensorData::raw_nitrogen, SensorData::raw_ph, SensorData::raw_phosphorus, SensorData::raw_potassium, SensorData::raw_temperature и SensorData::temperature.
Используется в finalizeSensorData().
void setupModbus | ( | ) |
Инициализация Modbus и SP3485E.
Настраивает пины управления SP3485E и инициализирует UART для Modbus. Важно: DE и RE управляются раздельно для лучшего контроля над временем переключения
См. определение в файле modbus_sensor.cpp строка 80
Перекрестные ссылки COLOR_CYAN, COLOR_GREEN, JXCT_MODBUS_ID, logPrintHeader(), logSuccess(), logSystem(), modbus, MODBUS_DE_PIN, MODBUS_RE_PIN, MODBUS_RX_PIN, MODBUS_TX_PIN, postTransmission() и preTransmission().
Используется в ModbusSensorAdapter::ModbusSensorAdapter().
void startRealSensorTask | ( | ) |
См. определение в файле modbus_sensor.cpp строка 541
Перекрестные ссылки realSensorTask().
Используется в setup().
bool testModbusConnection | ( | ) |
См. определение в файле modbus_sensor.cpp строка 199
Перекрестные ссылки logError(), logSuccess(), logSystem(), logWarn(), modbus, MODBUS_DE_PIN, MODBUS_RE_PIN, postTransmission() и preTransmission().
void testSP3485E | ( | ) |
Тестирование работы SP3485E.
Проверяет корректность работы пинов DE и RE:
См. определение в файле modbus_sensor.cpp строка 45
Перекрестные ссылки logSuccess(), logSystem(), logWarn(), MODBUS_DE_PIN и MODBUS_RE_PIN.
|
static |
См. определение в файле modbus_sensor.cpp строка 373
Перекрестные ссылки config, SensorData::humidity, lastIrrigationTs и SensorData::recentIrrigation.
Используется в finalizeSensorData().
bool validateSensorData | ( | SensorData & | data | ) |
См. определение в файле modbus_sensor.cpp строка 132
Перекрестные ссылки SensorData::ec, SensorData::humidity, MAX_EC, MAX_HUMIDITY, MAX_NPK, MAX_PH, MAX_TEMPERATURE, MIN_EC, MIN_HUMIDITY, MIN_NPK, MIN_PH, MIN_TEMPERATURE, SensorData::nitrogen, SensorData::ph, SensorData::phosphorus, SensorData::potassium и SensorData::temperature.
Используется в finalizeSensorData().
|
static |
См. определение в файле modbus_sensor.cpp строка 22
Используется в updateIrrigationFlag().
ModbusMaster modbus |
См. определение в файле modbus_sensor.cpp строка 17
Используется в changeDeviceAddress(), readErrorStatus(), readFirmwareVersion(), readSingleRegister(), setupModbus() и testModbusConnection().
SensorCache sensorCache |
См. определение в файле modbus_sensor.cpp строка 19
Используется в finalizeSensorData() и getCachedData().
SensorData sensorData |
См. определение в файле modbus_sensor.cpp строка 18
Используется в fakeSensorTask(), finalizeSensorData(), getSensorData(), loop(), publishSensorData(), readBasicParameters(), readErrorStatus(), readNPKParameters(), sendDataToThingSpeak(), sendHealthJson(), sendSensorJson(), sendServiceStatusJson() и shouldPublishMqtt().
String sensorLastError = "" |
См. определение в файле modbus_sensor.cpp строка 20
Используется в sendHealthJson() и sendServiceStatusJson().