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

emlonlife
Идет загрузка
Загрузка
27.11.2019
3846
25
печатает на Wanhao Duplicator i3 Plus
Техничка

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

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

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

44

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

Я в линукс системах совсем дуб, вот совсем-совсем, но все же получилось настроить абсолютно рабочий OctoPrint на смарте с Андроидом на борту. Один важный момент — для полноценной работы необходимо получить рут права на смартфоне. Благо сделать это очень просто — полчаса-час чтения на 4pda в ветке смартфона и готово.
Итак, преступим.
Начнем с хардварной части. 
К сожалению, подключать OTG устройства и одновременно заряжать смарт не получится, т.к. это физически невозможно из-за специфики работы otg, на сколько мне удалось выяснить. Если я не прав и кто-то в комментариях поправит меня и скажет как это возможно, тогда будет еще проще.
Итак, от батареи придется отказаться. Я припаял к контактной площадке подключения акб два провода, подключил (временно) к БП 12В понижайку (такую), выставил на ней 5В и ограничил ток в 3А, запустил телефон и все отлично работает. Правда, показывает 1% заряда, но нам это не страшно :) Хотя данные понижайки можно использовать для заряда Li-Ion батарей, возможно можно и батарею сохранить в телефоне, но я за безопасность. Так же, полагаю, хорошее ЗУ от телефона тоже пойдет. Я же, когда замоделю и распечатаю корпус под свой телефон с возможностью использовать как вторую камеру (об этом в самом конце) подключу его через эту же понижайку к БП принтера. В таком случае придется пожертвовать временем (для загрузки телефона), но это для меня не страшно.
Еще нам понадобится OTG хаб с дополнительным питанием, я купил на алике такой. Дешевый, но работает безотказно.
Ну и само собой понадобятся такие мелочи как 3D принтер, веб-камера (у меня Logitech C270, купленная на авито за 500р), блок питания от телефона для хаба, OTG переходник для вашего телефона.
С хардварной частью покончено)
Теперь про софт.
Качаем замечательную апк
Из описания: «Это приложение с открытым исходным кодом, предназначенное для автоматизации процесса установки, конфигурирования и запуска GNU/Linux дистрибутивов на платформе Android внутри контейнера chroot.»
Запускаем, переходим в настройки, ставим галочки на «Не отключать WiFi», «Блокировка сна», «Автозапуск» и ставим необходимую задержку, «Режим отладки», «Журналирование». Последние две помогут в случае, если возникнут ошибки.
Далее возвращаемся на главный экран программы, внизу справа давим на иконку конфигурации и настраиваем как у меня, за исключением пароля, разумеется (можно, конечно, и другие пробовать дистрибутивы и версии, но с этими настройками у меня все работает и команды консоли приведены именно для них):
Далее на главном экране приложения в верхнем левом углу тапаем на три точки и «Установить». Программа запросит рут права, подтверждаете и начинается установка дистрибутива. 
По окончании установки подключаем по 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
Займемся 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

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

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

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

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

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

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

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

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

Комментарии

27.11.2019 в 18:01
3

Крутотень. Я так и не осилил. А про пляски вокруг OTG писал тут.

27.11.2019 в 18:06
1

Ого, а я искал инфу на тему окты на смартфоне - ни чего не нашел. Плохо искал, значит :)

Все новое - плохо исканное старое :D

28.11.2019 в 01:38
1

Лет 6 назад интересовался по поводу OTG+зарядка, так умели  только самсунги в те времена(а еще спалил OTG в телефоне)

27.11.2019 в 18:19
1

Если бы можно было поставить два лайка, то поставил бы три! Спасибо, как раз валяется парочка смартов)

27.11.2019 в 18:25
2

Хорошая идея. У меня давно лежит парочка разбитых смартов с вполне себе нормальными для окты ТТХ. В копилку и к реализации!

27.11.2019 в 18:40
1

А про удаленное подключение из сети (не локальной) ???

27.11.2019 в 18:42
0

Пятью постами ранее в этом разделе был отличный пост.

27.11.2019 в 18:42
1

Это всё фигня несложная... Интереснее достучаться до камеры телефона, а этого не получилось сделать даже на мейзу МХ4 под родной убунтой... Также, можно вытащить из телефона простой uart, но по USB, конечно, надёжнее. Особенно, если это usb-cdc на skr.

27.11.2019 в 19:59
1

Интересно, получится ли запустить клиппер.

Автор молодец!

27.11.2019 в 21:52
0

у меня скр 1.3 с 2208 по уарт, понятия не имею про клиппер, он мне не нужен)

28.11.2019 в 21:49
0

Я запускал, на полумертвом "детском" планшете, работал. А еще можно покдлючить блютус-сериал к материнке и поставить на телефон OctoScreen и будет и экран и мозг и без OTG.

Про блютус сериал есть чутка информации на reprap.org. Но там есть ошибки, на форуме про них есть информация.

В планах есть написать How-To. Но очень не скоро.

27.11.2019 в 20:29
0

А klipper  в добавок еще потянет ?

27.11.2019 в 20:34
0

уверен, что потянет, он не тяжелый

вопрос - встанет ли, не упрётся ли где (скорость обмена данными)?

27.11.2019 в 22:11
1

Ура! Я теперь могу ставить плюсики, первый за эту статью!!! Тут читал много статей как экраны от разных устройств или покупные приделывают к ардуине, апельсинке, кто-то от старого смартфона приспосабливал, и тоже вопрос возникал, а если смартфон целый, может его целиком приспособить к принтеру, а тут вариант уже описан. Правда у меня из ненужных смартфонов это Nokia N8 на Simbian, а с ним можно что-то подобное сделать без Андроида? Ну или не куроча его хотя бы экран задействовать... Тут еще попутный вопрос, может кто подскажет как тачскрин задействуется? может ссылку на универсальную плату подбросит или теорию? )))

27.11.2019 в 23:25
0

выставил на ней 5В и ограничил ток в 3А, запустил телефон и все отлично работает. Правда, показывает 1% заряда, но нам это не страшно :) 

А акб у вас сколько выдает? тоже 5в, или все-же 4.2в при полном заряде?

5в- это много, да и ток можно ограничить до 1.5-2а.  Главное чтоб WIFi хватало. Максимально ток жрет модуль GSM, GPS

27.11.2019 в 23:47
0

2 ампера максимум замечал, при загрузке смарта и при одновременной работе камеры и Linux Deploy, так что 1,5а не хватит, да и 2 не надёжно. 

28.11.2019 в 00:25
1

По использование устаревших смартов вроде понял.

Не очень понял, как из смарта с битым экраном получить замену Малинке...

(я в курсе, что у adb есть и настольный вариант для "удаленки")

Надеюсь Уважаемый Vasyna пояснит для всех.

28.11.2019 в 01:39
0

А если еще телефон использовать как ip камеру? Или одновременно с linux нельзя?

28.11.2019 в 01:42
0

А если чуть внимательнее прочесть статью? В частности, последние 3 абзаца. 

28.11.2019 в 18:58
1

Вот примерВ статье не делал этого, так как не готовы держатели вебки и смарта

28.11.2019 в 02:48
2

Побольше бы таких статей на ресурсе! А то: "какой бы мне принтер купить?", да ссылки на чужие видео )))

28.11.2019 в 07:18
1

Жека, я всегда говорил что ты рукоблуд)) А ты всё - рукожоп, рукожоп... Круто сделал! 

28.11.2019 в 10:41
0

:D:D:D

02.12.2019 в 14:47
0

Класс!!!

вопрос- а если телефон с виндоус мобайл? прокатит такой фокус?

ЕМНИП телефон  HTC

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Sirius Hardlight - Принтер который вы искали

Печатаем гибкую, эластичную, мягкую деталь полимерником

КОМПАС-3D v18 Home. Основы 3D-проектирования. Часть 16.3. Создание игрушечного паровоза. Крыша и тележка паровоза

Boot or not to boot или ректальная реанимация MKS TFT32.

Контейнеры для филамента, которые я использую.

Спасение новогодней елки