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

ай я яй, и как же такой ранимый человек в программирование вляпался…

ну токи фуко тормозить будут… не буду говорить что надо энергию тратить немедленно, лучше скажу про эффект зеебека, чем не вечный двигатель ?)))

предложите хотя бы направление что почитать, пару лямов что бы больше времени было тоже можно… ну и коды выкладывать тоже будет полезно, мало ли при их чтении мысля интересная посетит)))

Если массив данных совсем абстрактный - то в ЕСП32 есть встроенная библиотека deflate/inflate. Еще пойдут lz, lzari. Помоему, эти библиотеки спортированы под все на свете и очень часто используются в embedded системах. Но на кусках рандомных по 768 байт будет небольшая совсем экономия. Потратите больше времени на сжатие :slight_smile:

Если же данные какие-то осмысленные, то пишите их сюда, вместе подумаем, как их можно сжать.

Я так понимаю, что если сжать до нуля, то вся память будет свободна, а дальше пойдут отрицательные размеры – чем больше сжимаешь, тем больше памяти становится. Так? Здорово!

работать не пробовал?

отрицательные весят стоко же как и положительные, до 0 сжимать незя, надо какую то инструкцию оставить для восстановления что бы не забыть)))

та работа после которой я не смогу кому то достойному 2 лимона подогнать, не работа а конвеер смерти, в конце которой меня ждет копеечная пенсия))) ну или я просто не знаю где работать…
кстати не подскажите за 300к реально собрать радар для дрона который будет видеть их на расстоянии 15-30км ? а то на яхту вроде 500к стоит,(и скорее всего не видит мелкие цели) а для дрона все 20кк, а то какой то щедрый человек решил заплатить аж целых 300к, в сети думаю сами найдете заказ))) какая работа вообще может быть ?))) надо только что то свое делать…

Конечно.

без троллинга ?)))) а то я ведь посоветую человеку на ваш форум обратиться, взялся бы кто то из вас сделать? что бы и ему копеечка после осталась, а не за еду пилить… на комплектующие еще наверное наскребет немного… но вроде они дорого стоят… особенно если мелкие цели наблюдать…

Детекторы дронов работают на небольшом расстоянии, как правило.
Так тебе детектор нужен, или полноценный радар?. Радар на 15 км придется пилить из микроволновки :)))).

на 15км чтоб подсветить птичку размером с кулак, надо несколько киловатт выходного излучения, частоты там десятками ГГц измеряются вроде. Если хочешь стать отцом - обмотай яйцо свинцом, как гаварится. Хотя, если излучать сжатые до нуля двоичные данные…

конешно, давай его сюда, скорее, небось %% хочешь от сделки ?

Тут и своих “циркачей” хватает, а вы ещё и радиолокаториста-инноватора хотите привлечь)
Дрон не самолёт, летает слишком низко. Радиолокацией не рассмотреть.

ну да, щас еще на оптоволокне делают, последние тенденции обнаружения это распознавание видео вблизи и микрофоны чуть дальше.

пластиковый дрон не отражает в радарных диапазонах. Ни на каком расстоянии. Были некие идеи про Терагерцы, но их пока никто даже в виде лабораторного концепта не показал. Пока что дрон можно только увидеть или услыщать. Он не греется, поэтому его и в инфрареде не видно ;). Думаете почему это “оружие 21 века”? Сбивать почти нереально.

не мне, и вроде радар, что бы показать с какой стороны летит, и расстояние… уже не помню точное описание…
и вообще это я для примера, по моим оценкам тут нужно 2кк в любом случае, половина тебе половина на комплектующие, + 5кк по факту, ибо ты не занимаешься разработкой 1го устройства а делаешь код для 1к+… и в целом ты учился что бы в жизни сделать 5 проектов и нечего не делать, а не вкалывать за еду всю жизнь))) от сюда вопрос какая работа может быть ?)))
у меня знаний не хватает что бы сказать я точно смогу… знаю в теории, пульнуть волну и считать время когда ответ придет, в зависимости от времени и первого сработавшего датчика вывести на экран…
минимум 9 датчиков по 50к и то не факт что они справятся из за маленьких целей…

не уверен… скорее всего приемник просто мощный что бы уловить отраженную волну, от сюда и такая цена на радары для яхт… причем если надо 10ток целей видеть то таких квадратов ставить дофига))))

Мощность полбеды. Магнетрон из микроволновки. Проблема еще в том, Что надо узкий луч делать, да еще и вертеть им (сканировать, слева направо, сверху вниз). Это серьезная инженерная задача. Один не справится.

Дак сам сделай.
Все же просто - антенну к ардуине припаяй. Скетч писать умеешь. За пару вечеров слупишь 300 тыщ.

Только кабель качественный бери, не дешман!

во…
а на эти деньги, тут в разделе исполнителей, закажешь алгоритм Хаффмана без построения дерева.
красота!

а переделать на i2c возможно? или у вас приемник только UART

Там не просто UART - RS485 с ModbusRTU
I2C, к сожалению, совсем не годится для надежной передачи данных на большие расстояния
Если на что-то переходить, так на Ethernet. Главный минус (кроме цены), что это будет “звезда”, то есть нельзя мног сенсоров на одну физическую шину посадить

Ethernet Shield (W5500)

чисто условный код для размышлений

Спойлер

#include <SPI.h>
#include <Ethernet.h>
#include <SoftwareSerial.h>

// Настройки Ethernet (W5500)
byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 100); // Локальный IP Arduino
EthernetServer tcpServer(502); // Порт TCP (например, Modbus TCP)
EthernetClient tcpClient;

// Настройки RS485
#define RS485_DE_RE 4 // Пин управления DE/RE модуля MAX485
SoftwareSerial rs485Serial(2, 3); // RX, TX (пины для SoftwareSerial)

// Буферы данных
const int BUFFER_SIZE = 64;
byte tcpBuffer[BUFFER_SIZE];
byte rs485Buffer[BUFFER_SIZE];

void setup() {
Serial.begin(115200);
rs485Serial.begin(9600);
pinMode(RS485_DE_RE, OUTPUT);
digitalWrite(RS485_DE_RE, LOW); // Начальный режим - приём

// Инициализация Ethernet
Ethernet.init(10); // CS-пин для W5500 (обычно 10 на Arduino)
Ethernet.begin(mac, ip);

// Проверка подключения Ethernet
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println(“Ошибка: Ethernet Shield не найден!”);
while (true);
}

Serial.print("TCP-сервер запущен на ");
Serial.println(Ethernet.localIP());
tcpServer.begin();
}

void loop() {
// Обработка TCP-клиентов
EthernetClient client = tcpServer.available();
if (client) {
Serial.println(“Новый TCP-клиент подключен!”);

while (client.connected()) {
  // Приём данных из TCP и отправка в RS485
  if (client.available()) {
    int len = client.read(tcpBuffer, BUFFER_SIZE);
    if (len > 0) {
      digitalWrite(RS485_DE_RE, HIGH); // Режим передачи
      rs485Serial.write(tcpBuffer, len);
      rs485Serial.flush();
      digitalWrite(RS485_DE_RE, LOW); // Режим приёма
    }
  }

  // Приём данных из RS485 и отправка в TCP
  if (rs485Serial.available()) {
    int len = rs485Serial.readBytes(rs485Buffer, BUFFER_SIZE);
    client.write(rs485Buffer, len);
  }
}

client.stop();
Serial.println("TCP-клиент отключен.");

}
}