The project
A micro:bit measures temperature, humidity, pressure and light. It sends them by radio to a second micro:bit used as a gateway. The gateway sends them to a Python server over a serial link. The server stores them in SQLite and answers an Android app over UDP. From the app you can also change the order of the values shown on the sensor screen.
- Sensor micro:bitBME280, light sensor, OLED
- Radio 2.4 GHz, XOR + nonce
- Gateway micro:bit
- UART, XORSHIFT32 + CRC16
- Python serverSQLite, Grafana
- UDP
- Android app


Securing the radio link
At first the values were sent in clear text. Anyone nearby could read them. We then used XOR with a fixed key but identical frames gave identical bytes. So we added a nonce that changes for every frame. A CRC16 detects broken frames and the gateway ignores a frame if its nonce was already used.
AES would have been better. The micro:bit has an AES chip but our SDK did not give access to it. We wrote this limit in our report.