Беспроводной Bluetooth USB-хаб с использованием Arduino nano
У меня есть следующая проблема/идея:
У меня есть верстак для электроники и отдельный компьютерный стол. Теперь у меня есть USB-концентратор на рабочем столе, но он не работает должным образом, потому что USB-кабель к ПК слишком длинный. Моя настройка на самом деле не позволяет мне разместить компьютер в другом месте, а USB-концентратор уже установлен в ближайшем удобном месте.
Несколько дней назад я вспомнил, что у меня есть arduino nano с модулем Bluetooth hc-05, подключенным к его аппаратному последовательному порту. И поскольку и bluetooth, и USB являются последовательными соединениями, мне было интересно, не могу ли я использовать arduino в качестве посредника и подключить arduino через Bluetooth к ПК. Затем установите на ПК программное обеспечение, которое регистрирует arduino как USB-концентратор с одним портом, и запустите на arduino некоторый код, который в основном заставляет arduino действовать как USB-хост (я знаю, что это возможно с arduino nano), и пусть он просто перемещает данные между USB-соединением и модулем Bluetooth.
Я совершенно уверен, что все это должно быть возможно. Atmega должна даже быть способна делать это при максимальной скорости передачи данных USB 2.0 или близкой к ней, так как она составляет всего 12 Мбит/с, а при питании от 5 В она может работать на частоте 16 МГц. Я не совсем уверен в максимальной скорости передачи данных для модуля Bluetooth, но я могу работать с немного более низкими скоростями...
Программное обеспечение для ПК также может быть относительно простым. Что-то вроде виртуального USB-порта, и программное обеспечение просто переносит данные с com-порта, который является bluetooth, на этот виртуальный USB-порт.
Так вот в чем идея. У меня есть некоторый опыт как в программировании микроконтроллеров, так и в программном обеспечении для ПК.
Так что мне нужна небольшая помощь в этом, так как я не совсем уверен, как этого добиться.
Части, в которых мне больше всего понадобится помощь, будут связаны с программированием USB-хоста на arduino и виртуального USB-порта на ПК.
Остальное должно быть относительно простым, так как в основном это просто перенос данных из одного регистра в другой.
@XPModder, 👍1
Обсуждение2 ответа
Ты не можешь. Вот так просто. Сам факт размышления об этом опровергает отчаянное непонимание того, как работает USB.
Да, он "последовательный" в том смысле, что он отправляет один бит за другим, в отличие от нескольких битов вместе ("параллельный"), но он никоим образом не связан с "последовательным", о котором говорит модуль Bluetooth или Arduino ("UART").
Я согласен с Майенко. Лучший способ для вас-купить активный удлинитель USB, чтобы вы могли легко преодолевать расстояние (сигнал обновляется в кабеле активной электроникой, так что вы можете использовать USB на больших расстояниях).
Вы считаете, что это легко, потому что вы еще не углубились в эти темы. Вот некоторые важные сведения об этом:
Bluetooth и USB принципиально разные. Термин "последовательный" за пределами мира Arduino - это просто термин, обозначающий один бит за другим. В нем не описывается какой-либо протокол или принцип работы. Интерфейсы, такие как SPI и I2C, также являются последовательными интерфейсами, но это не означает, что они работают аналогично, даже в их топологии, а также в их поведении протокола. Мост между этими различными интерфейсами лучше описать как переводчик. А перевод всегда труден.
Последовательный в мире Arduino означает интерфейс UART. Никакого сходства с USB или Bluetooth.
Спецификация Bluetooth довольно большая. Существует множество типов интерфейсов подключения, которые можно построить с его помощью. Примерами являются интерфейсы UART (последовательный Arduino), HID (например, мышь или клавиатура на ПК) или аудио (например, наушники). Каждое соединение имеет свою специфическую функцию. Спецификация USB еще больше, намного больше, если быть точным. Вам нужно будет понять, как bluetooth и USB работают в своей основе, чтобы реализовать что-то подобное.
HC-05-это чип для подключения интерфейса UART по Bluetooth. Чтобы изменить это, вам нужно будет перепрограммировать его с помощью новой прошивки. Я сомневаюсь, что любой прошивки, которую вы можете найти в Интернете, будет достаточно для вашего случая. Недостаточно общий. Кроме того, аппаратное обеспечение чипов ограничено, поэтому вы можете использовать только ограниченные ресурсы. Скорее всего, у вас есть HC-05 на плате адаптера, на которой установлен регулятор напряжения (поскольку HC-05-это устройство 3,3 В). Вам нужно будет выбросить эту плату и припаять сам чип.
Nano-плохой выбор для всего, что связано с USB. Atmega328p на нем, который вы программируете при программировании Arduino, не имеет интерфейса USB. Для этого у Nano есть второй чип, Atmega32u4, который действует как адаптер USB-UART. Вам нужно было бы взломать его, чтобы сделать что-то другое, чем это. Сделать это возможно, но вам нужно будет спросить себя, почему вы пытаетесь сделать что-то настолько сложное с такой неспособной платой. Кроме того, Nano не может быть ни USB-хостом, ни концентратором. Для Uno есть экран USB-хоста, но он также ограничен.
Получение чего-либо, даже отдаленно близкого к 12 Мбит/с, иллюзорно. Вы не сможете обрабатывать почти по одному биту на каждом тактовом фронте. Вам уже нужно несколько тактовых фронтов для выполнения очень примитивной обработки (вход в ISR, а затем перемещение данных в другой регистр, как вы выразились). И перевод между протоколами будет не таким простым. Вам потребуется большая вычислительная мощность, а также довольно много оперативной памяти и флэш-памяти (вам, безусловно, потребуется буферизировать некоторые данные, и сама программа также будет очень большой для реализации чего-то вроде USB). "Немного более низкие скорости" не сокращают его там. Даже если бы это было возможно, это было бы невероятно медленно по сравнению с настоящим USB-концентратором.
Большая часть программного обеспечения, которое вам понадобится для такого проекта, не существует. Делать что-то настолько сложное с таким дерьмовым оборудованием-это крайний случай. Поэтому вам нужно будет написать собственное программное обеспечение для USB-стека. Как уже упоминалось, интерфейс USB очень сложен, и если вам нужно задать этот вопрос, в настоящее время вы не способны на это (и я тоже).
Я не говорю, что абсолютно невозможно реализовать немного функций USB с помощью Nano. Но вы не получите удовлетворительного результата, который вы действительно можете использовать, даже если бы вы были абсолютным экспертом по микроконтроллерам и стекам USB и bluetooth (что вам действительно нужно для этого). Это, по крайней мере, проект, который эксперт сделал бы просто для работы, а не для реальных результатов.
У вас есть реальная жизненная проблема, которую вы хотите решить. Выберите самый простой способ и купите активный USB-удлинитель.
- Проблема с загрузкой Bluetooth на Arduino HC-05 v4.0
- Bluetooth-модуль HC-05 — команда INQ не работает
- Самая низкая мощность, возможная в Arduino
- Эмуляция стандартного периферийного USB-устройства Mifare с помощью RFID-RC522
- Arduino Nano (клон) не распознается
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как подключить Arduino Nano к ноутбуку с Linux
- Использование последовательных контактов TX/ RX для связи по USB
`поскольку и Bluetooth, и USB являются последовательными соединениями " ну, да, они оба являются *последовательными*, но сказать, что они хоть отдаленно похожи, все равно что сказать, что слон и велосипед похожи, потому что они оба движутся вперед и назад., @Majenko