Comments 100
Круто, не знал, что такое можно делать на ESP32.
Делал аналогичное на Pi Zero для подключения к фоторамке, работало без проблем
Если речь о Raspberry Pi Zero, то его цена вызывает большую боль, чем скорость работы проекта на ESP32) Вообще смотришь и думаешь, как так-то:
Raspberry Pi Zero - 5500р
Комплект Xeon E5 2620 + Материнка + 16 Гб DDR4 - 6700р
Хм))
А если речь об Orange Pi Zero или Banana, то все равно дороговато, хоть уже и получше.
не забывайте, что были времена, когда Raspberry Pi Zero стоила около 1000 руб и даже дешевле
Xeon E5 2620 + Материнка + 16 Гб DDR4 - 6700р
Зеон разве не ddr3 память? Или китайцы заставили переваривать ddr4?
Актуальная сборка на Xeon E5 2666 v3
https://xeon-e5450.ru/socket-2011-3/aktualnye-sborki-na-2011-3-sokete/#_2
У меня интереснее размышления вышли.
core 2 duo -есть бесплатно и его хватает.
Raspberry Pi надо покупать.
Казалось бы выбор очевиден. Но с2d жрёт 70вт(материнка не хочет запускаться без видеокарты, хотя по докам может) за год получается 3000р. И вот думаю что наверно стоит прикупить Raspberry Pi
Рекомендую покупать Orange Pi. Лучшие одноплатники в соотношении цена-производительность. Себе брал модель Orange Pi 3 LTS (за 2.5к), 2 gb ram, процессор Allwinner H6. Поддерживает armbian, ставишь docker и поехали.
А стоило изобретать велосипед?
Я бы взял нормальный эмулятор exFAT из проекта Azure RTOS. Выполнил бы в Visual Studio на PC форматирование в RAM, и писал бы и отдавал сервером файлы любого размера.
Подозрительно низкая скорость у ESP32, возможно дело во все том же отсутствии RTOS.
exFAT брать не стал по той причине, что если проект использовать на старых устройствах, которые сами не умеют WiFi, то скорее всего они не умеют и exFAT, насколько я помню, долгое время это был закрытый стандарт, пока хакеры не украли часть кода для работы с ним у одного гиганта, случайно не обнаружили в нем части открытого кода и не заставили этого гиганта сделать весь код открытым.
А что касается записи в RAM - так бывают файлы и поболее всей RAM) И я как раз хотел избежать ручной работы. В моей текущей схеме как, можно сделать так, чтобы при подключении устройства к серверу, сервер будет каждый раз создавать новый образ из это займет секунду времени. Т.е. чтобы обновить данные достаточно сделать выкл-вкл ТВ и все, свежескачанные файлы тут же появляются на флешке.
А не писал про запись в RAM, а сказал о форматировании в RAM. Думал понятно что делать дальше. Такое форматирование займёт доли секунды. В Azure RTOS эмулируется и FAT32, это зависит лишь от опций компиляции.
Ну что-бы получилась настоящая вай-фай флешка (которые кстати есть) надо еще подцепить микросд и что б она подключалась к роутеру. И работала в овдт.
А можно ссылочку на "есть"? Интересно пощупать.
есть карты SD с WiFi
Пользуюсь вот такой FYSETC SD-WIFI with Card-Reader Module.
Проект открытый, исходники - https://github.com/ardyesp/ESPWebDAV
Со слабым сигналом скорость СИЛЬНО падает.
А ещё есть ezSh@re. И Flash-Air SD от Toshiba
Супер, спасибо. Только это противоположное тому, что предлагает автор, нет?
А не подскажете как оно в работе, и нет ли такого же с разъемом микро сд, в 3д принтер запихать? Про переходники - видал конечно ...
У меня есть такое же. Да, оно работает, есть micro sd, но работает крайне медленно, сотые доли килобит в секунду.
И да, это устройство работает наоборот, чем у автора поста, поднимает самба-шару.
Но мне понравился пост, потому что именно так было бы интереснее всего сделать, и спасибо за то что исходники лежат на гитхабе, можно для такой флешки будет что то соорудить (в моем случае попытаться)
Как раз в 3D принтере FYSETC использую, ezSh@re мой притер не видел правильно. Размер устройства по длине больше стандартной SD карточки. У меня между столом и верхним краем карты миллиметров 5 осталось. Как хранилище используется стандартная micro-SD.
Крайне чувствительна(выражается в скорости обмена) к качеству Wi-Fi. Диапазон только 2.4 ГГц. Мне, для получения скорости в сотни мегабит, пришлось разворачивать дополнительную сеть и ставить роутер в трёх метрах от принтера.
Надёжна, подключается стабильно.
Большой недостаток - отсутствие часов, все файлы имеют одинаковое время создания.
А что оно реально умеет? И пару сценариев применения, если можно.
exFAT, насколько я помню, долгое время это был закрытый стандарт, пока хакеры не украли часть кода для работы с ним у одного гиганта, случайно не обнаружили в нем части открытого кода и не заставили этого гиганта сделать весь код открытым.
что за бред?
c вики:
exFAT is the official file system of SDXC cards
что подразумевает, что стандарт был публичным; любое устройство с маркировкой sdxc обязано уметь работать с exfat.
проблема была не в том, что хакеры не украли код, а с возможностью легально использовать extfat без выплаты лицензионных отчислений ms, опять же с вики:
Regardless of whether open-source or not, Microsoft stated that "a license is required in order to implement exFAT and use it in a product or device".
в 2019 ms сменила гнев на милость:
exFAT was a proprietary file system until 2019, when Microsoft released the specification and allowed OIN members to use their patents.
Еще немножко производительности можно выжать добившись 100% заполнения TCP пакетов-для этого надо читать значение MTU, рассчитать накладные расходы и запрашивать данные кратно остатку. В принципе через WireShark можно предварительно проверить проблема ли это или нет.
В телевизорах,USB "Ничего лишнего, только сервис" очень часто этот разъем становится полноценным по мановению волшебной палочки. в старых LG (~2012 г.в.) было точно можно, до сих пор работает с внешним винтом и прекрасно крутит 1080p.
Была пара устройств не умеющие в сеть, но которые очень хотели файлов, решением стало rpi4, она отлично прикидывается флешкой, а дальше все просто, подал питание (POE), примонтировал NFS и прикинулся флешкой.
ЗЫ: Там есть пара нюансов, но проблем они не доставили.
Если посмотреть сколько сейчас стоит rpi4, то можно обнаружить что за эту сумму можно купить бу телек со всеми нужными фичами
На известном китайском сайте не сильно дорого, в районе 7к на данный момент
Зачем колхозить лишние провода? Есть же T-Dongle ESP32-S2 WiFi development board.
Как вариант использования - закидывать на флешку музыку (если автомобиль рядом с домом).
файл для передачи его нужно копировать в образ
Более того, нельзя изменять образ, пока флешка воткнута в хост. Это известные недостатки протокола Mass Storage. А насколько сложно будет реализовать MTP? Это намного практичнее
Отличная штука для стартапа.
Если ее можно будет сделать загрузочной, то для сисадминства это просто шикарно. Надо на новый чистый комп поставить что-то - воткнул и загружайся. Надо доложить какие-то драйвера - пока винда ставится, скачал и на шару закинул, не вынимая.
Я бы купил две.
со времен дос софт не лазит за файлами сам, а делает через API операционной системы. По сети ты же тем же API будешь данные на диске менять.
В досе у вас просто закешировался FAT (для ускорения чтения).
msc это ж не только флэшка, может быть и cdrom. Если прикидываться сидюком то вполне все уживется без глюков.
Если флешка ... будет подавать сигнал «извлечения устройства»
Первый кто впадет в ступор это будет драйвер операционки т.к. состояние/команда извлечение для данного типа не предусмотрено. Ну а дальше - останов usb устройства.
Т.е. что бы ось корректно обрабатывала команды извлечения диска микроконтроллер должен прикидываться msc типа сидюк, с соответствующей реализацией протоколов и дескрипторов на стороне контроллера. И вот тут затык, т.к. я конечно особо не искал, но во всех библиотеках что я видел обычно реализован msc типа hdd/flash.
С папками так не получится, т.к. флешка не будет знать, что кто-то вошел в папку. То, что кто-то читает содержимое папки, не значит, что в неё вошли, может просто устройство ищет все медиафайлы и будет всегда во все папки заходить при подключении. А вот с файлами так можно, сделать фейковые видео файлы "!Previous.mp4" и "!Next.mp4" и при его открытии уже перемонтировать другой диск. Но тут может быть постава в том, что устройство может захотеть показать превьюшку у видео и начать его читать сразу, а не когда оно будет запущено.
А причем тут флешка? Речь же о сидироме. Т.е. я так понимаю микроконтроллер прикидывается сидюком и при попытке открытия соответствующих файлов пытается сделать eject и повторную монтировку нового образа.
Принцип работы то тоже самый, файловая система и сектора, которые читаются.
И? Ось по идее при получении инфы о том что в сидюк вставлен новый носитель автоматом перечитывает содержимое диска. Суть в том что для флэшек подобные команды/статусы (аля выброс лотка сидирома) не предусмотрены.
Ну так и у флешки тоже самое, она может отключится, как USB устройство и потом снова подключиться. Суть то не этом, а в том, что невозможно определить, когда пользователь откроет определенную папку. Устройство может заранее захотеть прочитать содержимое папки, чтобы определить размер или какой тип файлов там находится. Или вообще сначала вычитает полностью всю структуру файлов и папок а потом уже только покажет содержимое пользователю. Более надежно сделать такой переход не по папкам "!Previous" и "!Next" а по файлам "!Previous.mp4" и "!Next.mp4", хотя это тоже не панацея.
работает в обход операционной системы
Это как?
Драйвер файловой системы, даже если он работает через инсталлятор, это драйвер файловой системы, который должен отрабатывать разные моменты.
Да, редактировать файл, который сейчас правит кто-то другой, будет вызывать проблему. Но добавление новых файлов - ломать ФС не должно
Как раз вот так использовать будет нельзя, к сожалению. Менять содержимое флешки на лету нельзя, только с переподключением. Точнее можно, но только в определенных рамках: нельзя менять список файлов, а содержимое файлов можно менять только сохраняя размер файла заявленный изначально и только при условии, что файл ещё не читали.
но на самом деле никакая она не флешка, она просто эмулирует файловую систему, а файлы берет по WiFi с сервера. Но зачем? Да, на самом деле, и не зачем.
На этом месте где-то далеко в Поднебесной усмехнулся дядюшка Сяо, уже мысленно впаривший глупым ляоваем партию десёвый сисиди на многа-многа питабайт - бери проверяй сам, все без абмана! ;)
Идея смахивает на "бесконечную флешку" Алексея Чуркина
Шуму в свое время было много (2015 год), президентский грант и ссе такое.
Вроде как даже выпустили опытную партию этого чуда. Но я что-то до сих пор не видел этого девайса в продаже.
Идея благополучно затухла.
"...спустя пару лет Чуркин отказался развивать устройство дальше, сославшись на то, что все пользуются облачными дисками от Dropbox и Google..."
Скорее похоже на https://en.wikipedia.org/wiki/Eye-Fi
А "бесконечная флешка Алексея Чуркина" это самый обычный аппаратный токен для доступа к облаку (я, кстати, так и не понял, в чём "инновация", в Гугл.Диск с помощью YubiKey можно было логиниться за год до того, как эта "бесконечная флешка Алексея Чуркина" только в идеях и презентациях была)
В статье же устройство эмулирует usb-флешку, и имеет собственную связь с сетью.
Инновация в том, что на комп (как правило, не твой) не нужно инсталлировать облачные драйвера, тупо пришёл к любому кому, воткнул свою чудо-флешку - и у тебя новый раздел с твоими файлами.
Во второй версии "Бесконечной флешки" я уже использовал WebDav для эмуляции девайса, а так вы правы, устройства сильно отличаются по принципу работы, для моей нужен был интернет
Да вы правы, проект пришлось закрыть, идея автора поста мне нравится, реализация отличается и выглядит прикольно
Любопытно, а можно ли сделать флешку (с флеш памятью на борту), которая при вставлении в USB будет распознаваться не как обычный съёмный накопитель, а как сетевой диск?
Технически можно, если она сумеет сэмулировать RNDIS.
Во, спасибо за наводку на RNDIS! Похоже это не так сложно, как мне изначально казалось:
https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget
У меня какой-то 3g модем так умел. Показывал на таком диске свой софт.
3g модемы обычно эмулировали из себя CD-ROM, с которого ставились драйвера. Сетевой диск они не изображали. Да и в целом, сетевым адаптером они начали прикидываться только с переходом на 4G — до этого были другие методы взаимодействия.
Там внутри такое… Там внутри такое! Там внутри такое!!! Я не буду говорить, что там внутри никому, кроме своего психотерапевта, а т.к. его у меня нет, то вообще никому. Но эта информация открыта, её можно легко найти в сети, если есть такое желание. Особенно доставляет то, как там сделана поддержка длинных имен файлов, это настолько ублюдство, что даже великолепно. Но важно понимать, что перед людьми, придумавшими это, стояла важная задача — сохранить совместимость с устройствами и программами, которые знать не знали ни о каких длинных именах файлов и важно было, чтобы потом из-за этого изменения не потерялись важные файлы на тысячах компьютеров по всему миру, поэтому вариантов у разработчиков было не много.Хе-хе, уважаемый автор забыл или не знал старую шутку времен win95, что прогрессивная ФС VFAT с поддержкой LFN настолько прогрессивна, что в ней у каждого файла есть два имени.
А до появления нормальных NU под Win95, народ регулярно грохал длинные имена запустив Speed Disk. Да, в win95 были ScanDisk и Defrag, но первый мог вешаться на ровном месте при проверке ФС до старта ОС, а второй был тормознутым, и считал множество файлов неперемещаемыми.
В те времена я учился в школе, и для меня было магией, что там происходит внутри ScanDisk'а и Defrag'а. Но да, бывало, что после проверки диска слетали длинные имена, теперь понятно почему)
Более страшной бедой был запуск хоть scandisk хоть defrag до загрузки country.sys с поддержкой 866 кодовой таблицы... и да, если юзер умудрился переместить папку "WINDOWS" в папку "Мои документы", то без нормальной загрузочной дискеты с настроенными региональными параметрами этот комп становился неработоспособным (лично раза три исправлял такой ляп). И да, до сих пор по возможности придерживаюсь правила именования файлов "8.3 латиницей"...
Сам точно никогда не повторю (слабо), но читать было круто. Ну и каких то вещей просто не знал. Спасибо.
не понял, а как оно работает с обновлением списка файлов? в том числе в плане меню, зачем каждый раз перезагружать?
Пока оно так не работает, я не стал реализовывать этот функционал ввиду бессмысленности этих костылей. Смысл был в том, что когда флешка подключена, менять содержимое каталогов уже нельзя, устройство уже прочитало его. Вообще правило такое - нельзя менять ничего, что уже было прочитано устройством. А все что еще не было прочитано - менять можно. Но если вынуть/вставить флешку можно поменять хоть все, устройство все равно будет читать все данные заново. Но можно попросить флешку перезагрузиться, чтобы делать это программно, тогда она отвалится и снова подключится на устройстве без физического вытаскивания. Так можно все время менять список файлов. Но не стал я это делать потому, что на такое поведение, каждое устройство может отреагировать по своему. Например ТВ при отвале флешки может просто переключиться на другой источник сигнала и придется снова вручную переключать его на флешку. А может он так не будет делать, и останется на флешке, просто выдаст сообщение, что флешка отсутствует, а при подключении флешки уберет его.
Великолепная работа, обожаю такие статьи и подходы. И очередной раз демонстрируется что лежит внизу наших технологий и каким дерьмом является то, что работает, на фоне того, о чём пишут в толстых книжках.
У меня в закладках на Али лежит кейс для внешних дисков с DLNA сервером. В отличие от многих в том, что он умеет по Wi-Fi
"Blueendless" https://a.aliexpress.com/_DB9mvqF
Если бы была цель сделать законченное устройство - мне кажется самым логичным было бы настройки писать... на флешку. То есть при подключении притворяться хабом с двумя подключенными флешками, одна из которых "реальная", но очень маленькая, и хранит текстовый файл с настройками (SSID, пароль, адрес сервера), а вторая - уже собственно папка с сервера расшаренная по wifi. Поменяли файл с настройками - вторая "флешка" отвалилась и снова подключилась, пользуемся. Правда всё равно не очень понятно, зачем оно надо.
Сервер видит к какому файлу идет обращение и может скачать этот файл с ютуба, но он не может сразу подменить содержимое у запрошенного файла. У фейкового файла был фейковый размер и он будет отличаться от реального, а менять эти данные на уже подключенной флешке мы не можем
Так а в чем проблема? Флешка может отдавать 4ГБ на все фейковые файлы. А, когда пойдет воспроизведение, то отдавать блоки на лету, скачивая их с ютуба сервером, и сразу же отдававая на флешку. Единственная проблема может возникнуть с быстрой перемоткой, если пользователь ткнет в центр таймлайна, и телевизор попробует сделать seek на соответствующее смещение, чтобы там найти keyframe и от него читать далее, - то есть, если реальный объем файла 200МБ, а мы уже анонсировали 4ГБ, то вся возможная прокрутка сосредоточится в первых 5% полосы прокрутки. Но, тут я не силен (не вникал, есть ли что-то вроде таблицы соответствия время-отступ в начале видеофайла, чтобы плеер знал, как сикать, а не искал половинным делением), может, можно сэмулировать валидный неоднородный видеофайл, где, условно, 95 первых % времени видео занимает 200МБ, а последние 5% состоят напрочь из полностью черных keyframes и составляют 3800МБ, чтобы и полоса прокрутки тоже работала (ну почти) корректно.
Думал об этом, но тут еще будет играть роль видеоформат. Есть форматы у которых есть заголовки не только в начале но и в конце файла. Не к любому файлу можно в конце записать нули, чтобы он продолжал оставаться работоспособным. Не факт, что скачанное с ютуба будет в подходящем формате, придется делать еще и траскодинг на лету (кстати в транскодинге - да можно наверное установить такой битрейт, чтобы любой файл на выходе был 4ГБ)), но с транскодингом это будет уже не так быстро). Но в теории да, может быть это и могло бы получится.
Интересная идея.
У меня есть похожий девайс. USB флешка с BT модулем. По BT определяется как наушники/колонка, можно подключиться и стримить музыку. При этом поток пишется в один и тот же файл. Таким образом можно слушать музыку по BT на магнитолах авто, поддерживающих только флешки. Покупал на алике рублей за 500 чисто ради интереса. Работает норм.
По USB, которого там нет) А даже если и есть, навряд ли он на уровне BIOSа тех времён распознает USB-дисковод. Или придется заморочится с подключением по floppy шлейфу.
Делал подобное, эмулировал mass storage device, статья "В поисках жирного", исходники есть на гитхабе
Просто хотел подсказать, что по http кусок файла можно забирать штатными средствами через range запрос (заголовок Range). (Если еще не нашли). Еще по-моему есть библиотека с именем httpfs2, может поможет как-то.
Почему "Брынь!" ? "Вжух!" же ?
Проект понравился. ЕСПха валяется где-то, обязательно попробую в паре со старым ресивером.
Сваял франкенштейна на T-Dongle ESP32-S2 WiFi development board.
При втыкании в комп прикидывается флэшкой, файловое хранилище на SD.
При втыкании в зарядку поднимает точку доступа и запускает файловый сервер с доступом к той же SD.
На лцд экран выводится лог работы.
За основу брал примеры из esp-idf и tinyusb:
esp-idf/examples/protocols/http_server/ - файловый сервер;
esp-idf/examples/peripherals/spi_master/lcd/ - работа с экраном;
tinyusb/examples/device/msc_dual_lun - работа с усб.
Из впечатлений - как и ожидалось усб работает не ахти (300кб/с) sd больше 4гб лучше не подключать, шить прикольно, просто воткнул в усб сбросил руками в режим загрузки и дальше или через последовательный порт штатными средствами idf (надо только отключить принудительный сброс в режим загрузчика перед прошивкой), или через дфу (через дфу не пробовал).
Моя попытка сделать Wi-Fi-флешку и что из этого получилось (а что нет)