Pull to refresh

Как я сделал USB-МФУ беспроводным

Reading time 4 min
Views 185K

Вступление

Говорят, ребенку в школе понадобится цветной принтер и сканер. Да и самому хотелось уже на что-то поменять разваливающийся черно-белый лазерник 1996 года выпуска. Критериями выбора стали: цветность, лазерная технология (перерывы между печатью могут достигать месяцев), автоподатчик оригиналов для сканера и копира, автоматическая двусторонняя печать и Wi-Fi, чтобы поставить этот ящик в дальнем углу. По этим характеристикам подобралась какая-то громадина за 25+ килорублей, что показалось неразумным. И вдруг на работе выдали пару подарочных карт одного известного розового магазина, и пришло ощущение, что надо покупать. К сожалению, в его ассортименте было всего три лазерных МФУ с цветной печатью, ни один из которых не отвечал последним двум требованиям. Спустя два месяца аccортимент ничем не пополнился, а наоборот, сократился до двух позиций на всю Москву, и я решил взять то, что было в наличии и не на витрине.

Счастливчиком оказался HP Laserjet Pro 100 Color MFP M175a, без автоповорота страниц и с подключением только по USB. Кстати, он оказался не таким большим, как я ожидал, и не таким шумным, как пишут в отзывах.

Задача

Если автоматическую двустороннюю печать добавить к принтеру почти невозможно, то отвязать его от компьютера вполне реально.

Простой, но не подошедший мне способ — подключить его к роутеру, раздающему интернет в квартире и, возможно, имеющему порт USB. Этот способ подразумевает, что, во-первых, МФУ должен будет стоять в трехметровой дальности от роутера, во-вторых, роутер даст возможность только печати, а не сканирования тоже (на заводских прошивках).

Второй способ — купить некую коробочку за $35… … и надеяться, что она сможет делать то, что нужно, и вдруг будет совместима с Ubuntu на клиентской стороне. Представитель производителя охотно отвечает что-то невразумительное на замечательном китайском английском. Я надеяться на удачу не стал.

Третий способ, уже годный, позволяет использовать устройство, подключенное по USB к одному компьютеру, на другом компьютере так, как будто оно подключено ко второму, используя хоть локальную сеть, хоть интернет.

Софт

Реализаций существует несколько, но я сразу выбрал ту, что включена в ядро Linux, чтобы заранее избавить себя от каких-либо возможных лицензионных ограничений, платностей, невозможности что-то настроить и прочей зависимости. Называется usbip.

Железо

Можно было найти в шкафу старый D-Link, водрузить на него OpenWRT, но это было бы громоздко и с малой долей участия собственных рук, так что решено было поискать что-нибудь маленькое, всемогущее и недорогое.

Carambola
Размером со спичечный коробок, имеет на борту Wi-Fi, USB-host, 320 MHz MIPS-процессор, потребляет не более 1.5W, ОС OpenWRT, стоит 22 евро.

Raspberry Pi
размер 86х56, Wi-Fi придется докупать внешний и вставлять в USB, 700 MHz -процессор, много на плате того, что не будет использоваться, потребляет 3.5W минимум (700mA при 5V), ОС Linux на выбор, стоит 35 долларов США.

A13-OLinuXino-WIFI
размер 120х120, 1 GHz ARM-процессор, богатая периферия, ОС Linux, потребляет 4.2W (350mA при 12V), стоит 55 евро.

Cubieboard и его китайские аналоги
Похожи на предыдущий вариант.

ALIX от PC Engines
Мой давнишний фаворит, размер 100х160 или 152х152, 500 MHz i386-процессор, без встроенного Wi-Fi, ОС почти любая, потребляет 5W, стоит от 64 до 78 евро.

В результате по критериям размер-энергопотребление-стоимость с учетом достаточности функций был выбран первый вариант — Carambola.

Процесс

Поскольку подключить планировалось только USB и питание, необходимости в плате разработки и корпусе не было, заказал только сам модуль.

Консоль обнаруживается на TXD2-RXD2, 115000 8N1.
Для работы USB в режиме host на пин 21 надо подать 5V (сам модуль работает только на 3.3V), а пин 40 соединить с GND. Белый провод (D+) к пину 39, зеленый (D-) — к 38.
Производитель сообщил, что линии данных кабеля USB можно подключать к модулю напрямую, интернет подсказал, что в этом случае лучше не использовать hot plug, то есть подключать-отключать USB-устройства при обесточенном модуле. Мне это подходит — я собираюсь подключить МФУ раз и навсегда.
OpenWRT был предустановлен один из давнишних Bleeding Edge, я его сразу же обновил до стабильного 12.09 Attitude Adjustment через веб-интерфейс.
Затем в OpenWRT был установлен пакет usbip, который подтянул за собой необходимые модули ядра и утилиты. Осталось дописать пару строк в автозагрузку:
/usr/sbin/usbipd -D
/usr/sbin/usbip bind --busid=1-1
«1-1» я взял из вывода списка подключенных USB-устройств в консоли OpenWRT:
usbip list -l

На клиентской стороне Ubuntu 13.10. Модули ядра в системе присутствуют, для их автоматической загрузки необходимо их (usbip_core, vhci_hcd) добавить в /etc/modules
Userspace-утилиты, впрочем, отсутствуют. Не стоит ставить их из репозиториев, там версия 0.1.7-3, работать с версией 1.1.1 на OpenWRT не будет. Сделать можно следующим образом:
sudo apt-get install linux-sources
tar -jxf /usr/src/linux-source-3.11.0/linux-source-3.11.0.tar.bz2 
cd drivers/staging/usbip/userspace/
./autogen.sh
./configure
make
sudo make install
Теперь для подключения МФУ мне достаточно выполнить
sudo usbip attach --remote=192.168.2.16 --busid=1-1

Недостатки

Основной недостаток заключается в том, что соединение usbip-сервера и usbip-клиента — это соединение один-к-одному, то есть если один клиент подключил себе USB-устройство сервера, то другие уже не могут его себе подключить, пока оно не будет отключено первым. Для такого случая можно напрячься и написать страницу управления usbip в веб-интерфейсе OpenWRT, но мне это пока не грозит, МФУ будет использоваться только с одного рабочего места.
Еще недостатком может стать то, что, теоретически, скорость линка по Wi-Fi меньше, чем по USB-кабелю, но в моем частном случае данные при сканировании медленнее идут по кабелю, но это наверное мои локальные проблемы.

Планы на будущее

Сейчас питание модуля у меня осуществляется с помощью DC-преобразователя 12V в 5V и 3.3V:

Он громоздкий и сам занял бы отдельный спичечный коробок. Ему на смену едет из Китая DC-преобразователь 5V в 3.3V, вот такой:

Он совсем малыш и поместится в один спичечный коробок с Carambola (без пинов). Питаться все это станет от старенького телефонного зарядника.
Предел мечтаний — поместить этот коробок внутрь корпуса МФУ, вдруг там найдется местечко, да найти там внутри источник 5V, или по крайней мере еще место под преобразователь с AC 220V. Но на это я решусь только после окончания срока гарантийного ремонта.

Разработка и тестирование:


(Цвета проводков питания произвольны)

Результат

Через два дня после написания топика, быстро как никогда (за пару недель вместо обычных четырех-пяти) приехал из Китая преобразователь напряжения, теперь проект завершен:

Добавка в веб-интерфейс OpenWRT для освобождения USB-устройства: disik.ru/uploads/luci-usbip.tar.gz
Tags:
Hubs:
+31
Comments 29
Comments Comments 29

Articles