Connected Environments have built an IoT Bus Tracker for an excellent student led shuttle service between Stratford Station and UCL East. The service is run completely by students and is free to use. Hosted on UCL servers, the live view of the shuttle is at: https://bus.cetools.org/.
The system has two parts: a tracker that connects over cellular and send a message to our MQTT server (mqtt.cetools.org , topic: UCL/OPS/Bus) and a web page that displays the location of the bus. After we prototyped the Traccar system on a RPi, Steve did the heavy lifting setting up the live Traccar server in Portainer on our own CE infrastructure and created a web app to display the location of the bus.
After a succesful launch in at the start of 2026, the app has been running smoothly and has been costing about 9p per day on a giffgaff pay as you go SIM. As a result of this app and chatting to Bal in the canteen a request came in to ask if we knew of a scanner he could buy to scan student ID cards and record when students were using the bus. 24 hours later we had built the second part of the project - a web app for scanning student ID card barcodes and saving a timestamped list of codes in a CSV file that can be downloaded to your phone. GitHub repo is here.
The Bus Scanner web app is a single-page HTML5 application that utilizes the device’s camera to scan barcodes. It processes both 1D and 2D barcodes using the html5-qrcode library. Key Features include:
- Camera Integration: Direct access to the device camera for fast scanning, optimized for wide 1D barcodes.
- Local Storage: Scanned barcodes are automatically saved to your browser’s local storage (localStorage), allowing you to close the page and return later without losing data.
- Audio Feedback: Plays a beep sound upon successful scan.
- Deduplication: Prevents accidental duplicate consecutive scans within a 3-second window.
- Export to CSV: Easily download all accumulated scan records as a CSV file for further processing.
- Data Management: Delete individual scans or clear all saved data completely.



