Skip to main content
Version: ACS CC

DeskCal - Smart Desk Calendar

A smart desk calendar that displays weather, local sensor data, and Google Calendar events on a TFT screen, with animated LED ring alerts for upcoming meetings.

info

Author: BADEA Stefan-Vasile
GitHub Project Link: UPB-PMRust-Students/acs-project-2026-stefanbadea-sudo

Description

DeskCal is a smart desk calendar running on an STM32 Nucleo-U545RE-Q microcontroller. It receives weather data and Google Calendar events from a laptop via USB-UART, processed by a Python script. A BME280 sensor provides local temperature, humidity, and atmospheric pressure. A TFT color display shows four navigable pages: current clock and date, weather conditions, local sensor data with historical temperature graph, and upcoming calendar events. A WS2812B RGB LED ring displays animated color patterns indicating meeting proximity. A passive buzzer emits timed audio alerts before events. A physical button snoozes active reminders. The device is housed in a custom 3D-printed enclosure.

Motivation

As a student with a busy schedule of classes, lab sessions, and project deadlines, I often find myself missing meetings or losing track of environmental conditions in my workspace. I wanted to build a device that consolidates all this information in one place on my desk, without requiring me to constantly check my phone or laptop. The project also gave me the opportunity to explore embedded Rust development with embassy-rs, work with multiple hardware peripherals simultaneously, and design a complete end-to-end system from hardware to software to physical enclosure.

Architecture

System Architecture Diagram

The system is organized around four main components:

Host Python Script — runs on the laptop, fetches weather from OpenWeatherMap and events from Google Calendar, serializes to JSON and sends over USB-UART every 60 seconds.

STM32 Nucleo-U545RE-Q — main controller running embassy-rs async tasks: UART reception, BME280 reading, display rendering, LED ring and buzzer control.

Display Subsystem — ILI9341 2.8" TFT over SPI renders four pages selected via potentiometer (ADC).

Alert Subsystem — WS2812B LED ring (SPI) + passive buzzer (PWM) produce visual and audio alerts based on meeting proximity; tactile button handles snooze via GPIO interrupt.

Log

Week 5

Finalized project idea and had the theme approved by the lab coordinator.

Week 7

Ordered all hardware components from Optimus Digital and eMAG. Started reading embassy-rs documentation and experimenting with basic GPIO and UART on the Nucleo board. Started enclosure design in Fusion 360.

Week 8

Stating writing the documentation page.

Hardware

The project uses an STM32 Nucleo-U545RE-Q as the main microcontroller. A 2.8" ILI9341 TFT display connected via SPI renders the user interface across four pages. A BME280 sensor connected via I2C measures local temperature, humidity, and atmospheric pressure. A WS2812B 16-LED ring connected via SPI provides animated RGB visual alerts. A passive buzzer driven by PWM emits audio alerts. A 50kΩ potentiometer on an ADC pin handles page navigation. A tactile button on GPIO pins handle snooze and interaction. All components are housed in a custom 3D-printed PLA enclosure.

Schematics

  • TODO: KiCad schematic to be added at Hardware Milestone (Week 11)

Bill of Materials

DeviceUsagePrice
STM32 Nucleo-U545RE-QMain microcontrollerProvided by faculty
ILI9341 2.8" SPI TFT DisplayDisplays clock, weather, sensor data and calendar pages~90 RON
BME280 Barometric Sensor ModuleMeasures local temperature, humidity and pressure~34 RON
WS2812B RGB LED Ring (16 LEDs)Visual meeting alerts with animated color patterns~20 RON
Passive Buzzer 3.3VAudio alerts before and during meetings~13 RON
Potentiometer Mono 50kΩPage navigation via ADC~7 RON
Tactile Button 6x6x6mm (x2)Snooze reminder and UI interaction~3 RON
Jumper Wires M-F 40p 20cmComponent interconnections~10 RON
Jumper Wires F-F 10p 20cm (x2)Component interconnections~10 RON
Breadboard 170 pointsPrototyping connections~3 RON
3D-printed PLA enclosureHouses all componentsTBD

Software

  • TODO: the rest will be added as I develop the code
LibraryDescriptionUsage
st7789Display driver for ST7789Used for the display for the Pico Explorer Base
embedded-graphics2D graphics libraryUsed for drawing to the display
  1. embassy-rs documentation
  2. ILI9341 datasheet
  3. WS2812B datasheet
  4. BME280 datasheet
  5. Google Calendar API Python quickstart
  6. OpenWeatherMap API
  7. embedded-graphics examples