Capstone project for my computer engineering bachelor. The project consists of a system capable of opportunistically reading sensor values from BLE tags (beacons) by a smartphone (gateway) and returning it to a backend with associated geolocation data.
It uses ECDSA for authentication of the BLE tag by the server, taking advantage of the extended advertising size available on BLE 5.0+.
The BLE tag (beacon) is a Holyiot 21014-V1.0, based on the nRF52810 chipset. The software was developed using Zephyr.
The application running in the smartphone (gateway) was made using Flutter and has the following class diagram:
The backend was developed with Rust using Azure's cloud services. The HTTP parser runs inside an Azure Function and all the data is saved in an Azure Cosmos DB.
The smartphone app sends an HTTP post to the server with the following data:
The database has two collections, one for the beacon registration and the other for the positions received.
Here is an example of a plot of the data received from two moving beacons and 4 fixed gateways: