Металл2024 Реклама
Метобр2024 Реклама

Осьминог в кармане или устанавливаем OctoPrint на телефон

emlonlife
Идет загрузка
Загрузка
27.11.2019
20996
57
Техничка

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

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

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

55

Уже давно установил ОстоПринт на ноутбук. Ноут у меня старый, но рабочий (установлен Linux Mint), а с линуксом обрел новую жизнь, часто на нем работаю, а еще установил на него Fusion 360 и теперь вообще красота. Но далеко не всегда удобно сидеть возле принтера. Раскошелиться на Малинку или Апельсинку до сих пор не решился, но задался вопросом — а нельзя ли запустить дистрибутив линукса на телефоне и на нем Окту? У меня полно старых телефонов на андроиде, где-то экран разбит, где-то тач не работает, где-то марально устарел. Поэкспериментировав понял, что можно и даже не столь уж сложно. 

Я в линукс системах совсем дуб, вот совсем-совсем, но все же получилось настроить абсолютно рабочий OctoPrint на смарте с Андроидом на борту. Один важный момент — для полноценной работы необходимо получить рут права на смартфоне. Благо сделать это очень просто — полчаса-час чтения на 4pda в ветке смартфона и готово.
Итак, преступим.
Осьминог в кармане или устанавливаем OctoPrint на телефон
Начнем с хардварной части. 
К сожалению, подключать OTG устройства и одновременно заряжать смарт не получится, т.к. это физически невозможно из-за специфики работы otg, на сколько мне удалось выяснить. Если я не прав и кто-то в комментариях поправит меня и скажет как это возможно, тогда будет еще проще.
Итак, от батареи придется отказаться. Я припаял к контактной площадке подключения акб два провода, подключил (временно) к БП 12В понижайку (такую), выставил на ней 5В и ограничил ток в 3А, запустил телефон и все отлично работает. Правда, показывает 1% заряда, но нам это не страшно :) Хотя данные понижайки можно использовать для заряда Li-Ion батарей, возможно можно и батарею сохранить в телефоне, но я за безопасность. Так же, полагаю, хорошее ЗУ от телефона тоже пойдет. Я же, когда замоделю и распечатаю корпус под свой телефон с возможностью использовать как вторую камеру (об этом в самом конце) подключу его через эту же понижайку к БП принтера. В таком случае придется пожертвовать временем (для загрузки телефона), но это для меня не страшно.
Осьминог в кармане или устанавливаем OctoPrint на телефон
Еще нам понадобится OTG хаб с дополнительным питанием, я купил на алике такой. Дешевый, но работает безотказно.
Ну и само собой понадобятся такие мелочи как 3D принтер, веб-камера (у меня Logitech C270, купленная на авито за 500р), блок питания от телефона для хаба, OTG переходник для вашего телефона.
Осьминог в кармане или устанавливаем OctoPrint на телефон
С хардварной частью покончено)
Теперь про софт.
Качаем замечательную апк
Из описания: «Это приложение с открытым исходным кодом, предназначенное для автоматизации процесса установки, конфигурирования и запуска GNU/Linux дистрибутивов на платформе Android внутри контейнера chroot.»
Запускаем, переходим в настройки, ставим галочки на «Не отключать WiFi», «Блокировка сна», «Автозапуск» и ставим необходимую задержку, «Режим отладки», «Журналирование». Последние две помогут в случае, если возникнут ошибки.
Далее возвращаемся на главный экран программы, внизу справа давим на иконку конфигурации и настраиваем как у меня, за исключением пароля, разумеется (можно, конечно, и другие пробовать дистрибутивы и версии, но с этими настройками у меня все работает и команды консоли приведены именно для них):Осьминог в кармане или устанавливаем OctoPrint на телефон
Далее на главном экране приложения в верхнем левом углу тапаем на три точки и «Установить». Программа запросит рут права, подтверждаете и начинается установка дистрибутива. 
По окончании установки подключаем по OTG наш хаб с подключенными к нему камерой, принтером (разумеется, если у вас не работает тач, то подключаем его вместе с подключенной к нему мышью еще до установки Linux Deploy, иначе как вы уго установите, сконфигурируете и запустите :D)
Теперь необходимо подключиться к развернутой системе по ssh, я делаю это в линуксе командой
ssh имя_пользователя@ip_телефона
На компе с Виндой можно установить Pytty. Впрочем, в линуксе тоже можно его установить :)
bash
sudo nano /etc/rc.local
Записываем в файл:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/home/pi/scripts/ttyrun
/home/pi/scripts/webcam start
service octoprint start
exit 0
Далее:
sudo nano /etc/systemd/system/rc-local.service
Записываем:
[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
 
[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99
 
[Install]
 WantedBy=multi-user.target
Далее:
sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
Установка октопринт
sudo apt update
sudo apt install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential -y
mkdir OctoPrint && cd OctoPrint
virtualenv venv
source venv/bin/activate
pip install pip --upgrade
pip install https://get.octoprint.org/latest
sudo usermod -a -G tty pi
sudo usermod -a -G dialout pi
deactivate
Но тут я столкнулся с проблемой. Пользователь pi добавляется в группы tty и dialout, но все равно не имеет доступа к порту. Хотя неделей раньше все работало как часы. Я потратил одну бессонную ночь, но так и не смог разобраться, но, повторюсь, я совсем новичок в Линукс системах. Я пошел по пути костылей – работает безотказно и хорошо. Возможно кто-то в комментариях поправит и найдет способ обойтись без костылей.
Итак, создадим скрипт, меняющий права доступа к порту:
cd ~
mkdir scripts
cd scripts
nano ttyrun
Добавим:
#!/bin/bash
chmod a+rw /dev/ttyACM0
Сделаем выполняемым
chmod +x /home/pi/scripts/ttyrun
Если у вас порт будет отличаться от ttyACM0 соответственно указываете свой.
Продолжим.
sudo apt install wget
wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init && sudo mv octoprint.init /etc/init.d/octoprint
wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.default && sudo mv octoprint.default /etc/default/octoprint
sudo chmod +x /etc/init.d/octoprint
sudo nano /etc/default/octoprint
В открывшемся файле раскомментируем путь к исполняемому файлу, т.е. уберем знак # перед строкой 
DAEMON=/home/pi/OctoPrint/venv/bin/octoprint
sudo update-rc.d octoprint defaults
Осьминог в кармане или устанавливаем OctoPrint на телефон
Займемся USB камерой
cd ~
sudo apt install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake -y
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=.
make
cd ~
nano /home/pi/scripts/webcam
Добавим:
#!/bin/bash
# Start / stop streamer daemon
case "$1" in
    start)
        /home/pi/scripts/webcamDaemon >/dev/null 2>&1 &
        echo "$0: started"
        ;;
    stop)
        pkill -x webcamDaemon
        pkill -x mjpg_streamer
        echo "$0: stopped"
        ;;
    *)
        echo "Usage: $0 {start|stop}" >&2
        ;;
esac

nano /home/pi/scripts/webcamDaemon

Добавим:

#!/bin/bash

MJPGSTREAMER_HOME=/home/pi/mjpg-streamer/mjpg-streamer-experimental

MJPGSTREAMER_INPUT_USB="input_uvc.so -d /dev/video3"

# init configuration

camera_usb_options="-r 1280x720 -f 25"

if [ -e "/boot/octopi.txt" ]; then

    source "/boot/octopi.txt"

fi

# runs MJPG Streamer, using the provided input plugin + configuration

function runMjpgStreamer {

    input=$1

    pushd $MJPGSTREAMER_HOME

    echo Running ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"

    LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www" -i "$input"

    popd

}

# starts up the USB webcam

function startUsb {

    logger "Starting USB webcam"

    runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options"

}

# we need this to prevent the later calls to vcgencmd from blocking

# I have no idea why, but that's how it is...

vcgencmd version

# echo configuration

echo usb options: $camera_usb_options

# keep mjpg streamer running if some camera is attached

          startUsb

done

Обращаю внимание на строчку “MJPGSTREAMER_INPUT_USB="input_uvc.so -d /dev/video3"” в скрипте. Здесь необходимо указать каким номером монтируется вебка. На всех телефонах, что я пробовал, всегда монтировалась как video3. Если все же нужно узнать, то линуксоводы и без меня знают как, а таким же как и я “индейцам” проще всего будет введя команду

ls /dev/video*

сначала при подключенной камере, а затем при отключенной. Пропавшее устройство и будет искомым. Записываем его в скрипт и перезагружаем Linux Deploy. Итак, далее:

chmod +x /home/pi/scripts/webcam
chmod +x /home/pi/scripts/webcamDaemon

Вот и все, останавливаем Debian нажав в Linux Deploy „стоп“ и запускаем нажав „старт“, переходим по ip_телефона:5000 (ip указан в linux deploy вверху)

Делаем первоначальную настройку, для камеры указываем:

Stream URL: http://ip octoprint:8080/?action=stream

Snapshot URL: http://ip octoprint:8080/?action=snapshot

Path to FFMJPEG: /usr/bin/ffmpeg

Далее либо юзаем как заново настроенный ОктоПринт, либо делаем бэкап работающего ранее на ноуте (как в моем случае) и заливаем его на новоиспеченный ОктоПринт на телефоне, сохранив всю статистику и настройки.

Осьминог в кармане или устанавливаем OctoPrint на телефон

Еще момент. Если юзаете Printoid, то на телефон можно установить программу стриминга с основной камеры (я пользуюсь этой) и в настройках Printoid'a добавить вторую камеру. Тут без подробностей, кому надо и сами поняли для чего это и как сделать. Так же можно поставить плагин для октопринта MultiCam.

Еще можно установить плагин веб-интерфейса оптимизированный для мобилок и на самом телефоне открыть через браузер (если тач у телефона рабочий) интерфейс октопринта и получить сенсорный экран для принтера :)

Осьминог в кармане или устанавливаем OctoPrint на телефон

Собственно, на этом все. Получилась инструкция громоздкая, но подробная. 

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

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

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

55
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама