163 подписчика

OpenIPC FPV Подключение смартфона или планшета

197 прочитали
К видеорегистратору можно подключить смартфон или планшет. Далее запускаете на планшете прогу типа fpv vr или QOpenHD и ещё какую нибудь.
Схема подключения
Схема подключения

К видеорегистратору можно подключить смартфон или планшет. Далее запускаете на планшете прогу типа fpv vr или QOpenHD и ещё какую нибудь.

Для более детальной информации смотрите видео:

Подключение по USB:

Первый скрипт:

#!/bin/sh

### Folder: /etc

case "$1" in
start)
echo "Starting usb tethering..."
/usr/bin/usbtet &
;;
stop)
echo "Stopping usb tethering..."
kill -9 $(pidof usbtet)
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

Второй скрипт:

#!/bin/sh

### Folder: /usr/bin

mode="vdec"

while [ true ]
do
have_phone="false"
devices=$(lsusb | cut -d ' ' -f6 | sort | uniq)
for card in ${devices}
do
if [ ${card} = "04e8:6863" ]; then
have_phone="true"
break
fi
done

if [ "${have_phone}" == "true" ] && [ "${mode}" == "vdec" ]; then
mode="tethering"

echo "Swithcing to ${mode}"
modprobe rndis_host

n=0
while ! $(ifconfig -a | grep -q usb0)
do
if [ ${n} -ge 5 ]; then
echo "usb0 did not appear."
exit
fi
sleep 0.5
n=$(expr ${n} + 1)
done

ifup usb0
sleep 0.5

n=0
phone_ip=$(ip route | grep usb0 | grep default | cut -d ' ' -f3)
while [ -z ${phone_ip} ]
do
if [ ${n} -ge 5 ]; then
echo "default route did not appear."
exit
fi
sleep 0.5
n=$(expr ${n} + 1)
phone_ip=$(ip route | grep usb0 | grep default | cut -d ' ' -f3)
done

cp /etc/mavlink.conf /tmp
sed -i s/0.0.0.0/${phone_ip}/g /tmp/mavlink.conf

/usr/bin/wifibroadcast stop
/usr/bin/wifibroadcast start
fi

if [ "${have_phone}" == "false" ] && [ "${mode}" == "tethering" ]; then
mode="vdec"

echo "Swithcing to ${mode}"
ifdown usb0
cp /etc/mavlink.conf /tmp
/usr/bin/wifibroadcast stop
/usr/bin/wifibroadcast start
fi

sleep 0.5
done

Исправленный файл wifibroadcast:

#!/bin/sh
#
# Start wifibroadcast for usb
#

. /etc/datalink.conf
. /etc/wfb.conf

keydir="/etc"
chip=$(ipcinfo -c)
vendor=$(ipcinfo -v)

driver=""

set_mcs() {
if [ ${vendor} = "ingenic" ]; then
mcs=$(ls -l /lib/firmware | grep "htc_9271" | awk {'print $11'} | cut -d "." -f3)
else
mcs=$(ls -l /lib/firmware/ath9k_htc | grep "htc_9271-1.4.0.fw" | cut -d "." -f6)
fi
if [ -z "${mcs}" ]; then
setmcs ${mcs_index}
fi
if [ ${mcs_index} -eq 1 ] || [ ${mcs_index} -eq 3 ]; then
if [ ! ${mcs_index} -eq ${mcs} ]; then
setmcs ${mcs_index}
sleep 3
fi
fi
}

# "0bda:8813" -> (8814) -> 8814au
# "0846:9052" -> (8811) -> 8821au

detect_wifi_card() {
echo "Detecting wifi card vendor..."
devices=$(lsusb | cut -d ' ' -f6 | sort | uniq)
for card in ${devices}
do
case "${card}" in
"0bda:8812" | "0bda:881a" | "0b05:17d2" | "2357:0101" | "2604:0012")
driver="realtek"
modprobe 88XXau rtw_tx_pwr_idx_override=${driver_txpower_override}
;;
"0cf3:9271" | "040d:3801")
driver="atheros"
if ! [ ${unit} = "gs" ]; then
set_mcs
fi
modprobe mac80211
modprobe ath9k_htc
;;
esac
done

if [ -z "${driver}" ]; then
echo "No usb wifi card detected. Check wifi stick connection, usb power or possible bad soldering."
exit
else
echo "Detected:" ${driver}
fi

echo "Awaiting interface ${wlan} in system..."

local n=0
while ! $(ifconfig -a | grep -q ${wlan})
do
if [ ${n} -ge 5 ]; then
echo "No interface ${wlan}. Check wifi stick connection, usb power or possible bad soldering."
exit
fi
sleep 0.5
n=$(expr ${n} + 1)
done
}

load_modules() {
modprobe cfg80211
detect_wifi_card
}

load_interface() {
if [ ${driver} = "realtek" ]; then
ifconfig ${wlan} up
iwconfig ${wlan} mode monitor
elif [ ${driver} = "atheros" ]; then
iwconfig ${wlan} mode monitor
ifconfig ${wlan} up
fi

iw reg set ${region}

if [ ! -z "${frequency}" ]; then
iwconfig ${wlan} freq ${frequency}
else
iwconfig ${wlan} channel ${channel}
fi
# dirty fix crash if txpower set. setting txpower disabled because patched driver always set txpower level 58
# iw dev ${wlan} set txpower fixed $((${txpower} * 100))
}

start_drone_wfb() {
wfb_tx -p ${stream} -u ${udp_port} -R ${rcv_buf} -K ${keydir}/${unit}.key -B ${bandwidth} -M ${mcs_index} -S ${stbc} -L ${ldpc} -G ${guard_interval} -k ${fec_k} -n ${fec_n} -T ${pool_timeout} -i ${link_id} -f ${frame_type} ${wlan} > /dev/null &
}

start_gs_wfb() {
wfb_rx -c ${udp_addr} -u ${udp_port} -p ${stream} -K ${keydir}/${unit}.key -i ${link_id} ${wlan} > /dev/null &
}

case "$1" in
start)
if [ ${daemon} -eq 1 ]; then

echo "Loading modules and wifi card driver..."

load_modules

echo "Preparing interface wlan..."

load_interface

if ! cat ${keydir}/${unit}.key > /dev/null 2>&1; then
echo "Generating drone & ground station keys..."
cd ${keydir} ; wfb_keygen
else
echo ${unit} "key exist..."
fi

if [ ! -e /tmp/mavlink.conf ]; then
cp /etc/mavlink.conf /tmp
fi

phone_ip=$(ip route | grep usb0 | grep default | cut -d ' ' -f3)
if [ ! -z ${phone_ip} ]; then
echo "USB Tethering mode detected."
udp_addr=${phone_ip}
fi

echo "Starting Wifibroadcast service..."

start_${unit}_wfb

echo "Done."

if [ ${telemetry} = "true" ]; then
if [ ${chip} = "gk7205v200" ]; then
# UART2_RX mux
devmem 0x120c0010 32 0x1e04
fi
telemetry start
fi

else
echo "Wifibroadcast service disabled in wfb.conf..."
fi
;;
stop)
echo "Stopping all services..."
kill -9 $(pidof wfb_tx)
kill -9 $(pidof wfb_rx)
kill -9 $(pidof telemetry_rx)
kill -9 $(pidof telemetry_tx)
kill -9 $(pidof mavlink-routerd)
kill -9 $(pidof mavfwd)
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

Изменения в файле mavlinc.conf и telemetry.conf

К видеорегистратору можно подключить смартфон или планшет. Далее запускаете на планшете прогу типа fpv vr или QOpenHD и ещё какую нибудь.-3

Подключение по Wi-Fi:

Скрипт №1:

#!/bin/sh

### Folder: /etc/init.d

modprobe cfg80211
insmod /lib/modules/4.9.37/extra/8188eu.ko
ifup wlan1
exit 0

Скрипт №2:

#!/bin/sh

### Folder: /etc

tab_wlan=wlan1

. /etc/datalink.conf
. /etc/wfb.conf
keydir="/etc"

case "$1" in
start)
ifdown ${tab_wlan}
ifup ${tab_wlan}
TAB_IP=`ip route show 0.0.0.0/0 dev ${tab_wlan} | cut -d\ -f3`
if [ ! -z ${TAB_IP} ]; then
echo found ${tab_wlan} ap ${TAB_IP}
wfb_rx -c ${TAB_IP} -u ${udp_port} -p ${stream} -K ${keydir}/${unit}.key -i ${link_id} ${wlan} > /dev/null &
echo "start streaming to ${addr} one."
fi
;;
stop)
TAB_IP=`ip route show 0.0.0.0/0 dev ${tab_wlan} | cut -d\ -f3`
pid=`ps -ef | grep "wfb_rx -c ${TAB_IP}" | grep -v grep | awk '{print $1}'`
kill ${pid}
echo "stop streaming to ${addr} one."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

Файл wfb.conf (добавить tab_wlan=wlan1):

### wfb.conf

unit=gs
wlan=wlan0
region=00
channel=149
txpower=20
driver_txpower_override=20
stream=0
link_id=7669206
udp_addr=127.0.0.1
udp_port=5600
telemetry=true

tab_wlan=wlan1

Исправленный файл interfaces:

iface lo inet loopback

### отправка видео на смартфон по WiFi (WiFi Tethering):

#auto wlan1
iface wlan1 inet dhcp
#pre-up if ! lsmod | grep 8188eu; then insmod /lib/modules/4.9.37/extra/8188eu.ko; fi
#pre-up sleep 4
pre-up wpa_passphrase "ВАШ_SSID" "ВАШ_ПАРОЛЬ" >/tmp/wpa_supplicant.conf
pre-up sed -i '2i \\tscan_ssid=1' /tmp/wpa_supplicant.conf
pre-up sleep 3
pre-up wpa_supplicant -B -D nl80211 -i wlan1 -c /tmp/wpa_supplicant.conf
post-down killall wpa_supplicant
post-down rm -f /tmp/wpa_supplicant.conf

#source-dir /etc/network/interfaces.d

Всем скриптам необходимо дать права на исполнение всем пользователям (команда cmod +x имя_скрипта)!