Осьминог без фруктов, или OctoPrint под OpenWRT
Отправной точкой для меня послужила заметка, автор которой буквально на помойке нашел роутер, расчехлил бубен и сделал полезную вещь. У меня ненужного подходящего роутера не нашлось, поэтому пришлось виртуально зарулить к китайцам и выбрать какую-нибудь штуку, которую потом можно будет использовать по прямому назначению.Мини-роутер GL-MT300A основан на MIPS-чипе MT7620A, работающем на частоте 568 МГц. В той же коробочке - 128 Мб оперативной памяти, 16 Мб флеша, два проводных сетевых интерфейса (WAN и LAN), слот microSD, USB и вайфайка. Характеристики для домашнего роутера вполне солидные, а вот если сравнить с апельсинкой - все очень и очень скромно. При этом, стоимость изделия не бросовая, порядка 2000 рублей. Ладно, гулять так гулять.
Задача облегчается тем, что на роутер уже установлена OpenWRT. Это легчайший linux-дистрибутив, заточенный именно под роутерную функциональность. Что не мешает к нему приделать бормотограф и сноповязалку. Да, дальше будут грабли, которые можно рассматривать как пошаговое руководство, но не совсем 'для чайников'.Для начала, прибьем все китайство, залив 'чистую' прошивку OpenWRT штатными средствами веб-интерфейса LuCI, без сохранения каких-либо настроек. При этом получаем кирпичик, который отзывается на ssh по адресу 192.168.1.1. Затем на нем настраивается доступ в интернет (в моем случае - просто DHCP-клиент на WAN). А вот дальше начинается веселье.
Встроенной памяти у нас и близко не хватит для всего нужного. Поэтому используется костыль под названием overlayfs. Расширить корневую файловую систему можно на USB-накопитель, а можно на microSD-карту. Более простые модели мини-роутеров SD-слота лишены, в таком случае придется использовать хаб. Я использовал microSD.
Первая пачка пакетов:
opkg update
opkg install luci kmod-rt2800-usb kmod-sdhci-mt7620 kmod-usb-storage kmod-fs-ext4 block-mount fdisk e2fsprogs nano
Теперь на mmcblk0 создаем во всю карту раздел ext4 с помощью fdisk и mkfs и добавляем щепотку черной магии.
Копирование overlay на карту:
mount /dev/mmcblk0p1 /mnt
tar -C /overlay -cvf - . | tar -C /mnt -xf -
umount /mnt
Создание шаблона fstab:
block detect > /etc/config/fstab
nano /etc/config/fstab
Приводим fstab к подобному виду:Перезагружаем роутер. Теперь что LuCI, что df -h должны радовать нас большим объемом файловой системы. Но это все была простая подготовительная работа, а теперь сюда надо воткнуть OctoPrint. Происходит это криво. Ну, начну с того, что venv не будет, ставим 'напрямую', запускаем от пользователя root. Неправильно это, но как proof-of-concept сгодится.
Вторая пачка пакетов:
opkg update
opkg install python-dev python-setuptools python-pip git unzip
Скачиваем OctoPrint:
cd /usr
git clone git clone git://github.com/foosel/OctoPrint.git
Тут я попытался установить OctoPrint традиционным способом (python setup.py install), но процесс стабильно падал на установке Babel с вердиктом 'No space left on device'. Оказывается, переполнялся /tmp. Ладно, поставим этот компонент отдельно. Поскольку 'из коробки' wget не работает с https, надо или его прикрутить, или скачать пакет на 'большом брате' и перекинуть на роутер любым доступным способом, например, по scp (для пользователей Windows есть pscp от автора putty). Затем распаковать и установить стандартным питоньим путем - python setup.py install.После этого у меня успешно прошла установка OctoPrint. Его можно попытаться запустить, octoprint --iknowwhatimdoing (мы же из-под root работаем). Если у кого-то запустится - это круто. У меня оно долго думало, а потом упало на webassets-0.12.0-py2.7.egg, с заявлением, что это не каталог. Походил я вокруг да около, пару раз все чистил и начинал с нуля - стабильность! Ладно, на дурака распаковал этот egg с помощью unzip. И тут оно завелось!
Думаете, happy end? Не, надо же еще принтер подцепить. А для этого третья пачка пакетов:
opkg install kmod-usb-acm --nodepends
opkg install kmod-usb-serial --nodepends
opkg install kmod-usb-serial-ftdi --nodepends
Причем, именно без разрешения зависимостей. Иначе они ругаются на версию ядра и не ставятся. А если заткнуть - ставятся и работают. Такой вот Linux way. Для других чипов, типа CH340G, модули тоже есть.Еще пригодится usbutils, в этом пакете lsusb. В итоге нам надо получить /dev/ttyUSB0 или /dev/ttyACM0, чтобы в OctoPrint указать как порт принтера. Если заработало, можно добавить octoprint --iknowwhatimdoing в /etc/rc.local, чтобы он стартовал при загрузке роутера. Результатом данного экзерсиса у нас является странное устройство. Роутер с 3D-принтсервером. Что характерно, работает. Загрузка процессора при печати достигает 25-35%, камеру привешивать я не рискнул. Да, 'апельсинка' в этом плане более интересна. Но в целом, времени и средств на проделанную работу не жалко. Опять же, если у вас есть ненужный роутер с сопоставимыми характеристиками - можно заставить его приносить пользу.
Еще больше интересных статей
Печать 4-мя сменными соплами в массы! Часть 1.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Работа над реализацией печа...
GCODE: Плюшки от Павлушки
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Сегодня хотелось бы рассказать о GCODE....
Мини лазерный гравер на деталях от DVD приводов и сканеров, с рабочей зоной 100х100 мм
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
а почему такое качество печати...
эммм....достойная замена всяки...
Яж написал это не наш метод
посоветуйте камеру что бы цепа...
Добрый день, поставил печатать...
пришлось удлинить провода возм...
Добрый день, хочу просить помо...