Designing a NBIOT/LTE CAT-M1 GPS tracker for Google Cloud IOT Platform
In this post i want to share about the new LTE-CAT-M1 and NBIOT enabled GPS tracker we designed for the UK market. This device is based on the VALTRACK-V2B device and has everything similar except few changes. This device was designed based on a clients requirement who needed the GPS tracker to connect to Google Cloud IOT Platform by MQTT through NBIOT network.
Cellular module : Due to the nature of the requirement we selected the SIM7000E module made by SIMCOM. SIM7000E will work for European and Asian regions and for USA we can use the SIM7000A module.
The SIM7000E has a 2G fallback option and which can be used in case the NBIOT network is not available which will be very useful because in India, still the NBIOT network is not available.
Power supply : The device works from 12V to 28V input. MP1584 switching regulator is used in this design which will reduce the 12V input to 5V and then a high current LDO is used for reducing 5V to 4V for extra protection.
GSM module SIM7000E will run on 4V. This 4V is again converted to operate the MCU and low power circuitry including EEPROM and accelerometer.
Protection : Reverse polarity protection is added on this device for wrong polarity power insertion.
MCU selection : We had different choices but we choose STM32L451 series MCU for this application because we needed to get the device to connect to Google Cloud IOT core. Google Cloud IOT core supports MQTT with TLS 1.2 encryption. We had seen this MCU run TLS library given by the ST microelectronics on an evaluation board, so we knew for sure that this chip can comfortably handle it.
Accelerometer : The board has LIS3D accelerometer by ST microelectronics which will be helpful for adding motion sensing capabilities to this device
Storage : We added SOIC package EEPROM on board to save configuration data, this EEPROM has enough space to save the GPS pings and later forward it on network disconnection. The footprint is compatible with FRAM chips too. In case if we need to save data at higher rate, a FRAM chip can be utilized in this place (FRAM has significantly higher write cycles than EEPROM).
GPS Module : The GPS module is the SIM39EA which is used in the VALTRACK devices and it’s also footprint and software compatible with Mobiletek made N39 module.
USB-UART converter : The very important addition to this board is the USB to UART converter, we added a silicon labs CP2102 chip for this purpose for connecting board to PC for configuration. CP2102 is a very nice chip with very less external components. This USB port below the board will help in parameter configuration and data viewing for debugging purposes.
Antenna : The cellular antenna is a SMA antenna and a U.FL connector is also provided which can be used for connecting flex antenna as used in the V2 and V2B for size constrained applications. . Since the SIM7000 has inbuilt GPS option we left the GPS antenna of the module routed to a SMA connector for future use with an external active antenna. But we don’t recommend using the GNSS part of SIM7000E, its very unstable and can kill the module. (More on this in coming posts.)
I/O voltage level translator : SIM7000E uses 1.8V I/O levels on its UART and GPIOS, so we added TXS0108 1.8V to 3.3V bidirectional I/O level translator for I/O level conversion between MCU and the module.
SIM card connector : A push-push type nano sim connector is added for easy sim insertion and removal.
Power flow control : Two power MOSFETS are added for turning the GSM and GPS module ON and OFF
Board bring up story :
Once we got the boards assembled, we got them up and running in no time with the bare metal code used in VALTRACK series devices. But we needed to use the GCP library given by ST micro which made use of the Mbed TLS and lot of other code for connecting to Google Cloud platform on TLS 1.2 encryption.
We did try this SDK initially but it had whole lot of problems during encryption. Then we found some commands that will make the SIM7000E handle the TLS encryption part. So, we just used the encryption library for JWT generation and left TLS handshake and encryption to SIM7000 module. The software worked flawless after 15 days of development.
ES256 keys used instead of RSA256 for JWT generation :
The ES256 keys were used instead of the RSA256 as the generated keys and certificates were much smaller compared to the RSA256 encrypted keys. The encryption connection does make the packets reach slowly to the server but its acceptable.
The google cloud platform expects you to send the JWT ( JSON Web Token) in the password field of MQTT connect packet.
SIM7000 modules have inbuilt MQTT commands which we thought of testing and found that they are useless for GCP because the JWT cannot fit into the 128 byte size limited password field of this inbuilt command. So we had to revert back to normal TCP socket communication and wrote code for forming the packets ourselves.
The SIM7000E can be replaced with SIM5300E for 3G network in Europe as they are pin compatible.
We have also tested this device to work with Vodafone NBIOT network when we recently visited to Bangalore testing facility.