Выбор соединения для выгрузки файлов с девайса логгера

Borv

✩✩✩✩✩✩✩
4 Фев 2021
23
1
Здравствуйте,

Девайс на ESP32S3 логирует данные в файлы на SD карту, которые потом нужно выгружать на ПК.
Чтобы не мучиться с SD карточкой вынимать-вставлять каждый раз с каждого логгера, какой вариант подключения для переноса небольших файлов вы бы порекомендовали?

Варианты подключений, которые я рассмотрел:
  • USB MSC - плохо, что занимает порт USB; зато быстро и надёжно; минус, что длина кабелей USB ограничена и единую сеть создать сложно. Главное, что библиотека Adafruit_TinyUSB хочет ещё 4 библиотеки!
  • Bluetooth - энерго-эффективен (режим сна до запроса, особенно LE); для небольших файлов скорости достаточно; всегда один MAC адрес значит всегда легко переподключиться; минуса два - отправить можно только заранее заданный набор файлов (открытого списка файлов или проводника итп нет) - но это решаемо; но хуже, что нет готовых свежих библиотек для этого дела вообще!
  • WiFi Direct - под ArduinoIDE тоже не нашёл.
  • WiFi FTP-server - 2 дня мучился с SimpleWiFiServer - вроде всё работает, но входа не происходит.
  • WiFi HTTP-server - ещё не пробовал, но ввиду предыдущих проблем решил сначала спросить.
Почему сразу не хотел WiFi FTP/HTTP сервер - потому что: должен работать постоянно (НЕ энерго-эффективно); требует подключения к некой сети и если сеть меняется - теряется, надо подключать заново, искать его IP заново, если нет управляемого дисплея или клавиатуры то нужно заливать конфиг файл заново на девайс, а как его заливать ежели оно к WiFi не подключено, итд неудобства.

Вопросы:
1) Для USB MSC есть библиотеки покомпактнее?
2) Всё же мб кто-то делал передачу файлов на ESP32S3 по Bluetooth 5/LE?
3) Почему WiFi FTP-server может не соединяться? Соединение начинается, но сервер отказывает в доступе - все настройки менял, пробовал разные FTP клиенты, логин-пароль проверял и даже убрал все сложные символы, итд.
4) Какой WiFi HTTP-server получше для простой выгрузки файлов? Вроде широко предлагают некие "AsyncTCP + ESPAsyncWebSrv" - это лучший вариант или есть новее-быстрее-компактнее?
 

Borv

✩✩✩✩✩✩✩
4 Фев 2021
23
1
эта библиотека заведомо работает на esp32
with SPIFFS and LittleFS support - нет ясно поддерживает ли LittleFS карту SD?
Объём файлов позволит отправить по MQTT ?
Объём позволит, а вот заморочки с доступом врядли, тк MQTT редкий протокол и потребует создавать/устаналвивать какие-то приложения итд. (USM MSC открывается в проводнике и смартфоне, передача файлов по Bluetooth встроена в Win/Mac/iOS/Android, FTP полно клиентов даже некоторые браузеры, HTTP вообще любой браузер!) Хотелось бы что-то более широко поддерживаемое.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
нет ясно поддерживает ли LittleFS карту SD?
SD карты не форматируют в LittleFS, она для этого не предназначенна.
Если вы хотели на самом деле спросить поддерживает ли библиотека фтп сервера работу с сд картой - она поддерживает абстрактный класс - FS. По идее должна работать и с драйвером под SD Fat, но я не проверял.

Хотелось бы что-то более широко поддерживаемое.
Вы бы себе выбирали задачу по силам - возмите распбери (или что-то подобное), там вам будет и веб-сервер и фтп сервер и блютус и хоть на питоне там пишите что вам нравится.
 

Брякомякс

★✩✩✩✩✩✩
14 Янв 2023
95
20
Я бы добавил, что в RPI слабым местом будет ещё и карточка памяти. Стандартная дебиан любит много писать туда-сюда, заставить её быть в духе OpenWRT не так-то просто. Глубоко погружаться в тему с оверлеями, настраивать системное логгирование, tempfs и всё такое, но это время. Плюс перегрев карточки тоже не любят.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
542
Saint-Petersburg, Russia
@Брякомякс, это миф. Малины существуют много лет, под них давно уже созданы адаптированные дистрибутивы из коробки настроенные на минимизацию записи на карту. Никто не ставит на малину стандартный дебиан. Если не использовать ее как десктоп комп с гуем, браузером и торрентокачалкой и базой данных, то убить качественную карту на ней нереально. По-сравнению с регистраторами или камерами армбиан вообще ничего не пишет на карту.
 

Borv

✩✩✩✩✩✩✩
4 Фев 2021
23
1
Ещё раз уточню - профи в ArduinoIDE не являюсь, поэтому разбирать или писать свои библиотеки итд тяжеловато (тем более, что это вторичная работа, не основная), поэтому перерыл интернет в поисках готового решения по данной теме.

На первом месте была бы всё же библиотека передачи файлов по Bluetooth 5 (LE) - удобно, всё чётко тк стандартизировано, очень экономично - но таких библиотек под ESP32+Arduino не нашёл. :(
На втором месте пожалуй был бы WiFi-Direct - но тоже под ESP32+Arduino нет. :(
На третьем месте пожалуй был бы USB MSC SD-card, но единственная библиотека которая это умеет под ESP32+Arduino вроде как Adafruit_TinyUSB - тащит жуткую тонну каких-то странных других библиотек и получается бардак, занимают много памяти, итд. :(

На четвёртом месте пожалуй был бы FTP т.к. протокол полностью готовый, всё стандартизировано, не требует коноёпиться с веб-мордой, занимает меньше места чем [HTTP сервер + вебморда]. Попробовал https://github.com/xreef/SimpleFTPServer - сразу заработал, к сети подключился, в сети появился, FTP клиенты его видят, но когда начинается вход - обрыв соединяться не хочет! Пробовал разные логины, пароли, клиенты, итд - без толку, 2 дня мучений, но соединяться не хочет, хз что ему надо, мб брендмауеры в сети что-то блочат?! :(

Один томбовский волк посоветовал WiFI AccessPoint/Station - смысла просто нет тк: (а) AP можно создать на ПК или смартфоне, зачем этим нагружать устройство с ограниченными ресурсами на небольшом МК?! (б) в примерах под ArduinoIDE с WiFi AP никаких возможностей для обмена файлами нет, а писать целый протокол и клиентов самому - это уже перебор! В общем совет оказался говнецо.

На пятом месте обратился к "поледнему, но самому распространённому, народному средству - горчичники" :D Web HTTP сервер. Пример из набора библиотек от Espressiff "ESP32-SDWebServer" сразу заработал https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer/examples/SDWebServer
Но у него ужасная веб-морда с каким-то не очень нужным редактором кода, а, главное это сервер синхронный, то-есть блокирующий ЛЮБЫЕ действия на ESP32 когда он чёто делает. Что для измерительного оборудования категорически недопустимо (лаг или прерывание измерений в момент когда кто-то в лаборатории открыл браузер с веб вкладкой это сервера - это жуть).

В итоге нашёл самый популярный асинхронный сервер под ESP32 "ESPAsyncWebServer" https://github.com/me-no-dev/ESPAsyncWebServer - но у него нет примера работающего с SD-card.

Потом нашёл инструкцию как использовать ESPAsyncWebServer с SD-card https://randomnerdtutorials.com/esp32-web-server-microsd-card/
Но оказалось, что этот пример использует SD-card только чтобы отобразить любой index.html, но функций работы с файлами и папками на SD-card у него опять нет.

В итоге я нашёл очень простой, но достаточно функциональный и очень компактный "File manager" под "ESPAsyncWebServer" который даже не требует никаких доп файлов типа "index.html" на SD, что очень классно! Но вот работает он только с внутренней памятью ESP32 с файловой системой SPIFFS и не поддерживает ни SD-card, ни директории (которых в SPIFFS просто нет), а тк внутренней памяти лишь 1,5Мб в современном мире этого ужасно мало https://github.com/smford/esp32-asyncwebserver-fileupload-example/tree/master/example-02

Ещё один похожий проект "ESPAsyncWebServer + SPIFFS" с бОльшим кол-вом функций, но жутким перегромаждённым интерфейсом:
https://github.com/G6EJD/G6EJD-ESP-File-Server -

В итоге может кто-нибудь из местных профи сделать микс-форк на базе ESPAsyncWebServer, который будет включать:
Дизайн-простоту и работать без index.html как https://github.com/smford/esp32-asyncwebserver-fileupload-example/tree/master/example-02
Воможно какие-то обновления-улучшения кода и страницу Status как https://github.com/G6EJD/G6EJD-ESP-File-Server

Проект наверняка станет самым популярным файловым веб-сервером под ESP32! :)

PS Кстати не очень ясно, а данные FTP: https://github.com/xreef/SimpleFTPServer и https://github.com/vortigont/FTPClientServer - синхронные или асинхронные, не блокируют ли они работу всей системы при подключении?
 
Изменено: