Кремень КД Реклама
Кремень КМ Реклама

Осьминог без фруктов, или OctoPrint под OpenWRT

eta4ever
Идет загрузка
Загрузка
17.10.2016
14372
55
RepRap

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

41
Осьминог без фруктов, или OctoPrint под OpenWRT
Не углубляясь в апокалиптично-скайнетовый 'интернет вещей', отмечу, что сейчас уже чуть ли не из каждого утюга торчат уши антарктической птицы с финскими корнями. А значит, мы этот утюг будем к 3D-принтеру подключать, чтобы через OctoPrint управлять. Утюгом будет мини-роутер на чипе MT7620A под управлением OpenWRT.

Отправной точкой для меня послужила заметка, автор которой буквально на помойке нашел роутер, расчехлил бубен и сделал полезную вещь. У меня ненужного подходящего роутера не нашлось, поэтому пришлось виртуально зарулить к китайцам и выбрать какую-нибудь штуку, которую потом можно будет использовать по прямому назначению.
Осьминог без фруктов, или OctoPrint под OpenWRT
Мини-роутер GL-MT300A основан на MIPS-чипе MT7620A, работающем на частоте 568 МГц. В той же коробочке - 128 Мб оперативной памяти, 16 Мб флеша, два проводных сетевых интерфейса (WAN и LAN), слот microSD, USB и вайфайка. Характеристики для домашнего роутера вполне солидные, а вот если сравнить с апельсинкой - все очень и очень скромно. При этом, стоимость изделия не бросовая, порядка 2000 рублей. Ладно, гулять так гулять.

Задача облегчается тем, что на роутер уже установлена OpenWRT. Это легчайший linux-дистрибутив, заточенный именно под роутерную функциональность. Что не мешает к нему приделать бормотограф и сноповязалку. Да, дальше будут грабли, которые можно рассматривать как пошаговое руководство, но не совсем 'для чайников'.
Осьминог без фруктов, или OctoPrint под OpenWRT
Для начала, прибьем все китайство, залив 'чистую' прошивку 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 к подобному виду:
Осьминог без фруктов, или OctoPrint под OpenWRT
Перезагружаем роутер. Теперь что 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 под OpenWRT
После этого у меня успешно прошла установка 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, модули тоже есть.
Осьминог без фруктов, или OctoPrint под OpenWRT
Еще пригодится usbutils, в этом пакете lsusb. В итоге нам надо получить /dev/ttyUSB0 или /dev/ttyACM0, чтобы в OctoPrint указать как порт принтера. Если заработало, можно добавить octoprint --iknowwhatimdoing в /etc/rc.local, чтобы он стартовал при загрузке роутера.
Осьминог без фруктов, или OctoPrint под OpenWRT
Результатом данного экзерсиса у нас является странное устройство. Роутер с 3D-принтсервером. Что характерно, работает. Загрузка процессора при печати достигает 25-35%, камеру привешивать я не рискнул. Да, 'апельсинка' в этом плане более интересна. Но в целом, времени и средств на проделанную работу не жалко. Опять же, если у вас есть ненужный роутер с сопоставимыми характеристиками - можно заставить его приносить пользу.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

41
Комментарии к статье