Една от задачите e да използвам Raspberry PI за поемане на задълженията метеорологична станция.
Raspberry PI платката не е снабдена с часовник за реално време - което означава, че трябва да използвате сървър NTP.
Обикновено трябва да използвате настройките по подразбиране и да се позволи на PI да се свържете с Интернете.
Сега това е добре, ако имате работеща интернет връзка, но какво ще стане ако не сте свързани към мрежата?
Може да се помисли за употребата на PI с батерии. Сега очевидно решение тук е да се използва GPS като източник на точно време.
GPS работи благодарение на спътници в орбита и всеки един носи много точен атомено сверяван часовник.
Така че, в тази статия ще стане дума как да използвате приемник GPS с Rasperry PI - въпреки че тези инструкции не са специфични за PI.

Хардуерът

За този експеримент съм ползвал USB GPS приемник.

Raspberry PI с GPS приемник.

Устройството идва със CD за Windows, но нямаме нужда от него - като по-голямата част от GPS приемници, които познавам от употреба си полават сериен порт.
Когато се включи се появява като сериен порт.

Включете го и напишете lsusb

pi@raspberrypi:~$ sudo lsusb

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


Prolific е нашия GPS явяващ се като сериен порт.
Ако се вгледате в /var/log/syslog ще забележите, че е създаден COM порт като /dev/ttyUSB0 като това е първият сериен порт.

Използване на PI като GPS приемник

Сега следващата стъпка е да накарате PI да получава данни от сателитите.
Трябва ни пакет от инструменти, достъпни за Linux нарича gpsd , който ще инсталирате:
pi@raspberrypi:~$ sudo apt-get install gpsd gpsd-clients python-gps
След това стартирате демона:
pi@raspberrypi:~$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

Игнорирай всички съобщения от конзолата или в лог файла, може да видите, че се оплакват от IPv6.

Преглед на местоположението ви по GPS

GPS не работи на закрито - тъй като се нуждае от ясна видимост към небето. Поставете PI на перваза на прозореца.
Сега в SSH в PI стартираме cgps.

pi@raspberrypi:~$ cgps -s

След това трябва да получите следния резултат:

	┌───────────────────────────────────────────┐┌─────────────────────────────────┐
	│    Time:       2012-06-18T15:05:10.0Z     ││PRN:   Elev:  Azim:  SNR:  Used: │
	│    Latitude:    51.231848 N               ││  14    43    249    40      Y   │
	│    Longitude:    0.514014 E               ││  25    75    283    37      Y   │
	│    Altitude:   132.3 m                    ││   2    26    085    31      Y   │
	│    Speed:      0.0 kph                    ││  12    56    070    18      Y   │
	│    Heading:    0.0 deg (true)             ││   9    19    133    22      Y   │
	│    Climb:      0.0 m/min                  ││  27    09    133    17      Y   │
	│    Status:     3D FIX (1 secs)            ││   4    17    045    31      Y   │
	│    GPS Type:                              ││  32    05    321    20      Y   │
	│    Longitude Err:   +/- 8 m               ││  29    41    192    18      Y   │
	│    Latitude Err:    +/- 9 m               ││  31    28    304    42      Y   │
	│    Altitude Err:    +/- 27 m              ││                                 │
	│    Course Err:      n/a                   ││                                 │
	│    Speed Err:       +/- 68 kph            ││                                 │
	│                                           ││                                 │
	│                                           ││                                 │
	│                                           ││                                 │
	│                                           ││                                 │
	│                                           ││                                 │
	└───────────────────────────────────────────┘└─────────────────────────────────┘

Тук можете да видите, че е се получава информация от 10 спътника и има времето и местоположението ви.
В 3D раздел FIX ви казва, че има достатъчно данни за 3D определяне на местоположението ви (т.е. надморска височина).

Настройка на компютърnoto време, използвайки GPS

Сега имаме работещ GPS и сега може да ползвате PI за настройка на времето.
За да направите това, ние трябва да конфигурирате NTP да се използва GPS сателити като източник време.
Сега вече трябва да имате NTP инсталиран, но ако не, тогава трябва да го инсталирате:

pi@raspberrypi:~$ sudo apt-get install ntp

След това трябва да редактирате файла: /etc/ntp.conf и да добавете няколко реда за определяне на GPS.
Това може да бъде преди или след съществуващи линии:

# gps ntp
server 127.127.28.0 minpoll 4
fudge 127.127.28.0 time1 0.183 refid NMEA
server 127.127.28.1 minpoll 4 prefer
fudge 127.127.28.1 refid PPS

Сега рестартирайте NTP:

pi@raspberrypi:~$ sudo service ntp restart

Сега, ако запитате сървъра след известно време трябва да синхронизира:

pi@raspberrypi:~$ ntpq -p

	==============================================================================
	*ns1.luns.net.uk   33.117.170.50    2 u   54  64    7   65.454   2.666   5.800
+resntp-b-vip.lo   127.151.91.34    3 u   45  64   17   55.704   -5.169  8.482
+bart.nexellent.   194.242.34.149   2 u   17  64   17   76.585   -4.271  57.595
+v01.s01.be.it2g   193.190.230.65   2 u   20  64   37   86.464   -2.374 228.460
xSHM(0)           .NMEA.            0 l   11   16  377    0.000 144.714   3.026
SHM(1)            .PPS.             0 l    -   16   0    0.000    0.000   0.000

Няколко бележки:

Може да откриете, че NTP не се свързва с GPS в началотоа.
Изглежда, че cgps опитва без връзка към серийния порт.
Това, което трябва да се направи е:

pi@raspberrypi:~$ sudo killall gpsd
pi@raspberrypi:~$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock
pi@raspberrypi:~$ sudo service ntp restart

След като съм направил това, се оправя и започва да работи нормално.
Понякога работи cgps обаче изчаква за определяне на GPS позицията.