This is a project I created that pulls weather data from the internet, transforms it into custom images, and displays them on an e-ink screen powered by an ESP32.
I wanted a low-power way to see weather information at a glance, so I built this system that:
- Fetches real-time weather data from online APIs
- Processes and converts the data into visual images (temperature graphs, forecast icons, etc.)
- Sends these images wirelessly to an ESP32 microcontroller
- Displays the information on an energy-efficient e-ink screen
- Updates periodically while consuming minimal power

Check in the wiki for the guide how to get everything working!
All commits has to follow this Conventional Commits style to pass the pipeline.
- Display current weather data
- Display public transport information
- Display time and date
This section provides instructions for setting up and running the HomeApi project.
- .NET 9.0 SDK or later
- Docker (optional, for containerized deployment)
- Git (to clone the repository)
-
Clone the repository:
git clone https://github.com/Myxelium/HomeScreen.git cd HomeApi
-
Restore dependencies:
dotnet restore
-
Build the project:
dotnet build
-
Run the application:
dotnet run
The API will be available at http://localhost:5000
.
-
Build the Docker image:
docker build -t homeapi .
-
Run the container:
docker run -d -p 5000 --name homeapi homeapi
The API will be accessible at http://localhost:5000
.
The application uses the standard .NET configuration system. You can modify settings in:
appsettings.json
- Default configurationappsettings.Development.json
- Development environment configuration
API endpoints:
- Weather data: GET
/home
- Generated image: GET
/home/default.jpg
- Configuration data: GET
/home/configuration
- Departure board: GET
/home/departure-board
When running, API documentation is available through Scalar at /scalar
.
flowchart TD
subgraph ESP32 Device
ESP[ESP32 E-Ink Display]
ESP -->|HTTP GET /home/configuration| API
ESP -->|HTTP GET /home/default.jpg| API
end
subgraph HomeApi
API[HomeControllerAPI]
API -->|MediatR| Handlers
Handlers -->|Service Calls| Services
Services -->|Refit Http Clients| Clients
Clients -->|External APIs| ExtAPIs
API -->|Returns JSON/JPEG| ESP
end
subgraph ExternalAPIs
WeatherAPI[Weather API]
AuroraAPI[Aurora API]
NominatimAPI[Nominatim API]
ResRobotAPI[ResRobot API]
end
ExtAPIs -.-> WeatherAPI
ExtAPIs -.-> AuroraAPI
ExtAPIs -.-> NominatimAPI
ExtAPIs -.-> ResRobotAPI

Best way of getting the ESP32 ready for code upload is to follow this guide WAVESHARE ESP32 GUIDE. Once you have it ready so you can upload code to it copy my code in: Esp32_Code/INFOSCREEN_WITH_INTERVAL from this repo.
Install following libraries (if more is needed search for them and install them too):
- ArduinoJson
- GUI_Paint
- JPEGDEC
You need the Waveshare examples installed since it uses code from them download them here Download or check above link.