Организация связи с БПЛА через мобильную сеть - DRONE520/DRONE520-main GitHub Wiki
- Обеспечение подключения БПЛА к мобильной сети, через микроконтролер-компаньон NanoPi Neo.
4G Модем "Huawei"
NanoPi NEO (ОП Ubuntu 16.04.2 LTS)
Pixhawk 4
Провод подключения NanoPi NEO к Pixhawk 4
Подключаем один конец провода к пинам NanoPi NEO:
- 1 -> Отвечающим за питание - постоянное напряжение 5v
- 2 -> Земля (Gnd)
- 3 -> Uart1 - (TX)
- 4 -> Uart1 - (RX)
- 7 -> Uart1 - (RTS)
- 8 -> Uart1 - (CTS)
Другой конец провода подключаем к разъему TELEM2 у Pixhawk 4 Advanced Flight Controller.
- 1 -> Отвечающим за питание - постоянное напряжение 5v
- 2 -> Uart1 - (RX)
- 3 -> Uart1 - (TX)
- 4 -> Uart1 - (RTS)
- 5 -> Uart1 - (CTS)
- 6 -> Земля (Gnd)
Перед началом использования NanoPi NEO необходимо подготовить:
- NanoPi NEO;
- Карта памяти microSD / TFCard: класс 10 или выше, минимум 8 ГБ SDHC;
- Кабель питания microUSB. Важно обеспечить питание 5В / 2А;
- Хост-компьютер под управлением 64-разрядной системы Ubuntu.
Синие линии на схеме подключение (рис 2) обозначают USB провода, которые вставляются в USB порты на каждом соответствующем устройстве. Модем вставляется в NanoPi Neo напрямую. При включении питания на модеме должно загореться два LED-индикатора: PWR и NET.
В данной работе использовались два модем: Huawei e3372, MegaFom M150-4. Первый модем удалось успешно подключить к Windows, но, к сожалению, для работы с Ubuntu он нуждается в перепрошивки, но стоит рассмотреть работу с ним, так как данный алгоритм можно использовать для подключения других модемов (например Huawei e172). [6] Для того, чтобы контролировать режимы модема, нужно подгрузить следущие библиотеки:
• minicom, • usb_modeswitch, • NetworkManager(NM), • ModemManager
Первая библиотека, для работы с USB устройствами уже подгружена, поэтому остаётся установить только остальные: они нужны для работы непосредственно с модемом и чтобы изменять его конфигурации. [6] С помощью команды usb-devices можно узнать адресс модема, сообщение в консоли будет выглядеть следующим образом:
- T: Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 8 Spd=480 MxCh= 0
- D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
- P: Vendor=12d1 ProdID=1f01 Rev=01.02
- S: Manufacturer=HUAWEI_MOBILE
- S: Product=HUAWEI_MOBILE
- S: SerialNumber=0123456789ABCDEF
- C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=2mA
- I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
Так же, с помощью USB description data (for identification) можно узнатьболее конкретный номер модели:
Manufacturer: HUAWEI_MOBILE Product: HUAWEI_MOBILE Serial No.: 0123456789ABCDEF
Чтобы добиться подключению к мобильной сети, нужно переключится от массового хранения в сетевой режим, для это в файле "/etc/usb_modeswitch.conf" нужно добавить следущее: TargetVendor=0x12d1 TargetProductList="14db,14dc" HuaweiNewMode=1 NoDriverLoading=1 Затем выполнить команду по переключению режима: sudo usb_modeswitch -v 12d1 -p 1f01 -c /etc/usb_modeswitch.conf - J Модификатор "- J" даёт команду перейти в режим модема, появляется следующее сообщение, где стоит обратить внимание на последние строчки:
-
Look for default devices ...
-
product ID matched
-
Found devices in default mode (1)
-
Access device 004 on bus 004
-
Current configuration number is 1
-
Use interface number 0
-
Use endpoints 0x01 (out) and 0x81 (in)
-
USB description data (for identification)
-
-
Manufacturer: HUAWEI_MOBILE
-
Product: HUAWEI_MOBILE
-
Serial No.: 0123456789ABCDEF
-
-
Using standard Huawei switching message
-
Looking for active driver ...
-
OK, driver detached
-
Set up interface 0
-
Use endpoint 0x01 for message sending ...
-
Trying to send message 1 to endpoint 0x01 ...
-
OK, message successfully sent
-
Reset response endpoint 0x81
-
Could not reset endpoint (probably harmless): -99
-
Reset message endpoint 0x01
-
Could not reset endpoint (probably harmless): -4
-
Device is gone, skip any further commands
-
-> Run lsusb to note any changes. Bye!
Обратим внимания на эту строчку «Could not reset endpoint (probably harmless): -99». Чтобы устранить возникшую ошибку, нужно в файле "/etc/usb_modeswitch.conf" прописать следущую команду:
MessageContent="55534243123456780000000000000011062000000101000000000000000000"
Теперь можно обращение к модему идёт непосредственно через файл, и можно вводить команду без модификатора -J. Она будет выглядеть следующим образом:
sudo usb_modeswitch -c /etc/usb_modeswitch.conf
-
Look for default devices ...
-
product ID matched
-
Found devices in default mode (1)
-
Access device 004 on bus 004
-
Current configuration number is 1
-
Use interface number 0
-
Use endpoints 0x01 (out) and 0x81 (in)
-
USB description data (for identification)
-
-
Manufacturer: HUAWEI_MOBILE
-
Product: HUAWEI_MOBILE
-
Serial No.: 0123456789ABCDEF
-
-
Looking for active driver ...
-
OK, driver detached
-
Set up interface 0
-
Use endpoint 0x01 for message sending ...
-
Trying to send message 1 to endpoint 0x01 ...
-
OK, message successfully sent
-
Reset response endpoint 0x81
-
Reset message endpoint 0x01
-
-> Run lsusb to note any changes. Bye!
В этом случае команда пройдёт без ошибок, что означает, что модем теперь находится стабильно в одном режиме. Но модем модели Huawei e3372 всё равно система видит, что он в режиме диска, так как внутренние драйвера, установленные по умолчанию, не предназначены для работы с операционной системой, установленной на NanoPi Neo (Ubuntu 16.04).
Теперь рассмотрим, как получить сетевой интерфейс. Аналогичные процедуры были проведены для модемов Huawei e3372 и MegaFom M150-4.
Для подключения к модему с помощью minicom можно использовать файлы устройств /dev/ttyUSB4 или /dev/ttyS3. Это делается с помощью следующей команды:
-sudo minicom -D /dev/ttyUSB4
Для выхода в сеть удобно использовать утилиту qmcli. Для начала необходимо установить пакеты: • sudo apt-get update • sudo apt-get install libqmi-utils udhcpc
Радио-модуль модема по умолчанию выключен. Его можно включить с помощью следующих команд:
-sudo qmicli -d /dev/cdc-wdm0 -dms-set-operating-mode='online'
Индикатор NET на модеме должен начать мигать. Это значит, что модем перешел в режим поиска и подключения к GSM-сети. Необходимо проверить, что сеть найдена, и уровень сигнала не слишком низкий:
• sudo qmicli -d /dev/cdc-wdm0 --dms-get-operating-mode • sudo qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength • sudo qmicli -d /dev/cdc-wdm0 --nas-get-home-network
Драйвер qmi-wwan, увидев подключение модема к NanoPi NEO, создает сетевой интерфейс etch1. По умолчанию, в качестве протокола на этом интерфейсе установлен 802-3, однако нужный нам протокол — это, по-видимому, raw-ip. Сделаем это изменение:[3]
• sudo qmicli -d /dev/cdc-wdm0 -w # проверим имя сетевого интерфейса, обычно это wwan0 • sudo ip link set etch1 down • echo 'Y' | sudo tee /sys/class/net/wwan0/qmi/raw_ip • sudo ip link set wwan0 up
Теперь соединяемся с 3G-сетью. Параметры для APN можно узнать на странице GSM-провайдера.[2]
• sudo qmicli -p -d /dev/cdc-wdm0 --device-open-net='net-raw-ip|net-no-qos-header' --wds-start-- network="apn='<YOUR_APN>',username='<YOUR_USERNAME>',password='<YOUR_PASSWORD>',ip-type=4" --client-no-release-cid
Например, в случае Мегафон: apn='internet',username='gdata',password='gdata'
И наконец, получаем IP-адрес с помощью команды: sudo udhcpc -i wwan0
С помощью команды ifconfig можно увидеть, что теперь интерфейсу уеср1 назначен определенный IP-адрес. [3]
ifconfig etch1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.245.223.144 netmask 255.255.255.224 destination 10.245.223.144
С помощью команды “ping yandex.ru” можно проверить удалось ли подключить мобильную сеть. Модем «MegaFom M150-4» нуждается в дополнительной настройки через minicom.[5]
В терминале нужно выполнить команду, чтобы проверить устройство: ls /dev/ttyU*
Далее запускаем minicom командой:
minicom -s
Это запуск в режиме настройки. В этом режиме нужно, в настройках последовательного порта, указать устройство /dev/ttyUSB4. Затем сохранить настройки как dfl и выйти из режима настройки.
Затем, уже в терминальном режиме можно работать с модемом. Первым делом проверить подключение к модему командой[5] ATi
Далее проверяем текущий режим подключения: AT^QCNCFG?
Ответ будет: "00" или другая цифра - 01, 02, 03.
Если в выводе будет цифра 03, тогда режим подключения уже выставлен в 4G (LTE) и причина низкой скорости другая. А вот в случае цифр 00 или 01, можно будет переключить модем в режим 4G (LTE).
Это делается командой: AT^QCNCFG=03
Оба модема были успешно подключены к nano-pi, но доступ к мобильной сети не был обеспечен. В случае с модемом Huawei e3372 это может быть из-за того, что у модема нет внутренних драйверов для работы с Ubuntu, потом что он успешно работал с Windows, но не с Linux. Чтобы решить проблему, его можно перепрошить. Модем MegaFom M150-4 нуждается в дополнительной настройки через minicom.