Arduino_____USB Hub_____Arduino
- Войдите на сайт для отправки комментариев
Ср, 09/01/2013 - 13:31
Здравствуйте! Возможна ли такая схема обмена данными на ардуино через USB Hub?
Здравствуйте! Возможна ли такая схема обмена данными на ардуино через USB Hub?
Могу ошибаться, но ИМХО не получится. Кто здесь будет USB host? Более того, даже Arduino Due, с помощью библиотеки USBhost не сможет так работать, т.к. в описание к библиотеке прямо указано, что работать через хаб не будет.
И да и нет. "напрямую" они не смогут между собой общатся. Хаб должен будет быть втыкнуть в комп, где будет программа открывающая сразу четеры COM-порта и занимающаяся "трансфером данных" между ними.
Если "комп не нужен", то одна из ардуин должна содеражть USB-хост шилд. И "заниматся тем же самым".
Но не очень ясно "а зачем тут вообще USB". Зачем в цепочке Arduino1->Serial->Usb->HUB->PC->HUB->USB->Serial->Arduino2 то что выделенно жирным.
Ардуины вполне могут общатся и между собой напрямую. И через тот же Serial и i2c и SPI и 1/2-wire и "что-то свое дрыгая ногами".
И да и нет. "напрямую" они не смогут между собой общатся. Хаб должен будет быть втыкнуть в комп, где будет программа открывающая сразу четеры COM-порта и занимающаяся "трансфером данных" между ними.
Если "комп не нужен", то одна из ардуин должна содеражть USB-хост шилд. И "заниматся тем же самым".
Но не очень ясно "а зачем тут вообще USB". Зачем в цепочке Arduino1->Serial->Usb->HUB->PC->HUB->USB->Serial->Arduino2 то что выделенно жирным.
Ардуины вполне могут общатся и между собой напрямую. И через тот же Serial и i2c и SPI и 1/2-wire и "что-то свое дрыгая ногами".
У меня ног на ардуине не осталось свободных)
А как 4 ардуины связать по Serial?
Ну TX (D1) одной дуины, в RX (D0) другой и наоборот. Так вы "связали две дуины".
Можно и все четыре попробовать на одну линию повесить. Но тогда "все будут слышать всех". Но тогда приморачиваться нужно будет что-бы с какой-то адресацией для выяснения "кому данные предназначены", плюс озабодится что-бы две дуины одновременно "говорить не начали". Ну и озаботися отключением этого хозяйства на момент заливки скетчей.
Я бы, наверное, все-таки I2C для этого выбрал (serial все таки больше для точка-точка, хотя "можно извратится"). Там "адресация" уже заложена изначально.
А ноги осовбодить - смотреть на всякие "сдвиговые", "порт экспандеры" и т.п. Может тогда и четыре дуины не потребуется :)
Ну TX (D1) одной дуины, в RX (D0) другой и наоборот. Так вы "связали две дуины".
Можно и все четыре попробовать на одну линию повесить. Но тогда "все будут слышать всех". Но тогда приморачиваться нужно будет что-бы с какой-то адресацией для выяснения "кому данные предназначены", плюс озабодится что-бы две дуины одновременно "говорить не начали". Ну и озаботися отключением этого хозяйства на момент заливки скетчей.
Я бы, наверное, все-таки I2C для этого выбрал (serial все таки больше для точка-точка, хотя "можно извратится"). Там "адресация" уже заложена изначально.
А ноги осовбодить - смотреть на всякие "сдвиговые", "порт экспандеры" и т.п. Может тогда и четыре дуины не потребуется :)
Хотел тем самым добиться универсальности. Так чтобы была маленькая сеть из ардуин и если необходимо то можно было бы подключить в эту сеть железку с Linux(типа TP-Link MR3020) и все это вывести в интернет )
Что бы подключить все дуины "параллельно" и так что бы любая дуина могла слышать/говорить с любобой другой нужно соединить все TX и RX выводы в один провод, тоесть по этому проводу будут и передаваться и приниматься данные, а это как вы понимаете не есть хороший вариант.
Если вам уж прям так неообходима сеть на UART, то можно соединять все дуины последовательно в кольцо, тогда (как уже написано выше) вам понадобится адресация, но не надо будет думать как организовать неодновременную передачу нескольких дуин. Дуины соединенные в кольцо должны работать по принципу "не мое - передай дальше". Если интересно могу разъяснить.
Кольцо невесело тем, что один обрыв или одна дуина заглючила и сразу несколько "в пролете". Лучше уж общая шина. Но опять-таки уже изобрели I2C и аппаратно реализовали. Или взять еще одну дуину "центральную" для связи с роутером и делать "звезду".
Тогда и роутер не обязателен. Ставим на центральную эйезрент шилд и "сеть у нас в интернете" :)
TX & RX не стоит использовать, если соединение не один к одному. Плохо и больно будет :) Во всяком случае я бы не советовал даже пробовать. Уж тогда точно I2C и один из них мастер, который и будет накапливать/запрашивать информацию с других. На счет обрывов сложнее, заморачиваться нужно только если это действительно нужно в противном случае из пушки по воробьям. А к I2C можно, предполагаю, можно много Ардуин подцепить, да и не только их, как я понимаю, интерфейс часто используется и в других устройствах.
TX & RX не стоит использовать, если соединение не один к одному. Плохо и больно будет :)
Это почему? Ну токоограничивающий резюк на TX поставить и "Та йижте, дамо, не бийтеся, нияка трясця вас не визьме! отвечает та. Уси ж йидять." (С) ;)
Но согласен. Что-то "извращенное" в этом есть :)
Я еще RS232 пользовал. Хоть сам ничего не сжег, но что это я знаю :) Потому с тех времен осталась "боязнь".
А I2C прикольная штука, спасибо, ТС, я хоть почитал про неё. Если нужна возможность расширения, самое оно. К тому же, если я правильно понял, в Ардуино - аппаратная поддержка, еще лучше.
А I2C прикольная штука, спасибо, ТС, я хоть почитал про неё. Если нужна возможность расширения, самое оно. К тому же, если я правильно понял, в Ардуино - аппаратная поддержка, еще лучше.
Верно. В амтеловских даташитах она еще под именем TWI встречается (отголоски борьбы за торговые марки или что-то подобное).
В ардуино оно фигугирует под именем Wire библиотека
Оппа. А я связывал посредством LIN шины. Просто Rx/Tx не захотели работать всем скопом.
Ну и далее по протоколу LIN
Адрес / длина / данные / контрольная сумма.