Главная FAQ по Ubuntu Ubuntu 10.04 - Подключение приемника GPS по bluetooth
Ubuntu 10.04 - Подключение приемника GPS по bluetooth PDF Печать Email
FAQs - Операционная система Ubuntu
07.08.2010 19:20

Несмотря на значительный прогресс в поддержке различного железа, достигнутый операционной системой Юбунту, некоторые шероховатости по-прежнему имеют место быть. В частности, я столкнулся с ними при подключении приемника GPS по bluetooth.

Несмотря на значительное количесто имеющихся в интернете рекомендаций, ни одна из них не подошла мне в чистом виде, пришлось маневрировать и комбинировать. Итак, что я делал:

1. Почти в чистом виде передрал советы по модификации конфигурациооных сервисов блутуса (взято отсюда: http://aspire1.ru/forum/31-4945-1):

 

 

По умолчанию служба serial в bluetooth не работает при старте системы. исправим это:

 

Code
sudo gedit /etc/bluetooth/serial.service

Заменяем содержимое на следующее:

[Bluetooth Service] 
Identifier=serial 
Name=Serial service 
Description=Bluetooth Serial Port service 
Autostart=true

Отредактируем файл hcid.conf :

 

Code
sudo gedit /etc/bluetooth/hcid.conf

Заменяем содержимое файла на следующее:


# HCI daemon configuration file. 
#

# HCId options 
options { 
# Automatically initialize new devices 
autoinit yes;

# Security Manager mode 
# none - Security manager disabled 
# auto - Use local PIN for incoming connections 
# user - Always ask user for a PIN 

security user;

# Pairing mode 
# none - Pairing disabled 
# multi - Allow pairing with already paired devices 
# once - Pair once and deny successive attempts 
pairing multi;

# PIN helper 
#pin_helper /usr/bin/bluepin;

# D-Bus PIN helper 
#dbus_pin_helper;

# Default PIN code for incoming connections 
passkey "1234"; 
}

# Default settings for HCI devices 
device { 
# Local device name 
# %d - device id 
# %h - host name 
name "%h-%d";

# Local device class 
class 0x3e0100;

# Default packet type 
#pkt_type DH1,DM1,HV1;

# Inquiry and Page scan 
iscan enable; pscan enable;

# Default link mode 
# none - no specific policy 
# accept - always accept incoming connections 
# master - become master on incoming connections, 
# deny role switch on outgoing connections 
lm accept;

# Default link policy 
# none - no specific policy 
# rswitch - allow role switch 
# hold - allow hold mode 
# sniff - allow sniff mode 
# park - allow park mode 
lp rswitch,hold,sniff,park;

# Authentication and Encryption (Security Mode 3) 
#auth enable; 
#encrypt enable; 
}

2. Далее определяем МАС адрес GPS устройства:

> hcitool scan

Scanning ...
00:0B:0D:6F:F9:C5 SJA GPS

3. Далее, с помощью команды spdtool определяем канал:

> sdptool browse 00:0B:0D:6F:F9:C5

Browsing 00:0B:0D:6F:F9:C5 ...
Service Name: SPP slave
Service Description: Bluetooth SPP V1.01
Service RecHandle: 0x10000
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100

Приведенный выше листинг показывает как это должно работать (показывает канал 1), однако, у меня ничего не получилось, листинг моего устройста  был попросту пуст. Поэтому мне пришлось методом научного тыка решить что у меня канал тоже 1-й. Время показало, что это был удачный выбор.

4. Создаем виртуальный последовательный порт, с помощью которого устройство gps, используюя его МАС-адрес и канал, связывается с device rfcomm0:


> rfcomm bind /dev/rfcomm0 00:0B:0D:6F:F9:C5 1

Проверяем, как это работает:

> cat /dev/rfcomm0

Если все ОК, то на консоль начнется вывод данных в стандарте NMEA.

5. (взято отсюда: http://aspire1.ru/forum/31-4945-1):

В линуксе в качестве связующего звена между железом и софтом используется демон gpsd, который берет на себя всю ответственность за получение координат и другого рода информации от ГПС устройств. Это сильно упрощает написание программ, потому как в этом случае программистам не надо забоититься о поддержке разного рода протоколов от ГПС устройств. Нужно только соединиться с gpsd сервисом и получить от негу необходимую информацию.

 

Чтобы запустить gpsd нам потребуется название утройства и стартуем gpsd дополнительные параметры. Например я чаще всего запускаю его с параметрами

 

Code
sudo gpsd -N -D 3 -b /dev/rfcomm0

где,

* опция “-N” не позволяет отпустить консоль после запуска 
* опция “-D 3″ повышает уровень выводимой на консоль информации 
* опция “-b” переводит gpsd в режим Read-Only (ничего не посылать в порт). Используется с некоторыми глупыми GPS (у меня похоже такой) которым сносит крышу от того что им что то пишут в порт. 
* /dev/rfcomm0 — системное устройство отвечающее за связь с bluetooth приемником (на его месте может быть /dec/ttyUSB0 для USB или любое другое)

Gpsd сервис теперь запущен (отсутствие сообщений об ошибке в выводе команды) и надо проверить что сигнал идет. В пакете gpsd-clients идет утилита xgps для отображения информации получаемой от gpsd демона.

Утилита наглядно показывает доступные в зоне видимости спутники, координаты, высоту, некоторую дополнительную информацию — что означает что ГПС модуль и gpsd демон работают нормально.

 

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

 

Code
sudo rfcomm bind rfcomm0 
sudo rfcomm release 0 
sudo rfcomm connect 0 - вот эти тири команды у меня не работали, пришлось последние две просто не использовать, а  первую заменить на полноформатную rfcomm bind /dev/rfcomm0 00:0B:0D:6F:F9:C5 1
sudo killall gpsd 
sudo gpsd -N -D 3 -b /dev/rfcomm0 
sudo xgps

Софта под линукс конечно очень мало. Более-менее приемлимый: TangoGPS. Работает он только на указание места на карте(карты подгружаются в кэш(лучше дома с широким каналом)) и запись маршрута.

 

 

 

 

LAST_UPDATED2
 

© 2012 Web-Студия Brooks, Санкт-Петербург. Все права защищены.
Санкт-Петербург