Преобразование страницы HTML в массив шестнадцатеричных значений для использования на сервере Arduino - PullRequest
0 голосов
/ 22 января 2020

Множество примеров и учебных пособий по запуску веб-сервера на Arduino (или микроконтроллерах в целом) используют gzipped веб-страницу в виде массива шестнадцатеричных значений

#define index_ov2640_html_gz_len 4316
const uint8_t index_ov2640_html_gz[] = {
  0x1F, 0x8B, 0x08, 0x08, 0x50, 0x5C, 0xAE, 0x5C, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F,
  ...
  0x7F, 0x22, 0xF6, 0x5F, 0x04, 0x9C, 0x39, 0x76, 0x5C, 0x6C, 0x00, 0x00
};

Я нашел несколько способов вручную преобразовать HTML в такой массив, но я ищу способ выполнить преобразование автоматически, например, с помощью сценария bash.

Я нашел инструмент hexdump и смог получить некоторые многообещающие результаты с

hexdump -e '16/1 "0x%02X, " "\n"' ~/Dev/Arduino/CameraWebServer/www/index_ov2640.html.gz > test.txt

, но есть некоторые проблемы:

  1. Полученный файл содержит (иногда) одну или несколько звездочек
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
*
0x3C, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20, 0x69, 0x64, 0x3D, 0x22, 0x61, 0x65, 0x63, 0x32, 0x22,
Последняя строка выглядит следующим образом
0x6D, 0x6C, 0x3E, 0x0A, 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  , 0x  ,

Ответы [ 2 ]

1 голос
/ 23 января 2020

Найдите bin2 c .exe на веб-сайте segger

0 голосов
/ 23 января 2020

Благодаря моему разговору с Оуэном я узнал о том, как указывать мне на инструмент unix xxd, предоставляющий именно то, что я искал. Сценарий, который я представил ранее, может быть таким образом упрощен до:

#!/bin/bash

OUTPUT_FILE=camera_index_new.h

# clear the output file
> $OUTPUT_FILE

for file in `ls *.html`; do
    echo "Compressing: $file"
    gzip -kf "$file" && \
    echo "Converting $file to byte array"
    echo "/* Contents of file "$file".gz */" >> $OUTPUT_FILE
    xxd -i -u $file".gz" >> $OUTPUT_FILE
    echo "" >> $OUTPUT_FILE
done

ПРЕДЫДУЩЕЕ РЕШЕНИЕ:

Основано на предложении P__J __ s Я сделал bash скрипт на основе bin2 c проект, который производит вывод, почти идентичный тому, что используется в espressif CameraWebServer exmple

#!/bin/bash

OUTPUT_FILE=camera_index.h

convert_to_byte_array() {
    echo "Converting $@ to byte arrays"
    ./bin2c -m -o $OUTPUT_FILE $@
}

for file in `ls *.html`; do
    echo "Compressing: $file"
    cp "$file" "copy_$file" && \
    gzip -f "$file" && \
    mv "copy_$file" "$file"
    compressed_files=( "${compressed_files[@]}" $file".gz")
done
if test -f "./bin2c"; then
    convert_to_byte_array ${compressed_files[@]}
elif test -f "./bin2c.c"; then
    echo "Compiling bin2c from the source"
    gcc -o bin2c bin2c.c
    convert_to_byte_array ${compressed_files[@]}
else
    echo "Conversion of ${compressed_files[@]} to byte arrays not possilbe, missing bin2c.
Download bin2c source (bin2c.c) fom https://sourceforge.net/projects/bin2c/ and put it in this folder."
fi
...