san.net.ru

Пошаговая установка и настройка OctoPrint на ROCK Pi S (D4W).

Являясь владельцем 3D принтера, по достоинству оценил возможности управления устройством с помощью программы OctoPrint, позволяющей по сети загружать файлы для печати, управлять включением/отключением нагревателей, просматривать g-code и контролировать процесс печати через web-камеру. Все эти возможности я испытал с помощью сборки OctoPi, для установки которой рекомендуются Raspberry Pi 3B, 3B+, 4B или Zero 2. С появлением ещё одного 3D принтера (и отсутствием подходящей Raspberry Pi), я решил опробовать другой вариант. Имея опыт использования OctoPi, я подобрал одноплатный компьютер удовлетворяющий требованиям для работы всего комплекса программ - это ROCK Pi S модель D4W (4 ядра ARM64 с частотой работы до 1.3ГГц, ОЗУ 512Mb, сеть: 10/100 Мбит, Wi-Fi 2.4ГГц, USB 2.0, MicroSD).

Поставляется ROCK Pi S в пластиковом боксе с защитной наклейкой "radxa", в комплекте одноплатник и ничего. Стоимость 1849 руб. на декабрь 2021 г. Для запуска и нормальной работы необходимы:

Хочу отметить, что в моих 3D принтерах установлены управляющие платы "клоны" BIGTREETECH-SKR-V1.3, подключение к ним производится по UART (с помощью 3-х проводов).

Электропитание ROCK Pi S от отдельной зарядки для телефона со шнурком Type-C.

Установка операционной системы Debian Buster на ROCK Pi S.

Установка Debian на ROCK Pi S классическая: скачивание образа (на момент написания статьи, последний образ rockpis_debian_buster_server_arm64_20210924_0412-gpt.img из раздела загрузок), запись образа на MicroSD карту, вставляем карту, подаём питание, видим моргание синим светодиодом.

Подключиться к ROCK Pi S можно несколькими способами, один из которых по SSH зная IP-адрес. Важно отметить, что подключиться к Wi-Fi (прописать сеть и пароль) не получается, пока не попадём в работающую операционную систему. Я подключил ROCK Pi S к роутеру с помощью Ethernet кабеля. На роутере "подглядываем" IP-адрес для устройства "rockpi". Вся процедура подробно описана на Wiki.

Подключение к WiFi:
sudo nmcli r wifi on
nmcli dev wifi # Вывод списка сетей
sudo nmcli dev wifi connect "имя_wifi_сети" password "пароль_wifi_сети"
sudo reboot # Необязательно

Подключение Web-камеры в Debian (установка нового ядра Debian).

При подключении USB Web-камеры выяснилось, что в предлагаемом ядре Debian напрочь отсутствует поддержка USB_GSPCA устройств.

После подключения камеры к Вашему ROCK Pi S, командой sudo ls /dev/video* Вы можете проверить поддержку камеры ядром. В случае если в выводе есть устройства video0 (или с другим номером), то в ядре есть поддержка, иначе меняйте ядро.
Важно: в представляемом ядре я выключил практически всё, что считал лишним. В том числе поддержку IPv6.

Если Вы можете скомпилировать ядро сами, то представляю Вам .config с поддержкой большинства USB web-камер, иначе, предлагаю готовые пакеты ядра:

Полагаем, что Ваш ROCK Pi S подключен к сети с выходом в Internet. Для начала установим программу wget. В консоль вводим команду:
sudo apt-get install wget
При использовании sudo Вы повышаете свой уровень в системе до root и Вам требуется ввод пароля "rock", если Вы не сменили пароль ранее.

Далее скачиваем необходимые пакеты в директорию kernel:
cd ~
mkdir kernel
cd kernel
wget http://san.net.ru/3d/kernel/linux-headers-4.4.143-67-rockchip-g01bbbc5d1312_4.4.143-67-rockchip_arm64.deb http://san.net.ru/3d/kernel/linux-image-4.4.143-67-rockchip-g01bbbc5d1312_4.4.143-67-rockchip_arm64.deb

Устанавливаем в систему скачанные пакеты командами:
sudo dpkg -i linux-headers-4.4.143-67-rockchip-g01bbbc5d1312_4.4.143-67-rockchip_arm64.deb
sudo dpkg -i linux-image-4.4.143-67-rockchip-g01bbbc5d1312_4.4.143-67-rockchip_arm64.deb

С целью проверки установки, введите:
cat /boot/uEnv.txt
Если в последних трёх выведенных строках будет:
kernelversion=4.4.143-67-rockchip-g01bbbc5d1312
initrdimg=initrd.img-4.4.143-67-rockchip-g01bbbc5d1312
kernelimg=vmlinuz-4.4.143-67-rockchip-g01bbbc5d1312

значит всё установлено и можно смело перезагружать систему с новым ядром.

По умолчанию, при загрузке операционной системы, ROCK Pi S резервирует память для каких-то целей. Вернуть память в систему можно дополнив файл uEnv строкой extraargs=swiotlib с помощью комманды:
sudo sh -c 'echo "extraargs=swiotlb=1024 # Add 62.4 Mb memory" >> /boot/uEnv.txt'

Для перезагрузки введите:
sudo reboot

Установка в Debian необходимых пакетов.

В нашу свежеустановленную систему необходимо установить инструментарий для скачивания и установки OctoPrint. Для этого необходимо подключиться по SSH к ROCK Pi S и выполнить команду:
sudo apt-get install python3-pip python3-dev python3-setuptools python3-venv libyaml-dev build-essential git

Для корректной работы программ (от имени пользователя rock), учётную запись необходимо включить в ряд групп с помощью команды:
sudo usermod -a -G tty rock
sudo usermod -a -G dialout rock

Готовим окружение для OctoPrint на python-е с помощью следующих команд:
cd ~ && mkdir OctoPrint && cd OctoPrint
python3 -m venv venv
source venv/bin/activate
pip install pip --upgrade

Устанавливаем и запускаем OctoPrint.

Установка выполняется командой:
pip install octoprint

После завершения выполнения, в Вашей системе будет установлен работающий OctoPrint. Можно произвести тестовый запуск выполнив:
~/OctoPrint/venv/bin/octoprint serve
и перейдя браузером на страницу: http://aa.bb.cc.dd:5000/, где aa.bb.cc.dd - ip адрес Вашего Rock Pi S в Вашей локальной сети.

Обратите внимание на форму адреса http://aa.bb.cc.dd, в дальнейшем я буду неоднократно обращаться к этой форме, подразумевая, что Вы будете вводить ip адрес Вашего ROCK Pi S.

В случае успеха и открытия страницы первоначальной настроечной страницы OctoPrint, предлагаю прервать выполнение (в консоле Ctrl+C) и настроить автозапуск. Для этого необходимо скачать скрипт и включить его выполнение при запуске Debian:
sudo wget -O /etc/systemd/system/octoprint.service http://san.net.ru/3d/services/octoprint.service
sudo systemctl enable octoprint

После перезагрузки системы (sudo reboot) и в случае безошибочного выполнения всех вышеописанных действий, Ваш Debian с установленным OctoPrint готов к использованию. Проверьте, после перезапуска (около минуты), в браузере перейдите по адресу: http://aa.bb.cc.dd:5000/. Если открывается страница настройки - ПОЗДРАВЛЯЮ, Вы можете настраивать OctoPrint, пытаться подключаться к принтеру через порт USB и печатать.

Сборка и установка mjpg-streamer.

Для удалённого наблюдения за печатью и сохранения роликов, помимо подключения Web-камеры, требуется установить и запустить программы mjpg-streamer и ffmpeg. Установка необходимого инструментария и программ производится следующими командами:
sudo apt-get install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake
cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=.
make

Проверим работу собранного mjpg-streamer. Произведём запуск:
sudo ./mjpg_streamer -i "input_uvc.so -d /dev/video0 -fps 5" -o "output_http.so"
В браузере переход по адресу: http://aa.bb.cc.dd:8080/?action=stream
Если Вы в открывшейся странице браузера видете изображение с подключенной Web-камеры, значит все получилось и мы продолжаем установку.

Возвращаемся в консоль, прерываем исполнение запущенного для теста mjpg_streamer (Ctrl+C) и выполняем установку в систему командой:
sudo make install

После удачной компиляции, теста и установки, необходимо добавить и включить скрипт автозапуска:
sudo wget -O /etc/systemd/system/mjpg_streamer.service http://san.net.ru/3d/services/mjpg_streamer.service
sudo systemctl enable mjpg_streamer

Настройка OctoPrint (команды запуска, остановки и управления Web-камерой).

В процессе работы с OctoPrint требуется иметь возможности выполнить ряд задач:

Для выполнения перечисленных команд из OctoPrint, нам нужно сделать так, чтобы при выполнении управляющей команды через sudo не требовалось вводить пароль в консоле. Такое поведение системы можно прописать в конфигурационном файле /etc/sudoers. Для этого выполним:
sudo sh -c 'echo "rock ALL=(ALL) NOPASSWD: /usr/sbin/reboot, /usr/sbin/shutdown, /usr/sbin/service # for OctoPrint" >> /etc/sudoers'

После первоначальной настройки OctoPrint Вы попадаете на основной экран. При нажатии на "гаечный ключ" открывается окно настроек. В нем необходимо перейти в пункт Server и в полях вставить текст команд:

полекоманда
Restart OctoPrintsudo service octoprint restart
Restart systemsudo reboot
Shutdown systemsudo shutdown -P now

В пункте Webcam & Timelapse в полях вставить текст команд:

полекоманда
Stream URLhttp://aa.bb.cc.dd:8080/?action=stream
Snapshot URLhttp://127.0.0.1:8080/?action=snapshot
Path to FFMPEG/usr/bin/ffmpeg

Для получения меню по управлению mjpg-streamer, Вам необходимо выполнить следующие команды:
cd ~
wget http://san.net.ru/3d/cfg.yaml
cat cfg.yaml >> ~/.octoprint/config.yaml

После рестарта OctoPrint вы получите меню управления, как на скрине ниже.

Подключение 3D принтера по UART

В данный момент у Вас ROCK Pi S работающий под Debian с установленным OctoPrint и настроенной Web-камерой. Подключить 3D принтер можно USB шнурком (возможно через Хаб), но USB порт можно освободить при подключении к принтеру по UART. ROCK Pi S обладает 3 UART портами. Один из них (UART0) по умолчанию используется консолью (один из способов подключения и управления Rock Pi S). Я предлагаю использовать UART1 для подключения к 3D принтеру. UART1 необходимо включить изменением файла /boot/uEnv.txt. В нём необходимо изменить строку overlays=rk3308-uart0 на overlays=rk3308-uart0, rk3308-uart1 (через запятую дописать rk3308-uart1).

Для выполнения этой задачи необходимо воспользоваться текстовым редактором. Я предлагаю установить nano с помощью команды:
sudo apt-get install nano

Далее редактируем как описано выше файл/boot/uEnv.txt вызвав редактор:
sudo nano /boot/uEnv.txt

После перезагрузки системы (sudo reboot) Ваш OcpoPrint сможет работать с 3D принтером через устройство /dev/ttyS1. Осталось только физически подключить принтер через UART1. На странице Wiki (GPIO) ищем таблицу "26-pin Header 1" для Вашей аппаратной версии ROCK Pi S. Для версий 1.2 и 1.3 UART1 использует пин 23 для сигналов RX (приём) и пин 24 для сигналов TX (передача), также на пин 25 есть земля (GND) необходимая для коммутации.

Для SKR V1.3 первый порт UART разведён на разъём TFT (SKR V1.3 Pin).

Подключение неоходимо выполнить соединяя следующие выводы на полностью обесточенном оборудовании:

Rock Pi SSKR V1.3
23 - RXTFT - TX0
24 - TXTFT - RX0
25 - GNDTFT - GND

Выполнив подключение 3D принтера по UART, мы освобождаем один порт USB, который можно использовать для электропитания ROCK Pi S (в моём случае) или для управления чем-то полезным. Я думаю, что запитать ROCK Pi S можно через выводы с номерами 4 и 6.

Изменение режима работы светодиодов

В процессе работы, мне не нравится постоянное мигание очень ярким синим светодиодом. Я определил, что мне нужна индикация работы ядра зелёным светодиодом, а яркий синий светодиод должен быть индикатором обращения к sdcard. Написан скрипт, который меняет режим работы светодиодов при старте Debian. Скачать и включить этот скрипт можно выполнив следующие комманды:
sudo wget -O /etc/init.d/leds http://san.net.ru/3d/init_d.leds
sudo chmod +x /etc/init.d/leds
sudo update-rc.d leds defaults
sudo /etc/init.d/leds start

Если Вы захотите вернуть обычное поведение светодиодов, то выполните: sudo update-rc.d leds remove и перезагрузите Debian.