Учитывая ограничения памяти и процессора, есть несколько подходов, которые вы можете использовать. Я предполагаю, что вы можете изменить код сервера для некоторых из них (или разместить посредник, который соответствующим образом изменяет ответ).
Возможно, вам придется реализовать более одного из них, чтобы обойти ограничения вашего board.
Разделить ответ по клиентскому запросу
Клиент Arduino может запросить фрагмент данных и обработать этот фрагмент перед запросом следующего фрагмента. Это может быть либо с помощью «постраничного» запроса, либо с использованием заголовка Transfer-Encoding: chunked
.
Использование более эффективного кодирования в ответе сервера
Пример ответа кодирует один октет в виде шести символов (например, 0xff,
).
Переход к двоичному ответу уменьшит пример 80 КБ примерно до 14 КБ. Простой двоичный дамп может быть возвращен. например, ответ HTTP (с заголовком Content-Type: application/octet-stream
) может иметь чисто двоичную полезную нагрузку.
Если вам нужно, чтобы ответ оставался в виде текста, то даже кодировка base 64 будет более эффективной с точки зрения памяти, чем текущая шестнадцатеричная кодировка.
Использовать сжатую кодировку в ответе сервера (например, RLE)
Это не сжимает полезную нагрузку ответа (через HTTP-сжатие), поскольку Arduino, вероятно, не будет иметь памяти или ЦП для обработки этого.
Вместо этого кодирование длины выполнения может сжимать полезную нагрузку в объеме, достаточном для заполнения области памяти. Эффективный декодер RLE должен работать с небольшим объемом ОЗУ / ЦП.
RLE часто очень подходит для сжатия 1-битных изображений.