Выдача произвольных файлов на севере ESP32 под Arduino IDE
Как показало гугление - вопрос выдачи через веб-сервер на микроконтроллере каких-либо файлов не попадающих под гребенку текстовых волнует очень многих.
А вот достойных решений в открытом доступе нет. Максимум что я видел это использование SD-карты и чтение уже с нее.
Дабы не пополнять стройные ряды мудаков "Вопрос решил, тему закрываю" выкладываю этот пост.
А ведь ларчик довольно просто открывается.
Есть путь настоящих самураев, записывая файл напрямую в энергонезависимую память и читая потом по ячейкам.
А можно всего лишь нужный файл перевести в Си-подобную переменную что бы ее понимал компилятор и мог с ней работать.
У каждого из методов есть свои плюсы. Здесь я опишу именно второй способ, так как он требует меньше всего трудозатрат при массовом внедрении в разных проектах.
Я написал простой исполняемый sh-файл который перебирает любой файл побайтово и создает заголовочный файл с массивом собственно байт.
https://github.com/SUNsung/bash_convert_to_byte_arr
Интерфейс простейший:
- есть две переменные, в первую мы записываем имя файла или полный путь к файлу который хотим отдавать через веб-сервер, а вторую переменную без пробелов и спецсимволов пишем собственно имя переменной в которой должен лежать байтовый массив.
В итоге создается новый файл (или перезаписывается старый) имя которого совпадает с именем переменной.
Внутри уже сформирован массив байт:
... и указана размерность:
IDE вполне себе спокойно открывает такие файлы, будь они даже под 300Кб и компилятор так же отлично компилирует без всяких плясок занимая фактический размер, не больше и не меньше.
Дальше просто стандартное подключение файлов в С++:
И бонусом как в ардуино-подобной среде можно отдавать сразу на выгрузку: