2 This document was created by Steven Baltakatei Sandoval on
 
   3 ~2020-07-23T22:27Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It
 
   4 was updated by Steven Baltakatei Sandoval on ~2020-07-25T19:34Z~
 
   5 ** Development Task list
 
   6 *** Set up prototype unit
 
   7 **** DONE Solder wire for PPS signal
 
   8 ***** 2020-07-25T20:03Z; bktei> Soldered pins to permit accessibility.
 
   9      CLOSED: [2020-07-25 Sat 20:03]
 
  11 - [[https://ozzmaker.com/forums/topic/connecting-gps-pps-pin/][Ozzmaker post]] on ~PPS~ wiring and a [[https://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html][guide]] recommendation.
 
  12 - [[http://www.satsignal.eu/raspberry-pi/Schmidt-RPZ-NTP-2016.pdf][Schmidt article]] on Raspberry Pi Zero time server.
 
  13 - [[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html][GPSD dev ref]] page for ~gpsd~ interfacing with ~ntp~.
 
  14 - [[https://raspberryautomation.com/connect-multiple-ds18b20-temperature-sensors-to-a-raspberry-pi/][Raspberry Autom]] article on specifying custom GPIO pin.
 
  15 *** Document prototype unit
 
  17 The ~ninfacyzga-01~ device is equipped with an Ozzmaker BerryGPS-IMU
 
  18 module which provides time and location data to ~gpsd~. The time is
 
  19 provided by GPS satellites which themselves are [[https://science.nasa.gov/science-news/science-at-nasa/2002/08apr_atomicclock/][equipped]] with atomic
 
  20 clocks. This extremely accurate set of clocks are needed since a GPS
 
  21 receiver calculates its position in space using a General Relativity
 
  22 calculation that uses the small variations in the time stamps received
 
  23 from each satellite. This means that ~gpsd~ may be used to set the
 
  24 system clock without a need for an internet connection to a default
 
  25 Debian time server; ~ninfacyzga-01~ can be its own time server.
 
  28 Ozzmaker BerryGPS-IMU, Version 3
 
  30 This guide describes steps that may be used to convert a Raspberry Pi
 
  31 into a time server using ~gpsd~.
 
  32 ** Operating Procedures
 
  34 **** Install Raspbian 10 (Buster) onto a Raspberry Pi Zero W.
 
  36 See [[https://ozzmaker.com/forums/topic/connecting-gps-pps-pin/][this]] Ozzmaker forum topic about connecting the BerryGPS-IMU
 
  37 ~T_PULSE~ pin to GPIO 18.
 
  39 Connect the ~T_PULSE~ connection on the BerryGPS-IMU-3 to GPIO pin 18
 
  40 (ex: with solder and wire) in order to provide the PPS data signal
 
  41 generated by the BerryGPS-IMU to the Raspberry Pi. Processing of this
 
  42 data signal is handled by adding a line to ~/boot/config.txt~ in the
 
  43 next section ("Install Software").
 
  46 These instructions assume that ~gpsd~ has already been setup to
 
  47 provide NMEA sentences to ~gpspipe~ for location. See the ~README.org~
 
  48 in ~doc/location~ for details. Basically, ~gpsd~ needs to be told via
 
  49 its ~/etc/default/gpsd~ configuration file of which ~/dev/ttyS0~ will
 
  50 provide the raw GPS module data.
 
  52 ***** Install packages via ~apt~
 
  53 Run the following command to install the required packages.
 
  54 : $ sudo apt install usbmount eject gpsd gpsd-clients python-gps pps-tools ntp
 
  56 ***** Modify ~/boot/config.txt~
 
  57 In order to tell the Raspberry Pi to expect PPS data on ~BCM 18~ (pin
 
  58 number 12; see [[https://pinout.xyz/][RaspPi pinout]]), add the following line to
 
  59 ~/boot/config.txt~ as described on [[https://ozzmaker.com/forums/topic/problems-with-pps-on-a-pi0w-running-raspian-and-attached-to-a-berrygps-imuv3/][this Ozzmaker page]]:
 
  61 : dtoverlay=pps-gpio,gpiopin=18
 
  63 PPS data can be confirmed by running:
 
  68 trying PPS source "/dev/pps0"
 
  69 found PPS source "/dev/pps0"
 
  70 ok, found 1 source(s), now start fetching data...
 
  71 source 0 - assert 1595708074.003644641, sequence: 219 - clear  0.000000000, sequence: 0
 
  72 source 0 - assert 1595708075.003709620, sequence: 220 - clear  0.000000000, sequence: 0
 
  73 source 0 - assert 1595708076.003779580, sequence: 221 - clear  0.000000000, sequence: 0
 
  74 source 0 - assert 1595708077.003850580, sequence: 222 - clear  0.000000000, sequence: 0
 
  78 As per [[https://www.slsmk.com/how-to-setup-a-gps-pps-ntp-time-server-on-raspberry-pi/][the slsmk.com]] guide, create symbolic links expected by ~ntp~
 
  79 pointing to the PPS device. This may be performed by creating the file:
 
  81 : /etc/udev/rules.d/09-pps.rules
 
  86 KERNEL=="ttyAMA0", SUBSYSTEM=="tty", DRIVER=="", OWNER=="root", GROUP=="tty", MODE=="0777", SYMLINK+="gps0"
 
  89 ***** Modify ~/etc/modules~
 
  90 For older versions of Raspberry Pi, it may be necessary to explicitly
 
  91 require the ~pps-gpio~ module to be loaded by making sure
 
  92 ~/etc/modules~ contains the line:
 
  96 According to [[https://www.raspberrypi.org/forums/viewtopic.php?p=757747#p757747][this]] post on 2015-05-13T09:14 by [[https://www.raspberrypi.org/forums/memberlist.php?mode=viewprofile&u=31454][ame]] on the Raspberry Pi
 
 103 > I want the RPi to load/probe the w1-gpio module on boot.
 
 107 > sudo modprobe w1-gpio
 
 109 > To the etc/modules file, but on boot it is not loaded.
 
 110 > I have checked this by the lsmod command. If i then enter the above line manually and then check it's there loaded.
 
 112 > What's wrong with my line on code in the modules file?
 
 116 You no longer need to load modules for some devices. It's handled by devicetree.
 
 118 Search for "devicetree" on the forum, or start here:
 
 119 https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314
 
 122 As of 2020-07-25, using Raspbian Buster 10 with a BerryGPS-IMU v3,
 
 123 ~/etc/modules~ did not need to be modified.
 
 125 ***** Remove DHCP client hooks
 
 126 As per [[https://www.slsmk.com/how-to-setup-a-gps-pps-ntp-time-server-on-raspberry-pi/][this]] guide, "remove ntp DHCP hook (so that it doesn't override ntp settings)".
 
 128 This can be performed by running the following command (shown in
 
 129 script form for readability):
 
 132 if [ -f  "/etc/dhcp/dhclient-exit-hooks.d/ntp" ]; then
 
 133     mv /etc/dhcp/dhclient-exit-hooks.d/ntp /etc/dhcp/dhclient-exit-hooks.d/xxxntp-orig;
 
 135     echo "NTP exit hook does not exist";
 
 142 *** Unscheduled Shutdown