Squeak is growing to be an open-source platform for LoRaWAN GPS tracking. Its goal is to be small enough to be easily carried around by a pet and have such a long battery life that it's not a hassle to keep it working.
Latest hardware revision is smaller and has more features than the original prototype. A comprehensive comparison is in the following table, but the general functionality of the device is similar to the original, described further down.
------------------- Original description -------------------
The size is 38mm x 20mm x 12mm. This does not include battery and antenna
The module is always powered by the top LDO but is kept in sleep most of the time. On request it can switch on the LDO to the GPS module and wait to get a fix that it can then uplink through LoRaWAN. The GPS module's RAM is always kept powered through its V_BACKUP line (not shown here) and there's also a battery voltage measurement circuit.
Project hardware available on EasyEDA.
- Microchip RN2483 LoRaWAN modem running custom firmware. I kept the LoRaWAN part as developed by Microchip, but wrote my custom application that runs on the PIC in the modem
- Quectel L80 GPS module
- Microchip MCP73831 LiPo battery charger IC
- Torex XC6215 LDOs
Measurements are periodically reported through uplink messages that use the lowest data rate possible (DR0 - SF12BW125 in EU), to maximise the chances of a packet being picked up by a gateway. Packet structure is, in bytes:
 - Header: 0x80 - GPS off; 0x81 - GPS on for N transmissions then will be switched off; 0x82 - GPS switched on every M transmissions. GPS mode, N and M are set via downlink config messages
[1-2] - 16 bit counter of number of packets sent. Can be used to check if packets have been missed (e.g. bad network coverage)
 - Battery charge state, roughly in %
 - Temperature in deg. C. Signed int, 1 degree resolution.
[5-8] - Time of last valid GPS fix. 27 packed bits: (7 bits year), (4 bits month), (5 bits day), (5 bits hour), (6 bits minute)
[9-12] - GPS Latitude
[13-16] - GPS Longitude
Downlinks configure the behaviour - how often uplinks are sent and which of these uplinks should contain GPS measurements. Packet structure:
 - Uplink interval, in multiples of 2 minutes
 - GPS mode. 0x00 - GPS off; 0x01 - GPS on for N transmissions then will be switched off; 0x02 - GPS switched on every M transmissions
 - N or M, depending on GPS mode
The firmware is available on GitHub.
Cloud data service
For pet owners to actually interact with the tracker there's a Telegram bot that one can ask to share the location of the tracker