all projectsOpen source

Cyberdeck

A tiny WiFi-connected desk info screen.

Status
complete
Role
author
Year
2024
cyberdeck in an ivory enclosure with a teal button and a blue LCD showing weather, temperature, time, and date.

Context

A WiFi-connected desk companion built with an ESP8266 and a 16×2 LCD, bringing weather, exchange rates, and device health to a single-button interface.

I built cyberdeck as a desk companion and a hands-on way to learn embedded programming. It combines a Wemos D1 Mini (ESP8266), a 16×2 I2C character LCD, and a single button that cycles through three information screens. The firmware is written in C++ and built with PlatformIO.

Three screens, one button

  • Weather: conditions from wttr.in on the first row, with temperature, local time, and a short date on the second. The default location is Skopje. Weather refreshes every ten minutes while this screen is active; the displayed time is captured at that refresh.
  • Currency: a configurable currency pair and exchange rate from Revolut’s public quote API, followed by the update time. The default pair is USD/EUR, with a two-minute refresh interval.
  • System health: free heap memory and uptime, refreshed every second while visible.

Working within 32 characters

Each screen owns its data refresh logic, while a shared screen class handles timing, cached text, and redraws. Switching screens immediately displays the cached content, fetching new data when it is due. The button uses edge detection and a short debounce interval.

The display layer pads or truncates every row to exactly 16 characters and overwrites it without clearing the LCD. This removes leftover characters and avoids the flicker caused by clearing between frames. Unchanged content does not trigger another display write.

A small, configurable firmware

WiFiManager provides a setup portal for connecting to WiFi. NTP supplies time with a configurable timezone offset. Location, currency pair, and refresh intervals can be overridden in a local configuration file without editing the defaults.

On the ESP8266, memory limits shape the implementation: reduced TLS buffers and filtered JSON parsing keep the network integrations compact. New screens can extend the same base class with their own refresh interval and two lines of output.

Delivered scope

  1. weather and local time
  2. currency rates
  3. device health and uptime

Technology

cppplatformioesp8266
← previous
Eter
Internet radio for your menu bar or system tray, with a station library of your own.