CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Raspberry Pi. Установка и настройка комплекта MTC Коннект 4 (модем Huawei E171) на Raspbian




Соответственно одной коммерческой задаче мне придется использовать 3G-модем вместе с Raspberry. В качестве 3G-дейвайса был выбран комплект МТС Коннект 4 (дело было в г.Обнинск, выбирать особо не пришлось). Цель — поднять соединение с авто подключением и реконнектом при дропе.

Исходная точка:
1. Raspberry Pi (версия не важна).
2. Raspbian Debian Wheezy Version: January 2014 Release date: 2014-01-07.
3. Плата питается от блока питания 5V 1A. Не пытайтесь запустить RPi от USB (USB отдает всего 500 мА максимум). При питании от USB RPi будет постоянно перезагружаться из-за нехватки питания.
4. Подключение к интернету.

Начинаем.

Данил Борчевкин,
lab409.ru


ПЕРВЫМ ДЕЛОМ

Первым делом я подцепил модем к моноблоку с Windows на борту, поставил Коннект-менеджер с модема и подключился к интернету, дабы удостовериться, что соединение есть и все любые последующие проблемы будут только из-за того, что у меня кривые руки. Коннект есть, трафик считается, гугл открывается, можно работать уже на Raspberry.

ДЕЛАЕМ МОДЕМ МОДЕМОМ

Как ни странно, но после подключения модема к USB он определяется как диск. Для переключения его в режим модема необходимо установить usb-modeswitch. Заодно подтянем и все необходимое, а после совершим reboot:


sudo apt-get update
sudo apt-get install usb-modeswitch minicom ppp
sudo reboot


После перезагрузки проверяем, что теперь у нас из себя представляет модем и доступны ли его порты:


$ lsusb
Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard



$ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2


Вот и отлично. Можно начинать работать. под ttyUSB2 у меня клавиатура. Для начала, подключимся к модему через терминал minicom и узнаем его модель посредством AT-команды ati0. Делается это просто — набираем команду и нажимаем Enter:


$ sudo minicom -D /dev/ttyUSB0
< ati0
Manufacturer:
Model: E171
Revision: 21.157.00.01.143
IMEI: ************* [естественно, что там цифры, но свой IMEI я не покажу]
+GCAP: +CGSM, +DS, +ES


Для выхода из minicom следует нажать Ctrl + A затем Q и подтвердить выход. Теперь мы точно удостоверились в модели модема на случай, если придется прыгать с бубном.

Кстати, мы приблизились к первой проблеме — если мы сейчас выключим и включим Raspberry, то при вводе команды lsusb мы увидим следующее:


$ sudo shutdown -h now
[передергиваем питание и ждем пока загрузится RPi]
$ lsusb
Bus 001 Device 005: ID 12d1:155b Huawei Technologies Co., Ltd.


Наш модем снова стал накопителем, сменился ID устройства (с 12d1:1506 на 12d1:155b, где 12d1 — ID вендора) и снова превратился в cdrom. И так будет всегда, если RPi будет включаться с уже вставленным модемом, т.е. до подачи питания. На данном этапе это лечится передергиванием модема (вынул-всунул) и в принципе, может и не критично. Конкретно в моей ситуации, такое поведение ОС меня не устраивает, поэтому буду добиваться однозначного определения модема при включении.

Для решения данной проблемы необходимо создать файл /etc/udev/rules.d/41-usb_modeswitch.rules:


$ sudo nano /etc/udev/rules.d/41-usb_modeswitch.rules


и пишем в него следующую строчку (если у вас другой модем, не забудьте вставить туда свои ID производителя и устройства):


ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="155b", RUN+="usb_modeswitch '%b/%k'"

Важно задать правило для udev именно для ID, по которому у нас определяется модем как накопитель, а не наоборот!!! Т.е. 12d1 155b — это накопитель, 12d1 1506 — это модем. В файл rules вписываем ID накопителя

Выключаем RPi:


$ sudo shutdown -h now


Для надежности и достоверности теста можно передернуть питание. Включаем RPi и сразу смотрим на вывод
lsusb
. Если определился как модем — то все отлично, если нет — то вам в список полезных ссылок=))

ПОДКЛЮЧЕНИЕ К 3G

Есть два пути — ручная настройка или использование сторонних разработок. Для простоты выберем второй вариант.

Создадим папку, скачаем в нее Sakis3G, разархивируем и дадим права на выполнение данной утилиты


$ mkdir ~/3g
$ cd 3g/
$ wget http://sourceforge.net/projects/vim-n4n0/files/sakis3g.tar.gz
$ tar -xzvf sakis3g.tar.gz
$ sudo chmod +x sakis3g


Далее, запустим Sakis3G в интерактивном режиме для установления соединения:


$ sudo ./sakis3g --interactive


sakis3g имеет графическое меню. В принципе, оно должно быть понятно. Для установления соединения будем выбирать следующие пункты

Connect with 3G / USB device / Mobile Connect / Interface #0 /

В следуюющем окне под названием «Please select APN» просят выбрать из двух вариантов:
1. (internet.mts.ru) — это настройки, я так понимаю, зашитые в модем
2. Custom APN...

Можно не заморачиваться и выбрать первый пункт. Параметры будут указаны автоматически.

При выборе второго пункта, придется в последующем вводить параметры APN:
1. APN: internet.mts.ru
2. APN_USER: mts
3. APN_PASS: mts
и только после этого будет осуществляться попытка соединения.
Указанные мною параметры APN — для Калининградской области. Для другого региона узнайте их у своего оператора, как это и советует программа.

После подключения появится сообщение о том, что ваш модем подключен к сети. Жмем ОК и попадаем в главное меню. Можно выйти, получить информацию о соединении или отключиться от сети.

Если просмотреть все пункты в во всех меню sakis3g, то нигде нельзя будет найти опции — авто реконнект при потере соединения. К сожалению нужна еще одна утилита.

РЕКОННЕКТ ПРИ ДРОПЕ

Скачаем утилиту umtskeeper, разархивируем в каталог ~/3g:


$ mkdir ~/3g
$ cd ~/3g
$ wget http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz
$ tar -xzvf umtskeeper.tar.gz
$ chmod +x umtskeeper

ВАЖНО! umts_keeper уже идет вместе с sakis3g. Поэтому можно качать только umts_keeper и не делать предыдущий шаг.

Для автоматического подключения и реконнекта при дропе необходимо запустить umtskeeper с соответствующими параметрами (в моем случае с МТС и ID модема 12d1:1506):


# ./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' SIM_PIN='0000' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no'


После этого ждем, пока не загорится диод на модеме, сообщающий, что все хорошо и интернет есть. Завершить работу umtskeeper можно нажатием Ctrl+C.

Действие данной утилиты с данными параметрами происходит безмолвно, поэтому смотрим лог:


$ tail /var/log/umtskeeper.log -f


АВТОЗАГРУЗКА

Для авто подключения при запуске RPi воспользуемся одним из вариантов, а именно — редактированием /etc/rc.local:


$ sudo nano /etc/rc.local


куда внесем запуск umtskeeper (не забудьте указать путь, специфичный вашей Raspberry). Не забываем в конце поставить & для запуска в фоне:


/home/pi/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' SIM_PIN='0000' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' &


Перезагружаемся и проверяем.

РЕЗЮМЕ И КРИТИКА

Критика, как всегда одна — высокоуровневые утилиты, настройка не через файлы конфигов, что понижает прозрачность и надежность. Я думаю, это тема для отдельной статьи.

ПОЛЕЗНЫЕ ССЫЛКИ

Маленький британский шпион – закладка на Raspberry Pi
GPRS usb modem, Huawei E171
Huawei E1550 3G modem
Run a script on start up

Комментарии (21)

RSS свернуть / развернуть
+
0
Я на RPi сделал сделал камеру. Если взять у оператора прямой IP, то можно соорудить неплохую веб-камеру. Моя статья
avatar

ivanserov

  • 9 июня 2014, 15:32
+
0
Следующая моя статья, она уже подготовлена — посвящена именно удаленному доступу к RPi, но не через получение белго IP от провайдера, а через VPS и поднятия туннеля
avatar

danil_borchevkin

  • 9 июня 2014, 19:03
+
0
Дружище, а не подскажешь ли одну вещь? Значит, имеем Малину с подключенным 3G модемом. По команде ifconfig видим IP адрес, например 20.10.111.216, и пытаемся управлять GPIO через webiopi. И ничего не получается. По локалке через WiFi все работает.
avatar

sasha

  • 4 октября 2015, 23:25
+
0
не работал c webiopi, поэтому ничего подсказать не могу
avatar

danil_borchevkin

  • 5 октября 2015, 10:11
+
0
Спасибо, что ответил, уважаемый danil_borchevkin. С твоего позволения еще один вопрос… Все что касается моего первого вопроса, только без webiopi. Т.е. все попытки подключиться извне к Малине проходят неудачно. Но, повторюсь, локалка по WiFi работает без вопросов. Большое спасибо за внимание.
avatar

sasha

  • 5 октября 2015, 10:47
+
+1
Правильно ли я понимаю, что вам нужно удаленно управлять RPi через 3G модем — т.е. у вас где то установлена RPi, и вы удаленно пытаетесь подключиться по IP-адресу через веб-интерфейс, SSH и т.д?

Если мои предположения верны — то это не сработает — сотовые операторы выдают т.н. «серый» IP — свой локальный, и для выхода в интернет у них общий гейт — т.о. вы пытаетесь подключиться на гейт, а не на RPi. Решение в таком случае:
1. Купить «белый» IP — статический IP — такая услуга есть у каждого оператора.
2. Если нужно SSH — то поднимать ReverseSSH
3. Воспользоваться DNS (например, https://www.noip.com/remote-access), чтобы имея динамический IP, иметь статический IP с форвардингом до динамического.
4. Может быть есть еще варианты, но самые популярные — выше.
avatar

danil_borchevkin

  • 5 октября 2015, 11:27
+
0
Огромное спасибо. Будем думать…
avatar

sasha

  • 5 октября 2015, 23:14
+
0
Взялся настраивать свой модем:
$ lsusb
Bus 001 Device 004: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
При настройке через Sakis3G получил ошибку:
Port /dev/ttyUSB0 is currently occupied by 2687 gammu-smsd.

Остановил gammu-smsd, успешно сделал ручную настройку для Мегафона internet / gdata / gdata

Предполагается оставить возможность периодически просматривать приходящие СМС. Одновременно ни как это работать не будет? В принципи инет на устройстве постоянно не нужен, пока планируется только время синхронизировать (RTC есть, потом потом настрою).
avatar

Bender

  • 6 декабря 2014, 16:03
+
0
не знаю, не пробовал. Гугление быстрого результата тоже не дало

Для синхронизации времени можно использовать GPS-модуль, статей на эту тематику (синхронизация времени) огромное количество
avatar

danil_borchevkin

  • 6 декабря 2014, 23:55
+
0
Способов много, но мой вопрос был как сохранить возможность выхода в инет через модем и работу с СМС.
avatar

Bender

  • 6 декабря 2014, 23:57
+
0
Скорее всего готового решения для Raspberry нет — если нужно одновременно обрабатывать и AT-команды, и поддеривать активным интернет; по крайней мере, я не встречал. Конкретная была ситуация — поддерживать подключение + узнавать качество связи через АТ-команды — решение так и не было найдено
avatar

danil_borchevkin

  • 7 декабря 2014, 00:04
+
0
Теперь понятно для чего в B+ количество USB-портов увеличили :)
avatar

Bender

  • 7 декабря 2014, 00:20
+
0
Возможно ли как-то узнать на каком именно порту (/dev/ttyUSBXXX) подключен модем?
Как выяснилось, при наличии нескольких USB устройств, например модем и GPS применик, при перезагрузке порты раздаются случайным образом.
Сейчас стоит задача автоматического (на языке Си) определения порта USB-GPS. Пытался читать порты чтобы обнаружить внутри NMEA, так при попытке чтения из одного из модемных портов получаю повисание устройства по ssh.
avatar

Bender

  • 1 января 2015, 16:09
+
0
Для решения этого необходимо настроить правила для udev — есть статья как раз на эту тему http://robocraft.ru/blog/arduino/2985.html. Присвоив уникальное имя для точки монтирования, не будет необходимости в алгоритмах для определения что конкретно висит на /dev/ttyUSBXXX, а обращаться непосредственно к модему или GPS по конкретным точкам, например /dev/3gmodem и /dev/gps
avatar

danil_borchevkin

  • 1 января 2015, 16:34
+
0
Как должна выглядеть строка для переименования порта? В указанной Вами статье для Debian приведен пример:
BUS=="usb", SYSFS{idProduct}=="6001", SYSFS{idVendor}=="0403", SYSFS{serial}=="A6007Jii", NAME="myCraftDuino"

отличающийся от Вашего по формату (для Raspbian, что не удивительно)

ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="155b", RUN+="usb_modeswitch '%b/%k'"


Я пробовал:
ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", NAME="gpsusb"


Но по-прежнему:
[   89.638696] usb 1-1.2: new full-speed USB device number 5 using dwc_otg
[   89.741260] usb 1-1.2: New USB device found, idVendor=067b, idProduct=2303
[   89.741297] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   89.741313] usb 1-1.2: Product: USB-Serial Controller
[   89.741327] usb 1-1.2: Manufacturer: Prolific Technology Inc.
[   89.749316] pl2303 1-1.2:1.0: pl2303 converter detected
[   89.754582] usb 1-1.2: pl2303 converter now attached to ttyUSB0


$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

avatar

Bender

  • 12 января 2015, 12:35
+
+1
Для понимания сначала нужен вывод udevtest для вашего устройства. udevtest показывает, какие правила применяются для данного устройства, а также отладочную информацию udev

Я дал статью для примера — для того, чтобы узнать актуальную информацию на сегодняшний день и для конкретно вашей комбинации софта и оборудования, нужно воспользоваться:


$man udev


Если есть проблемы с назначением имени, можно создавать на точку монтирования символические ссылки — делается это заменой в правиле NAME=«mydevice» na SYMLINK+=«mydevice»

Что касается работы с udev и написания правил, вам лучше обратиться к первоисточникам:

https://wiki.debian.org/ru/udev
http://reactivated.net/writing_udev_rules.html
avatar

danil_borchevkin

  • 12 января 2015, 13:10
+
0
Спасибо, уже разобрался. Привел там нужную строчку.
avatar

Bender

  • 12 января 2015, 15:14
+
0
Уважаемый ivanserov. Являясь давним Вашим поклонником осмелюсь задать вопрос: не могли бы Вы расписать (разжевать) строку реконнекта. ./umtskeeper --sakisoperators «USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' SIM_PIN='0000' APN_USER='mts' APN_PASS='mts'» --sakisswitches "--sudo --console" --deicename 'Huawei' --log --silent --nat 'no'
Где-то в глубине души я понимаю что это выполняется sakis3g, но, мне кажется, где-то я чего-то не прописываю. С USBMODEM='12d1:1506 я разобрался. Большое спасибо.
avatar

sasha

  • 14 мая 2015, 07:32
+
0
В частности меня интересует как вписать туда пункт из меню «Pleace select APN» (internet.mts.ru), чтобы подключаться по-Вашему по настройкам зашитым в модем. Вручную у меня все работает.
avatar

sasha

  • 14 мая 2015, 10:54
+
0
Всем, кто обратил внимание на мои трудности, большое спасибо. Сам разобрался.
avatar

sasha

  • 17 мая 2015, 20:35

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.