ESP32. Библиотека сжатия массива данных в памяти

Всем привет
С датчика получаю массив данных 768 байт и отправляю его по UART
Хотелось бы сжать массив перед отправкой для уменьшения времени передачи
Подскажите библиотечку для ESP32, пожалуйста
Попробовал miniz_esp32 - compress/compress2 ругается на выделение памяти (пример что с ней идет без PSRAM не работает)
ESP32-targz вообще только с файлами работает

Не знал что существуют архиваторы для МК)

Это решается просто: выкидывай лишний мусор и отправляй действительно полезную информацию, ну и размеры переменных оптимизировать.
Просто скорости всех интерфейсов таковы, что как-то и не возникает ни у кого проблем с передачей. Или УАРТ там на скорости 10 бод?

Там нет лишнего мусора.
Там матрица температуры 32x24 с датчика MLX90640
Отправка идет по ModbusRTU со скоростью 9600. И не с одного датчика, а с нескольких.
Поэтому хотелось бы время минимизировать для уменьшения цикла опроса.

p.s. Ценными советами, как поднять скорость, перейти на Ethernet и вообще чем заниматься можете пренебречь.

Если это картинка, то стоит порыть в области алгоритмов сжатия изображений. Как в формате PCX, например.

Тогда это из разряда “помогите сжать видео FullHD, для передачи Морзянкой. А то долго отправляет.”
Значит задача в корне не верна, либо проблема в чём-то ещё.
Вот, например, чем не устраивает текущий вариант? Медленно? А зачем быстрей? Чтобы что?

Тут могу тогда порекомендовать забить гвоздь углом микроскопа. Меньше шансов его сломать.
Кстати, тут на форуме есть знаток сжатия до 1 бита.:rofl:

1 лайк

Если бы мне такого захотелось, то я сначала сохранил бы данные в файл на ПК, и на ПК посмотрел разными архиваторами с разной степени компрессии, чего можно достичь, и стоит ли оно усилий.

1 лайк

У меня где-то валялся работающий пример zip для avr. На esp не запускал, но никакая специфика avr там не используется, так что могу поискать вечером. Надо?

А смысл в затее, если оно сжиматься будет дольше, чем передаваться?

Попробовать передавать только однобайтные изменения, и изредка полную инфу.

Ааа, там и так однобайтная инфа, видимо. Тогда не пойдет.

Да. Если не сложно

Порылся. Нашлись две вещи.

  1. Пара ссылок на чей-то чужой гихаб, который Вам может пригодиться:

    1. GitHub - siara-cc/Shox96_Arduino_lib: Compressing and decompressing Strings for Arduino
    2. GitHub - siara-cc/Unishox_Arduino_Progmem_lib: Retrieve compressed UTF-8 strings from Arduino Flash memory (Progmem)
  2. Какая-то собственная попытка реализовать метод Хафмана, но она, вряд ли Вам подойдет. Там я написал кодирование (сжатие) для ПК, а для ардуино только распаковку из прогмем. Это нужно было для хранения больших текстов – сжал заранее на ПК, в ардуиновскую программу вставил как готовый массив, а потом распаковываешь во время работы. Т.е. сжатия на ардуино не было. Но, если надо, я всё зипну и выложу. Там программа под MS Visual Studio для сжатия и пример на ардуино UNO для распаковки на лету.