Осьминог без фруктов, или 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%, камеру привешивать я не рискнул. Да, 'апельсинка' в этом плане более интересна. Но в целом, времени и средств на проделанную работу не жалко. Опять же, если у вас есть ненужный роутер с сопоставимыми характеристиками - можно заставить его приносить пользу.
Еще больше интересных статей
Изменения в следующей версии 3D-принтер PonyBot
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
•Порт...
Скорость, температура и перевод RAMPS 1.5 на 24В
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
350х350х500. Чертежи и модели.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
По мне, какой нибудь kingroon....
это понятно)) понято пока не г...
Просто раскомментировать code:...
Можно ли сделать 3d принтер за...
Всем доброго времени суток!&nb...
POWER_LOSS_RECOVERY (НЕ РАБОТА...
Здравия, други! Внезапно появи...