Orange Pi
Zero NTP Stratum 1 PPS GPS Server with Armbian OS.
by
Kevin Schwartzel.
This tutorial is for the Orange Pi
Zero, but will probably work for other
boards.
I will assume that you know what a GPS PPS disciplined NTP server is.
If you don't know, then please Google it.
We will use NTPsec instead of NTP or Chrony.
NTPsec is a more secure and lighter version of NTP and it works well
without
GPSD. I would imagine that NTP would also work.
Chrony seems to be preferred by some users. I tried to use it
on the Orange Pi Zero,
but it required GPSD to interface with the GPS module, and although it
worked,
GPSD was unstable, and would just stop communicating and would require
a
restart about once a day. I didn't know of a way to make Chrony work
without
GPSD, so I uninstalled it and used NTPsec instead.
Components:
1. Orange Pi Zero Set4: Orange Pi Zero512MB+Protective White Case H2 Quad Core Open-source development board.
2.
A 5V 3A power supply with the correct plug type for your
country with a micro-usb connector
3.
A small NMEA capable GPS module with ttl serial port,
built in antenna and PPS output that can run on 3.3V. I
managed to fit it inside the top of the Orange Pi case.
4.
A
small heat-sink. I cut up a larger one that I had
lying around. I used heat
sink compound and a rubber band to hold mine on.
5.
A
MicroSD card 4GB or more at least class 10.
6. A Windows, Linux or Mac computer with a MicroSD card port or a MicroSD card adapter. Instructions are for Windows.
7.
USB
to serial TTL adapter 3.3V (and 5V).
Careful don’t buy one with a PL2303HX chipset because even with a
working
driver mine was unstable on Windows 7, 8 and 10.
PL2303TA is okay.
8.
Software to install the OS image on the SD card.
Balena Etcher is available for Linux, Windows, Mac and more
https://www.balena.io/etcher/
Another simpler and easier Windows program also suitable for older
versions of
Windows, Win32
disk imager. I had no success with Win32 disk
imager on
Windows 10 (it is claimed to work). It worked on XP, Windows
7 & 8.
9. 7Zip to unzip the Armbian OS image.
10. Putty or another serial terminal program.
11. Putty or another SSH terminal program.
12. WinSCP file manager for sftp file transfer and manipulation. I use this for file editing in the tutorial. You can if you wish use a Linux text editor instead.
13. Optional USB thumb drive – can be used as root drive with SD used for boot (via armbian –config) or can be used as root drive with boot from onboard SPI. (advanced). This tutorial does not cover this.
14. Optional software to configure the GPS module. If using Windows and TOPGNSS GN-701 or any other u-blox based module then u-blox u-center. (you can use this to disable unneeded message types and leave only NMEA GPRMC). U-blox instructions at the end of the tutorial.
Instructions:
Download the Orange Pi Zero OS from https://www.armbian.com/orange-pi-zero/
Armbian Bionic mainline kernel 4.19.y for Orange Pi Zero (other versions should also work)
Use 7Zip to extract the .img file
Write the Armbian OS image to the MicroSD card. Use Etcher or Win32 Disk Imager.
Win 32 Disk Imager on old Windows XP
Etcher on Windows 10
Insert the MicroSD card into the Orange Pi Zero.
Connect the Ethernet cable from your switch to your Orange Pi Zero. (if you don’t use Ethernet you may possibly configure WiFi later). This tutorial assumes that you are using Ethernet and that you have DHCP running to supply devices with IP addresses. I have not used WiFi for this so I don’t know if or how it will work.
Connect the USB to serial TTL adapter to the Orange Pi Zero:
The UART0 connector is three pins besides the network port.
RX to TX and TX to RX and GND to GND. Do not connect VCC.
On my adapter (yours may be different. Check the manufacturer’s instructions):
GND is black (connects closest to the edge of the board)
TX is green (connects to the middle connector)
RX
is white (connects furthest
from the edge of the board)
Note: I’ve soldered on some pins to connect the GPS.
It’s best to use pins and plugs to connect the GPS module to the Orange Pi
Zero rather than soldering it, so that you can unplug it and connect to a PC if
you want to change settings. (To connect to a PC. Plug the USB to serial TTL adapter into a USB port on
your computer.
Load up drivers if necessary).
Fire up Putty
and connect to the serial port of the USB to serial TTL adapter:
Baud rate is 115200.
On my computer the USB to serial TTL adapter is on COM6 (Yours is
likely to be
on another port). Check in device manager to find which port.
Now when you power up the Orange Pi Zero, you will see debug info and
you will
be able to communicate with the Orange Pi Zero through Putty until you
have
configured the Orange Pi Zero, after which you can connect using Putty
SSH via
the network rather than the USB to serial TTL adapter.
Plug
the power supply into the mains, and plug the micro-usb
end into the Orange Pi Zero.
As the board boots, you will see debug info scrolling on
Putty.
Eventually the process will ask you
to log in.
The user is root and the password is 1234.
You will now be asked to change the (root) password immediately. There are complexity rules, so choose a password longer than 8 characters.
First you will be required to input the old password 1234, and then the new password twice.
The Orange Pi Zero session logo and information will display.
NOTE: Record the
IP address.
You will need it later to connect using SSH.
You will now be required to set up a
sudo user. Choose your
preferred login name and enter any personal data that you want to (I
leave most
of this blank) and type your new users password twice.
After
this point, you will be able to use SSH to connect to the Orange Pi Zero
(assuming that your device obtained an IP address via DHCP).
Open
a new putty session
and use SSH to connect via the
network to the Orange Pi Zero at the IP address that you noted earlier.
If it works, you will get a security warning the first time you connect. Click Yes then Log in to the new session.
Use armbian-config to set up GPS PPS and uart
Note:
If you are logged in as root, you can leave off sudo on all
commands.
sudo armbian-config
Select System and click on OK
Click on hardware and click OK
Click on Edit Boot Environment (you can also edit this file directly /boot/armbianEnv.txt)
Add two lines to tell the Orange Pi Zero to use PA7 for PPS and uart1
for GPS
NMEA messages
overlays=uart1 pps-gpio
param_pps_pin=PA7
Use armbian-config to set up your host name if you want to
change it from the default.
This is fairly intuitive, so I' won't give instructions.
Google if you get stuck.
You can also set up a fixed IP if you want to. (I
just reserve the IP on my DHCP server).
Then get your OS up to
date:
sudo apt-get update
sudo apt-get upgrade
Once this is finished:
Remove the default NTP ( or you can use this instead of NTPsec if you want to)
sudo apt-get remove ntp
When NTP has been removed install NTPsec in it’s place.
sudo apt-get install ntpsec
You can use vi or another editor to
edit the /etc/ntp.conf
file, but I prefer to use WinSCP to connect to the Orange Pi Zero and
edit the
files through it.
Winscp uses the same credentials and settings as putty. (Log
in as root to
change protected files).
Navigate to /etc
Right click on ntp.conf and select edit.
Edit /etc/ntp.conf
At the top of the servers section
between
#
Specify one or more NTP servers.
and
#
Use servers from the NTP Pool Project
add these two lines:
server 127.127.20.1 mode 17 minpoll 4 iburst prefer true
fudge 127.127.20.1 flag1 1 flag2 0 flag3 0 refid oGPS
It should look something like this:
---------------------------------------------------------
# Specify one or more NTP servers.
server 127.127.20.1 mode 17 minpoll 4 iburst prefer true
fudge 127.127.20.1 flag1 1 flag2 0 flag3 0 refid oGPS
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst preempt
pool 1.ubuntu.pool.ntp.org iburst preempt
pool 2.ubuntu.pool.ntp.org iburst preempt
pool 3.ubuntu.pool.ntp.org iburst preempt
---------------------------------------------------------
Shut down the Orange Pi
Zero
sudo shutdown 0
Note: Wait for the LED to extinguish before unplugging the power.
Connect the GPS as follows:
I used plugs and pins, (but strait soldering is also okay).
Connect the GPS module to UART1 and PPS to PA-07
GPS Orange Pi Zero
-----------------------------
TXD UART1_RX PIN10
RXD UART1_TX PIN8
PPS PA-07 PIN12
VCC 3.3V PIN1 (careful this is not 5V)
A diagram of the pinouts from oshlab.com
https://oshlab.com/orange-pi-zero-pinout/
Log in to a new putty session (takes about a minute to boot before SSH is available)
Test that the PPS config is correct:
dmesg | grep pps
Ensure that the GPS is pulsing then test the PPS as follows:
sudo apt-get install pps-tools
sudo ppstest /dev/pps0
Control C to exit.
Test the GPS NMEA messages as follows:
sudo apt-get install gpsd-clients (this is huge. If you are low on space skip it or remove when done)
gpsmon /dev/ttyS1
The screen will blank then print a layout followed by NMEA strings
$GPRMC strings visible in the image.
Control C to exit
In order for NTPsec to
recognise the GPS PPS combo we need to create some
symlinks in /dev
sudo ln -sF /dev/ttyS1 /dev/gps1
sudo ln -sF /dev/pps0 /dev/gpspps1
Test NTP GPS PPS:
sudo service ntp restart
sudo ntpq –p
+NMEA(1) is our GPS.
When NTP is happy with the PPS, the + will change to o. If it changes to * and stays that way then PPS is not working but NMEA is working.
There is however a problem. /dev is transient, it is regenerated at every reboot.
To ensure that our symlinks get regenerated every time, we need to:
Create a new file in /etc/udev/rules.d called 99-gps.rules with the following:
KERNEL=="pps0",SYMLINK+="gpspps1",GROUP="dialout", MODE="0660"
KERNEL=="ttyS1", SYMLINK+="gps1",GROUP="dialout", MODE="0660"
Use WinSCP to navigate to the directory right click on a blank spot, select New, File
Save the file.
sudo udevadm control --reload-rules
sudo reboot (you may need to reboot more than once, I don’t know why).
Wait for reboot about a minute.
Open a new putty session:
ntpq –p
Success it works!
You can now connect to this NTP server and get really accurate time.
Construction:
I used a few drops of hot glue to mount my GPS module in the top of the Orange Pi Case, well clear of the heat-sink.
The completed project.
I flashed the boot loader onto the onboard SPI and the small
silver thumb drive holds
the OS, so there is no microSD card needed.
If you want to take it further and get a cleaner time stamp NMEA message:
Install the GPS software on windows
and configure
the module
to only send the GPRMC message and configure the PPS for one pulse per
second. Use the USB to serial TTL adapter to connect your
module.
Select the port and the baud rate (for u-blox usually 9600)
Select View, Messages view
Disable all messages except GPRMC
When this is complete the only data updated on the display will be the clock.
Configure the time pulse
Click send
Select CFG (Configuration)
Select save current configuration and click send.
Disconnect the module. If the module has a viable battery or non-volatile memory then it will remember these settings.