Оборудование:
Видеорегистратор hi3536ev100 1шт
Камера gk7205v300 1шт
WiFi модуль на базе чипа rtl8812au 2шт
Конвертер (адаптер) USB-UART 1шт
Полетный контроллер со свободным UART портом 1шт
В программном смысле камера состоит из 2х частей: загрузчик и операционная система.
Инструкция по прошивке камеры Goke7205v200 https://www.youtube.com/watch?v=pA6xQ5fcZ6Q
Общая информация по OpenIPC https://www.youtube.com/watch?v=NOW99dwKbzI
Необходимое ПО:
DMS - ПО по настройке IP камер. https://team.openipc.org/ipcam_dms/
VLC - будем использовать как проигрыватель потокового видео.
gstreamer - в нашем случае это аналог VLC, вывод видео потока на экран с минимальной задержкой. Устанавливать полную версию. Не обязательно если есть VLC.
PuTTY
WinCSP
Начинаем
Есть у нас новая камера gk7205v300, к ней есть Ethernet кабель и возможность подать питание.
Первое что нужно сделать, это убедиться в работоспособности камеры.
Подключаем кабель к камере, широкий шлейф.
Рекомендую обеспечить обдув камеры, особенно если на процессоре не установлен радиатор.
Подключаем Ethernet кабель к камере и к компьютеру. Подаем питание на камеру.
Необходимо вручную задать параметры сети для сетевого интерфейса, куда подключена камера.
На компьютере (я буду работать с Windows): "Сетевые подключения" -> находим сетевой интерфейс, куда подключена камера, нажимаем правой кнопкой мыши, выбираем "Свойства". В закладке "Сеть" находим и выбираем пункт "IP версии 4 (TCP/IPv4)", "Свойства", "IP-адрес:" 192.168.1.ххх (кроме 10, 10 - занято камерой); "Маска подсети:" 255.255.255.0
Программа IPCam_DMS.
Выбираем "Интерфейс" (куда подключена камера) жмем кнопку "Поиск".
Факт обнаружения камеры программой - положительный признак. В результате программа должна найти камеру с отображением ее IP адреса - этот адрес нам пригодится далее.
Используя программу для просмотра потокового видео, например VLC, получим картинку с камеры.
Заходим в программу VLC, пункт меню "Медиа"->"Открыть URL...", указываем следующий адрес:
rtsp://192.168.1.10/stream=0
при запросе логина и пароля:
логин: admin
пароль оставляем пустым
На вашей камере логин/пароль могут быть иными, необходимо уточнять у продавца.
В итоге получим картинку с камеры:
Проверим наличие веб-интерфейса, в интернет браузере зайдем на адрес камеры 192.168.1.10
Логин и пароль те же самые.
Мы выяснили что камера работает, теперь можем приступать к прошивке в нее OpenIPC.
Прошивка OpenIPC
Прошивать буду используя UART порт камеры.
Для подключения UART камеры к ПК потребуется конвертер UART-USB. Я использую плату Arduino Nano с микросхемой FTDI. Прошивать Arduino не нужно. Подготовка Arduino: замкнуть контакты на Arduino RST и GND.
Распиновка моего варианта камеры:
Здесь UART порт это контакты J2.
Припаиваю провода:
Подключаем камеру к Arduino:
RX-RX
TX-TX
GND-GND
Подключаем Arduino к ПК, в Диспетчере устройств должно появиться устройство:
Камера уже подключена к Arduino.
Запускаем PuTTY
Текущее состояние подключения камеры: камера подключена к Arduino по UART (3 провода), кабель Ethernet из комплекта камеры подключен к камере, Arduino подключен к ПК через USB кабель.
Нажимаем "Open" в PuTTY. Появляется окно:
Подаем питание на камеру, видим примерно следующее:
Это первичная информация по камере.
Чтобы выполнить прошивку, нужно получить доступ к загрузчику. Для этого находясь в терминальном окне PuTTY зажимаем и держим сочетание клавиш CTRL+C, и в это время отключаем и подаем вновь питание на камеру. В итоге увидим примерно следующее:
Вышли на загрузчик, который просит пароль. Если вам известен пароль к загрузчику, то можете зайти, и далее начать процесс непосредственной установки прошивки на камеру. На моей камере мне не известен пароль на загрузчик, поэтому необходимо перепрошить загрузчик.
Т.е. имеем проблему - мы не знаем пароль доступа к загрузчику.
Вторая проблема, которая вероятно встретится, - это заблокированная флеш-память. Проявляется это так: мы успешно прошиваем новый загрузчик, но после перезагрузки камеры мы обнаруживаем, что его нет, а загрузился старый (оригинальный) загрузчик. Для решения этой проблемы есть ряд методов, о которых будет написано дальше.
Запуск стороннего загрузчика (не из флеш памяти камеры)
Идея: оригинальный загрузчик защищен паролем, а этот пароль нам не известен. Чтобы установить новую прошивку, нам нужен загрузчик.
Мы можем загрузить сторонний загрузчик в ОЗУ камеры и запустить его оттуда (при этом этот загрузчик не будет находиться в энергонезависимой памяти). Это нам позволит манипулировать камерой, в том числе мы сможем прошить новый загрузчик и ядро (операционная система).
Скачиваем инструментарий burn: "https://github.com/OpenIPC/burn"
Скачиваем и устанавливаем Python: "https://www.python.org/downloads/".
При установке необходимо поставить галочку на опции "Add python.exe to PATH":
Через командную строку установим пару необходимых модулей командами:
pip install progressbar
pip install pyserial
Скачаем загрузчик для камеры: https://github.com/OpenIPC/firmware/releases/tag/latest
Распаковать архив burn. В эту папку поместить файл .bin, скачанный на предыдущем шаге.
В консоли переходим в папку burn (используя консольную команду cd) и вызываем команду:
python burn --chip gk7205v300 --file=u-boot-gk7205v300-universal.bin -p COM6 --break
Подаем питание на камеру.
Получаем ошибку:
Смотрим, что в файле gk7205v300.json папки burn - если там имя файла, то смотрим на то, что находится в указанном файле; так до тех пор, пока не выйдем на файл, в котором находится конфигурация. В моем случае это файл hi3516ev200.json. Данное имя файла подставляю в команду, получаю:
python burn --chip hi3516ev200 --file=u-boot-gk7205v300-universal.bin -p COM6 --break
Отключаю питание от камеры, вызываю указанную команду, подаю питание на камеру.
Результат:
Вызываем команду:
putty.exe -serial COM6 -sercfg 115200,8,n,1,N
Результат:
Если приглашения нет, то нажимаем клавишу Enter.
Напоминаю - загрузчик, который мы стартовали, загружен в ОЗУ и оттуда же запущен. Если мы переподключим питание камеры, то обнаружим, что загрузится старый загрузчик.
Эта возможность нам потребуется далее.
Перепрошивка камеры по официальной инструкции OpenIPC
Есть сервис от команды OpenIPC, который генерирует инструкцию по установке прошивки с учетом особенностей вашей камеры. Перейдите по ссылке: "https://openipc.org/supported-hardware/featured"
Найдите свою камеру, перейдите к мастеру генерации инструкции по указанной иконке. В полях укажите детали по вашей камере.
MAC address - сгенерируйте по ссылке ниже поля.
IP address - 192.168.1.10 (не должен быть занят в сети, можете убедиться, что адрес свободен через команду в консоли "ping 192.168.1.10", если ответов нет, значит адрес свободен).
TFTP IP address - адрес ПК, на котором будет запускаться ПО TFTP server, должен быть в той же сети (общая часть 192.168.1.*), т.е. адрес компьютера, к которому будем подключать камеру для дальнейших настроек.
Memory chip - уточните у продавца или по надписи на микросхеме, найдя в интернет datasheet к микросхеме. Также узнать размер микросхемы можно командой "getinfo spi". В моем случае 16Mb.
Firmware version - Lite. Перейти на другую версию или добавить другие модули можно будет позже.
Нажимаем кнопку и получаем подробную инструкцию по прошивке камеры.
Скачиваем и устанавливаем TFTP сервер
Можно использовать любой, я использовал этот: tftpd64
"https://bitbucket.org/phjounin/tftpd64/downloads/"
Распаковываем архив.
Запускаем tftpd64.exe
Указываем путь до папки - это будет папка-обменник между компьютером и камерой. Рекомендую создать новую папку.
Выбираем IP адрес компьютера.
На этом настройка TFTP завершена. Переходим к следующим шагам.
Создаем резервную копию оригинальной прошивки камеры
Подключаем камеру к компьютеру через кабель Ethernet. Подаем питание на камеру.
Выполняем последовательно команды из блока инструкции:
Результат в консоли:
И в папке-обменнике TFTP должен появиться файл
backup-gk7205v300-nor16m.bin
Таким образом мы получили резервную копию оригинальной заводской прошивки (на всякий случай).
Непосредственно прошивка камеры
В сгенерированной инструкции есть два блока - два варианта прошивки:
- прошивка разом загрузчика и ядра
- поэтапная прошивка загрузчика и ядра
Буду использовать поэтапную прошивку, т.к. в случае если флеш-память заблокирована, придется использовать именно поэтапную прошивку.
Скопируем ранее скаченный файл u-boot-gk7205v300-universal.bin в папку-обменник TFTP.
Последовательно, построчно (не сразу все) ввожу команды из блока:
Чтобы зайти в загрузчик в открытой консоли PuTTY, зажимаю клавиши Ctrl+C и отключаю и подаю питание. Если мы видим приглашение:
OpenIPC #
значит все в порядке. Если видим запрос пароля - значит загрузчик не был сохранен, а это значит флеш-память заблокирована.
Варианты разблокировки флеш-памяти:
- загрузка ядра через утилиту burn
- Cupler - обновление ядра через веб интерфейс заводской прошивки
- прошивка загрузчика u-boot из папки утилиты burn
Вариант 1
"https://github.com/OpenIPC/sandbox-fpv/blob/master/notes_start_ivg-g2s.md"
В самом конце страницы указана последовательность команд по процессу разблокировки флеш-памяти.
Перед выполнением команд скачиваем ядро по ссылки из сгенерированной ранее инструкции:
Распаковываем архив и помещаем файлы в папку-обменник TFTP.
Закрываем PuTTY, если открыт.
И теперь придется все повторить, загрузив загрузчик OpenIPC на камере. Для скорости дублирую шаги:
В консоли Windows:
python burn --chip hi3516ev200 --file=u-boot-gk7205v300-universal.bin -p COM6 --break
putty.exe -serial COM6 -sercfg 115200,8,n,1,N
В открывшемся окне PuTTY:
setenv ipaddr 192.168.1.10; setenv serverip 192.168.1.3
setenv bootargs 'mem=32M console=ttyAMA0,115200 panic=20 rootfstype=squashfs root=/dev/mtdblock3 init=/init mtdparts=sfc:256k(boot),64k(env),2048k(kernel),5120k(rootfs),-(rootfs_data)'
mw.b 0x42000000 ff 1000000
tftpboot 0x42000000 uImage.${soc}
bootm 0x42000000
Жмем Ctrl+C в консоли PuTTY, в это время переподключаем питание камеры. Если видим запрос пароля, значит блокировка флеш-памяти не снята и загрузчик не сохранился.
Вариант 2
Не рассматриваю этот вариант. Главная его суть: найти прошивку именно для вашей камеры на github OpenIPC и прошить камеру через оригинальный web-интерфейс камеры. Это так называемый метод Cupler.
Вариант 3
Вариант разблокировки, который сработал в моем случае.
Основная идея: прошить загрузчик файлом из папки утилиты burn, а не тот, что мы использовали ранее, скачав здесь:
https://github.com/OpenIPC/firmware/releases/tag/latest
Нужный файл:
Меняем ране используемую команду и получаем:
python burn --chip hi3516ev200 --file=u-boot/gk7205v300.bin -p COM6 --break
Открываем терминал PuTTY:
putty.exe -serial COM6 -sercfg 115200,8,n,1,N
Видим, что приглашения нет, нет реакции на клавишу Enter.
Делаем следующее:
Отключаем питание от камеры.
Замыкаем 5 и 6 контакты микросхемы флеш-памяти так, чтобы эту перемычку было легко снять при включенной камере.
Делаем все очень аккуратно, замыкание иных контактов может повлечь за собой выход из строя камеры!
Наличие перемычки вызовет ошибку при следующем старте камеры, что даст доступ к командной строке.
Закрываем окно PuTTY.
Вызываем следующую строку:
python burn --chip hi3516ev200 --file=u-boot/gk7205v300.bin -p COM6 --break && putty.exe -serial COM6 -sercfg 115200,8,n,1,N
Подаем питание на камеру.
Появится окно PuTTY, нажимаем Enter и видим строку приглашение:
Аккуратно снимаем перемычку с микросхемы, не выключая питание камеры.
Прошиваем U-Boot по инструкции:
Теперь в моем случае, если переподключить питание, то можно выйти на загрузчик, нажав клавиши Ctrl+C. Это значит, что загрузчик мы прошили, блокировка с флеш-памяти снята.
Выполняю комплексную установку загрузчик+ядро по инструкции.
В итоге после перезагрузки камеры вы должны иметь возможность подключиться к ней по адресу 192.168.1.10:22 с помощью PuTTY.
Блокировка с флеш-памяти снята, базовая установка выполнена.
Обновление до FPV версии системы
Информация о системе:
cat /etc/os-release
Добиться получения интернета на камере.
В моем случае камера подключена к сетевой карте ПК, ПК получает интернет от WiFi.
Захожу в "Сетевые подключения".
Правой кнопкой мыши нажимаю по беспроводной сети с интернетом, "Свойства" -> "Доступ", ставим галочки и выбираем интерфейс, куда подключена камера:
В данном механизме камера будет работать в сети 192.168.137.*
IP адрес камера получит автоматически. Чтобы найти этот адрес, я использую программу Advanced_IP_Scanner.
Находим IP адрес камеры, через PuTTY подключаемся к этому адресу, порт 22.
Через подключение к камере (с помощью программы WinSCP) внести изменение в файл
/etc/os-release
Указать:
BUILD_OPTION=fpv
сохранить изменения и после этого выполнить команду (в PuTTY):
sysupgrade -r -k -n --force_ver
WiFi
Если не используете внешние антенны, то убедитесь, что указанные перемычки на обоих модулях пропаяны. Иначе встроенные антенны не будут работать и связь по воздуху между модулями будет плохая.
Полезные команды:
lsusb - список usb устройств
ifconfig - убедиться, что wlan появился в списке сетевых устройств
wifi модуль припаивать к камере короткими проводами (не больше 5см), предварительно сплести в косичку - защита от помех.
Команда
ps
показывает процессы
wfb_tx - передатчик видео. telemetry_rx/tx - двунаправленная телеметрия.
majestic - стример видео. mavfwd - роутер телеметрии
В файле /etc/wfb.conf выставить, в камере и видеорегистраторе:
channel больше 60
Использую значение 161
Информация по частотным каналам
"https://en.m.wikipedia.org/wiki/List_of_WLAN_channels"
На камере:
cli -s .video0.size 1920x1080
На регистраторе в файле
etc/vdec.conf
выставить
1080р
С камеры на видеорегистратор скопировать файл gs.key
После этого (может потребоваться перезагрузка устройств) картинка с видеорегистратор на HDMI выход должна появиться.
Прошивка регистратора hi3536ev100
setenv ipaddr '192.168.0.222' #тут ip в вашей подсети из свободных
setenv serverip '192.168.0.107' #адрес ПК с tftp сервером
setenv netmask '255.255.255.0'
setenv bootcmd 'sf probe 0; sf read 0x82000000 0x50000 0x200000; bootm 0x82000000'
setenv uk 'mw.b 0x82000000 ff 1000000;tftp 0x82000000 uImage.${soc}; sf probe 0; sf erase 0x50000 0x200000; sf write 0x82000000 0x50000 ${filesize}'
setenv ur 'mw.b 0x82000000 ff 1000000;tftp 0x82000000 rootfs.squashfs.${soc}; sf probe 0; sf erase 0x250000 0x800000; sf write 0x82000000 0x250000 ${filesize}'
setenv bootargs 'mem=192M console=ttyAMA0,115200 panic=20 root=/dev/mtdblock3 rootfstype=squashfs init=/init mtdparts=hi_sfc:256k(boot),64k(env),2048k(kernel),8192k(rootfs),-(rootfs_data)'
setenv osmem '192M'
setenv totalmem '256M'
setenv soc 'hi3536dv100'
setenv da; setenv du; setenv dr; setenv dw; setenv dl; setenv dc; setenv up; setenv tk; setenv dd; setenv de; setenv jpeg_addr; setenv jpeg_size; setenv vobuf; setenv loadlogo; setenv appVideoStandard; setenv appSystemLanguage; setenv appCloudExAbility
saveenv #сохраняем новое окружение переменных
printenv #смотрим, все ли в порядке
Оригинал информации здесь: https://github.com/OpenIPC/sandbox-fpv/blob/master/notes_start_hi3536ev100.md
Телеметрия. OSD.
Опробировано на связке с betaflight.
При формировании прошивки необходимо указать ключ USE_TELEMETRY_MAVLINK, смотрите скриншот ниже.
припаиваем провода UART полетного контроллера к камере в формате tx-rx, rx-tx, а также соединяем камеру и полетный контроллер по минусовому проводу (GND).
Закомментировать строку в файле
/etc/inittab
Если имеете следующую ситуацию.
Камера не запускается, пока идут данные Mavlink, и в тоже время камера запускается, если данных Mavlink нет (отключено питание полетного контроллера). И если после включения камеры подается питание на полетник, камера так же работает - то выполните команду и перезапустите камеру:
fw_setenv bootdelay 0
Убедиться, что значение применилось:
fw_printenv bootdelay
Или показать весь список переменных:
printenv
В /etc/telemetry.conf поставьте one_way=true ,чтобы лишний процесс не запускался.
В случае возникновения проблем с получением телеметрии попробуйте подключиться к используемому порту телеметрии полетника через конвертер USB-UART (через программу PuTTY). Убедитесь, что данные идут - в терминале PuTTY должны появляться хотя бы какие-то символы.
Итоги и выводы
Результат:
Итак, у нас имеется передача видео с камеры на HDMI по воздуху. У нас есть OSD.
Но есть заметная проблемка, я замечаю затыки на видео каждые 1-2 секунды.
Попытка исправить ситуацию по статье ниже, не помогла.
"https://github.com/OpenIPC/sandbox-fpv/blob/master/gkrcparams.md"
Спасибо команде OpenIPC за технологию и содействие.
Особая благодарность Дмитрию @RD000000 (он же @DD).