Как сделать веб сервер arduino через USB? Без ethernet shield и чипа wifi

Я хотел бы начать понимать рукопожатия Ethernet, интегрировав протокол Ethernet over USB в arduino mega или nano. Есть ли что-то в протоколе Ethernet, что требует большего количества компонентов? Я знаю, что существуют адаптеры USB к Ethernet. В этом сценарии это было бы больше похоже на эксперимент USB to arduino webserver, за исключением того, что веб-сервер arduino также будет предоставлять IP-адрес ноутбуку во время первоначального рукопожатия.

Разве нельзя создать простой маршрутизатор из ATmega2560, где вы подключаете arduino к компьютеру, а компьютеру присваивается IP-адрес в сети ATmega?

Точно так же не могли бы вы затем передавать небольшие файлы из ATmega в веб-браузер через это IP-соединение?

Я знаю, что это звучит глупо и похоже на чрезмерную инженерию. Но я обещаю, что я не сумасшедший и что это может быть полезно. Существуют адаптеры и драйверы USB-Ethernet, поэтому я не уверен, что существует аппаратное ограничение. Другими словами, в то время как ethernet обычно требует 4 линий передачи данных, а USB 2.0 имеет только 2 линии передачи данных, все еще существуют драйверы ядра, которые позволяют USB нормально работать таким образом. Точно так же ATmega имеет только 2 доступные линии передачи данных. Так не могли бы вы начать с имитации прошивки устройства USB-Ethernet с помощью ATmega?

Новым направлением здесь, недоступным при последовательных соединениях, было бы то, что вы могли бы получить доступ к ATmega из веб-браузера, в то время как в других режимах драйвера браузер не имеет разрешения на связь с Mega.

Почему или почему нет? / Как это можно сделать?

, 👍1

Обсуждение

непонятно , о чем вы говорите ... где будет подключаться адаптер USB ethernet?, @jsotola

_ компьютеру присвоен IP-адрес в сети ATmega?_ Это требует, чтобы Arduino также запускал DHCP-сервер. Если все, что вам нужно, - это обслуживать небольшие файлы, почему бы не эмулировать USB-накопитель?, @Reinderien

@jsotola Нет ни порта Ethernet, ни адаптера USB ethernet. Есть одно соединение - от USB-линии к AT Mega., @steve antwan

@Reinderien Да, нужен DHCP-сервер, за исключением того, что у сервера будет только один клиент. Я хочу, чтобы файлы были html / javascript, выполняемыми через веб-браузер, такой как chrome или firefox, @steve antwan

я предполагаю, что веб-браузеры все еще могут получить доступ к URI файлов. Тем не менее, мне интересно, как это сделать в учебных целях и по другим причинам, например, нужен ли щит? Или вы можете сделать все это без него?, @steve antwan

https://playground.arduino.cc/Code/SerialIP/, @Juraj


2 ответа


3

Вы не можете изменить то, что делает USB Arduino. USB обеспечивается не ATmega2560, а чипом интерфейса USB - UART.

На подлинном Arduino это может быть ATmega16U2, который можно перепрограммировать, но на китайских клонах это чаще всего не так.

Вам нужно будет начать с платы, которая имеет реальное "родное" USB-соединение, например Arduino Leonardo (ATmega32U4) или гораздо более способный (хотя и устаревший) Arduino Due.

Затем вам нужно будет создать не только профиль устройства USB "CDC/ECM", но и стек IP поверх него для обработки IP-данных, а затем TCP поверх него для обработки данных сокета.

Само устройство CDC/ECM очень простое - как и устройство CDC/ACM (USB serial), это просто тупой канал, который отправляет и получает необработанные кадры Ethernet. Интерпретация этих кадров и управление сеансами и потоками TCP/IP-гораздо более сложный процесс, и на него придется большая часть работы. Вероятно, вы захотите взять существующую автономную реализацию IP-стека и заменить существующий код уровня 2 интерфейсом CDC/ECM.

Альтернативой, как предлагает @Juraj, является использование IP поверх Serial. Он использует последовательный протокол (SLIP) для инкапсуляции IP-кадров и имеет в себе рудиментарный урезанный IP-стек. Однако это старая технология, и она больше не поддерживается операционными системами. Например, домашние версии Windows больше не имеют поддержки SLIP (раньше она предоставлялась через "DUNS" - сервер коммутируемой сети, который больше не существует).

,

-1

Вместо этого попробуйте Web Serial API. Пример использования.

,

Как сейчас написано, ваш ответ неясен. Пожалуйста, [изменить], чтобы добавить дополнительные сведения, которые помогут другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти [в справочном центре](/help/how-to-answer)., @VE7JRO

Требуется дополнительная информация. Например, предоставьте ссылку на веб-страницу Web Serial API, а затем предоставьте краткую информацию о том, что делает этот API и как он решает проблему, которую задает OP., @sa_leinad

Я не вижу никакого способа, которым использование последовательного веб-API могло бы помочь задающему вопрос в их цели понимания рукопожатий Ethernet., @RedGrittyBrick