Skip to main content

DataCompressor

Модуль для бітового упаковування та стискання показань датчиків у 7-байтовий масив.

Модуль DataCompressor належить до простору імен flowercare::utils і відповідає за бітове упаковування показань датчиків (батарея, температура, тиск, вологість, освітленість) у компактний 7-байтовий масив outArray. Використовується для економії flash-пам'яті при збереженні записів та мінімізації розміру BLE-пакетів.

tip

Цей елемент є унікальний для різних пристротоїв і вимагає перегерацію цього коду відповідно до полів.

Принцип роботи стискача даних

Підключення

#include "dataCompressor.hpp"

Простір імен: flowercare::utils


Функції

compressSensorData()

void compressSensorData(
uint8_t* outArray,
uint8_t battery,
uint16_t temp,
uint16_t pressure,
uint8_t humidity,
uint32_t luminance
);

Стискає вхідні показання датчиків у 7-байтовий масив outArray за допомогою бітових зсувів та масок.

Параметри

ПараметрТипБітиОпис
outArrayuint8_t*Вказівник на буфер розміром не менше 7 байт для запису результату.
batteryuint8_t7Рівень заряду акумулятора (0–100%).
tempuint16_t12Значення температури.
pressureuint16_t12Значення атмосферного тиску.
humidityuint8_t7Відносна вологість повітря (0–100%).
luminanceuint32_t18Рівень освітленості (люкси/Raw).

Схема бітового упаковування (7 байт)

Уся сума даних (56 біт = 7 байт) розміщується у масиві за такою маскою:

БайтБіти в байтіВхідний параметрВикористовувані біти параметра
outArray[0][0..6]``[7]battery``tempbattery [0..6] (7 біт)temp [0] (1 біт)
outArray[1][0..7]temptemp [1..8] (8 біт)
outArray[2][0..2]``[3..7]temp``pressuretemp [9..11] (3 біти)pressure [0..4] (5 біт)
outArray[3][0..6]``[7]pressure``humiditypressure [5..11] (7 біт)humidity [0] (1 біт)
outArray[4][0..5]``[6..7]humidity``luminancehumidity [1..6] (6 біт)luminance [0..1] (2 біти)
outArray[5][0..7]luminanceluminance [2..9] (8 біт)
outArray[6][0..7]luminanceluminance [10..17] (8 біт)

Приклад використання

#include "dataCompressor.hpp"

void processSensors() {
uint8_t compressedBuffer[7] = {0};

uint8_t battery = 95; // 95%
uint16_t temp = 235; // Наприклад, 23.5°C * 10
uint16_t pressure = 1013; // hPa
uint8_t humidity = 60; // 60%
uint32_t luminance = 45000; // Lux

// Стискання показань у 7 байт
flowercare::utils::compressSensorData(
compressedBuffer,
battery,
temp,
pressure,
humidity,
luminance
);

// compressedBuffer тепер готовий до збереження у flash або відправки через BLE
}