Диетический апельсиновый осьминог и USB камера - автомобильный видеорегистратор
Своей USB вебкамеры у меня никогда не было. Не нужная мне игрушка. Однако, с моей и с машины супруги в хозяйстве завалялась пара старых автомобильных видеорегистраторов. Регистратор с машины супруги Lexand погиб из-за раздувшейся батарейки, выгнуло плату и где-то что-то отвалилось (об этом я узнал уже после замены батарейки, регистратор стал виснуть), второй с моей прошлой машины - Highscreen, с машиной продал кабель питания, а кабель был хитрый, только с ним регистратор вставал автоматически на запись. Тоже не сразу понял почему регистратор на запись не встает, поменял батарейку, но бесполезно. Супруге и мне купили новые регистраторы, эти давно валялись дома.
Lexand удалось оживить, прогрев воздушным паяльником процессор и обвязку :).
Многие авто видео регистраторы умеют работать кард ридером и веб камерой. Решил воспользоваться данной возможностью и попробовать прикрутить камеру к апельсинке. Из двух регистраторов только Lexand захотел стать вебкой. Highscreen упорно прикидывался card reader-ом.
Единственный USB порт на Orange Pi Zero занят принтером, зато на плате есть 13pin гребенка под плату расширения, на которой есть выходы двух
USB. Решил ей и воспользоваться.
Вот распайка гребенки.
1x13 Header
1 5V
2 GND
3 USB-DM2
4 USB-DP2
5 USB-DM3
6 USB-DP3
7 LINEOUTR
8 LINEOUTL
9 TV-OUT
10 MIC-BIAS
11 MIC1P
12 MIC1N
13 CIR-RX
Первый вывод рядом с разъемом ethernet.
Обрезал usb кабель, к кабелю припаял разъемчик маму.Красный плюс, черный минус, белый и зеленый с данными. Их запаял как получится, с первого раза угадал. Вариантов то все равно 2, и регистратор или будет, или не будет работать.
Ставить поддержку камеры решил на DietPi и Orange Pi с 512Мб памяти. На этой моей апельсинке радиатор побольше.
Начинаем установку.
Как обычно через Putty заходим на апельсинку, под пользователем octoprint.
Инструкцию взял на официальной страничке октопринта.
sudo apt-get update && apt-get upgrade
cd ~
sudo apt-get install subversion libjpeg8-dev imagemagick libav-tools libv4l-dev cmake
При попытке установить получаем сообщение
Package libjpeg8-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
libjpeg62-turbo-dev
Пробуем еще раз
sudo apt-get install subversion libjpeg62-turbo-dev imagemagick libav-tools libv4l-dev cmake
Ждем долго, около 10 минут.
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
export LD_LIBRARY_PATH=.
make
За пару минут все скомпилировалось.
Для пробы запускаем
sudo ./mjpg_streamer -i './input_uvc.so' -o './output_http.so'
Фантастика, запустилось.
Заходим по адресу
http://IP адрес апельсинки/?action=streamНо изображение какое-то всё глючное, с непонятными артефактами, но оно есть. Хорошее начало!
Попробовал поэкспериментировать с ключами. mjpg_streamer выдает подсказку если где-то ошибиться в ключе.Интересуют нас ключи -r и -f
В итоге после экспериментов камера нормально запустилась в HD режиме -r HD
sudo ./mjpg_streamer -i './input_uvc.so -r HD -f 5' -o './output_http.so'
Эксперименты с FPS дали приемлемое значение -f 10
sudo ./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so'
Не смотрите не перевернутую картинку, мне регистратор так было удобнее поставить.Для того чтоб пользователь octoprint имел доступ к видеокамере, его надо включить в группу Video
sudo usermod -a -G video octoprint
После этого надо выйти из системы и заново войти под пользователем octoprint
Проверяем
cd mjpg-streamer/mjpg-streamer-experimental
./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so'
Теперь работает без sudo, отлично.
Пол дела сделано.
В качестве варианта запуска на официальной страничке октопринта предложено запускать с ключиком -w ./www
./mjpg_streamer -i './input_uvc.so -r HD -f 10' -o './output_http.so -w ./www'
Проверил, запускается. И ладно.
Для того чтоб иметь возможность запускать видео прямо из октопринта, создадим несколько скриптов. Честно скопипастил их из официального мануала
cd ~
cd OctoPrint/scripts
nano webcam
Внутри скрипта пишем (копипастим внутрь)
#!/bin/bash
# Start / stop streamer daemon
case '$1' in
start)
/home/octoprint/OctoPrint/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
Сохраняем готовый скрипт по CTRL+O
Выходим из nano по CTRL+X
nano webcamDaemon
Внутри скрипта пишем (копипастим внутрь)
#!/bin/bash
MJPGSTREAMER_HOME=/home/octoprint/mjpg-streamer/mjpg-streamer-experimental
MJPGSTREAMER_INPUT_USB='input_uvc.so'
MJPGSTREAMER_INPUT_RASPICAM='input_raspicam.so'
# init configuration
camera='auto'
camera_usb_options='-r HD -f 10'
camera_raspi_options='-fps 10'
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 RasPiCam
function startRaspi {
logger 'Starting Raspberry Pi camera'
runMjpgStreamer '$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options'
}
# 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 camera: $camera
echo usb options: $camera_usb_options
echo raspi options: $camera_raspi_options
# keep mjpg streamer running if some camera is attached
while true; do
if [ -e '/dev/video0' ] && { [ '$camera' = 'auto' ] || [ '$camera' = 'usb' ] ; }; then
startUsb
elif [ '`vcgencmd get_camera`' = 'supported=1 detected=1' ] && { [ '$camera' = 'auto' ] || [ '$camera' = 'raspi' ] ; }; then
startRaspi
fi
sleep 120
done
Сохраняем готовый скрипт по CTRL+O
Выходим из nano по CTRL+X
chmod +x /home/octoprint/OctoPrint/scripts/webcam
chmod +x /home/octoprint/OctoPrint/scripts/webcamDaemon
Далее
cd ~
cd .octoprint
nano config.yaml
Конфиг практически дефолтный
accessControl:
salt: y0pnvQf2Xdv3wKIm1Hu7onQJUwibqXNe
api:
key: 2BE34DF7924C400C95A71825CBE806F5
plugins:
announcements:
_config_version: 1
channels:
_blog:
read_until: 1495612800
_important:
read_until: 1478614200
_octopi:
read_until: 1490979600
_plugins:
read_until: 1495238400
_releases:
read_until: 1496325600
discovery:
upnpUuid: 084b7f82-8a71-4a98-a80f-abb4a2b5170a
softwareupdate:
_config_version: 5
check_providers:
navbartemp: navbartemp
printerProfiles:
default: _default
serial:
autoconnect: true
baudrate: 250000
port: /dev/ttyUSB0
server:
firstRun: false
secretKey: P3ZKW0v4hEcIUF6wr8LFnXYFHuz5C30L
seenWizards:
corewizard: null
cura: null
softwareupdate: null
К концу конфига дописываем копипастом
system:
actions:
- action: streamon
command: /home/octoprint/OctoPrint/scripts/daemon start
confirm: false
name: Start video stream
- action: streamoff
command: /home/octoprint/OctoPrint/scripts/daemon stop
confirm: false
name: Stop video stream
Сохраняем конфиг по CTRL+O
Выходим из nano по CTRL+X
Перезапускаем OctoPrint
sudo service octoprint restart
После перезапуска в верхней части октопринта появится меню system, в котором будет 2 пункта
Start video stream
Stop video streamСтандартные скрипты рабочие 100%, но написаны под универсальный вариант, в том числе и под камеру распберри пи.
Я слегка оптимизировал скрипт, все лишнее убрал, и вместо 2х скриптов сделал всего 1.
cd ~
cd OctoPrint/scripts
nano streamer
Внутри скрипта пишем (копипастим внутрь)
#!/bin/bash
# Start / stop streamer
MJPGSTREAMER_HOME=/home/octoprint/mjpg-streamer/mjpg-streamer-experimental
MJPGSTREAMER_INPUT_USB='input_uvc.so'
# init configuration
camera_usb_options='-r HD -f 10'
# 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'
# LD_LIBRARY_PATH=. ./mjpg_streamer -o 'output_http.sow' -i '$input'
popd
}
# starts up the USB webcam
function startUsb {
logger 'Starting USB webcam'
runMjpgStreamer '$MJPGSTREAMER_INPUT_USB $camera_usb_options'
}
case '$1' in
start)
startUsb >/dev/null 2>&1 &
echo '$0: started'
;;
stop)
pkill -x mjpg_streamer
echo '$0: stopped'
;;
*)
echo 'Usage: $0 {start|stop}' >&2
;;
esac
Сохраняем конфиг по CTRL+O
Выходим из nano по CTRL+X
chmod +x /home/octoprint/OctoPrint/scripts/streamer
cd ~
cd .octoprint
nano config.yaml
К концу конфига дописываем копипастом
system:
actions:
- action: streamon
command: /home/octoprint/OctoPrint/scripts/streamer start
confirm: false
name: Start video stream
- action: streamoff
command: /home/octoprint/OctoPrint/scripts/streamer stop
confirm: false
name: Stop video stream
Сохраняем конфиг по CTRL+O
Выходим из nano по CTRL+X
Перезапускаем OctoPrint
sudo service octoprint restart
Все точно так же работает.
Теперь заходим на октопринт и в плагинах настраиваем адрес откуда будет браться потоковое видеоВ Stream URL прописываем
http://ip_адрес_апельсина:8080/?action=stream
У меня это
http://192.168.0.2:8080/?action=stream
Для того чтоб проверить работоспособность, предварительно стартуем stream через меню system
После этого можно нажать на кнопку test и посмотреть видеоКамера у меня перевернута вверх ногами.
Для таких деятелей как я в настройке плагина есть галка Flip webcam verticallyНе забываем сохранять настройки плагина при выходе.
Теперь при входе во вкладку Control
можно наблюдать что делает принтер.Для чего я прикрутил регистратор веб камеру ? Было интересно прикрутить и попробовать. В конце концов опыт.
Буду ли я ей пользоваться - навряд ли.
А вот теперь немного фото того как это выглядитИз заметных минусов: с включенной камерой апельсин стал сильнее греться. На время испытаний к нему притулил вентилятор. Если использовать постоянно - неплохо бы подумать над активным охлаждением.
Именно этот видеорегистратор немного глючный, изображение часто отваливается, помогает ресет регистратора.
В остальном я неплохо провел день, пока на улице стоит ужасная погода.
Еще больше интересных статей
Как определить высоту слоя прерванной печати
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Настройка Marlin для датчика Biqu microprobe для платы BigTreeTech_SKR_mini_E3_V2.0
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Сопла и сопли
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Сколько раз этот вопрос поднимался. Сколько тем...
Комментарии и вопросы
Про «шестерни» с «муфтами» - в...
На крайний, можно и другую кно...
Кнопки вангую - ПВХ. Надо брат...
печатаю на принтере фигурку не...
дано есть принтеры .. на клипе...
Народ подсабите с прошивкой пр...
Собственно вопрос к владелецам...