All Projects → ugomeda → esp32-epaper-display

ugomeda / esp32-epaper-display

Licence: other
Server and software to use an ESP32 as a connected display

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to esp32-epaper-display

esp32-ota
ESP32 OTA based on ThingsBoard Open-source IoT Platform
Stars: ✭ 45 (-38.36%)
Mutual labels:  esp32, esp-idf, esp32-idf
esp32-e-paper-weatherdisplay
An ESP32 and 4.2" ePaper Display reads Dark Sky weather API and displays the weather using ESP-IDF
Stars: ✭ 110 (+50.68%)
Mutual labels:  esp32, esp-idf, epaper
esp32-freqcount
ESP32 Frequency Counter using Pulse Counter and Remote Control modules
Stars: ✭ 48 (-34.25%)
Mutual labels:  esp32, esp-idf
esp-idf-hal
embedded-hal implementation for Rust on ESP32 and ESP-IDF
Stars: ✭ 42 (-42.47%)
Mutual labels:  esp32, esp-idf
Arduino Esp32
Arduino core for the ESP32
Stars: ✭ 7,741 (+10504.11%)
Mutual labels:  esp32, esp-idf
esp-idf-vscode-boilerplate
Boilerplate for developing ESP-IDF applications using VS Code
Stars: ✭ 26 (-64.38%)
Mutual labels:  esp32, esp-idf
lis3dh-esp-idf
LIS3DH driver for ESP-IDF (ESP32)
Stars: ✭ 27 (-63.01%)
Mutual labels:  esp32, esp-idf
esp-idf-w25q64
SPI Flash Memory W25Q64 Access Library for esp-idf
Stars: ✭ 12 (-83.56%)
Mutual labels:  esp32, esp-idf
sra-board-component
ESP-IDF component for SRA Board
Stars: ✭ 34 (-53.42%)
Mutual labels:  esp32, esp32-idf
Homekit
Homekit for ESP32 with Arduino framework
Stars: ✭ 80 (+9.59%)
Mutual labels:  esp32, esp-idf
opcua-esp32
Embedded OPC UA Server on ESP32 based on open62541 stack
Stars: ✭ 82 (+12.33%)
Mutual labels:  esp32, esp-idf
esp32-ds18b20
ESP32-compatible C library for Maxim Integrated DS18B20 Programmable Resolution 1-Wire Digital Thermometer.
Stars: ✭ 61 (-16.44%)
Mutual labels:  esp32, esp-idf
ESP32-LCD-I2S
Espressif ESP32 driving a controller-less monochrome lcd with parallel I2S bus
Stars: ✭ 54 (-26.03%)
Mutual labels:  esp32, esp-idf
esp-idf-parallel-tft
8bit parallel TFT & 4-line resistance touch screen Driver for esp-idf using i2s paralell mode
Stars: ✭ 45 (-38.36%)
Mutual labels:  esp32, esp-idf
wac-esp
Web Assembly Interpreter for ESP32 family of micro controllers running the ESP-IDF development framework, based on the great work at kanaka/wac
Stars: ✭ 66 (-9.59%)
Mutual labels:  esp32, esp32-idf
esp-idf-json
Example of JSON Serialize and Deserialize in ESP-IDF
Stars: ✭ 29 (-60.27%)
Mutual labels:  esp32, esp-idf
ESP32-USB-Soft-Host
An Arduino wrapper to @sdima1357's usb_soft_host esp-idf example
Stars: ✭ 119 (+63.01%)
Mutual labels:  esp32, esp-idf
low-power-wifi
Experiments in low-power-wifi on esp8266, esp32, and ...
Stars: ✭ 35 (-52.05%)
Mutual labels:  esp32, esp32-idf
esp32-xbee
ESP32 XBee UART Interface
Stars: ✭ 48 (-34.25%)
Mutual labels:  esp32, esp-idf
RoverController
LoRa/WiFi remote controller for driving my rover
Stars: ✭ 87 (+19.18%)
Mutual labels:  esp-idf, esp32-idf

ESP32 e-Paper

Example

Hardware

This project uses :

I had to remove the ESP32 driver headers and cut the case to fit it properly, see images/inside.jpg

Run the server

The server runs on Python. Images are generated using Pillow and the web server runs on AIOHTTP.

To run the server :

  • install the dependencies provided in the requirements.txt file (pip install -r requirements)
  • copy the file config.example.json to config.json, see the details below
  • Run the server using python run.py --bind 0.0.0.0

Run using Docker

A Dockerfile is provided :

docker build -t epaperserver .
docker run -p "8080:8080" -v "/path/to/my/settings/:/app/config/:rw" epaperserver run --bind 0.0.0.0 --config /app/config/config.json

Settings

See config.example.json to see the format.

  • The displays key contains the list of displays indexed by their ID.
    • size : The size of the display in pixels
    • updateEvery: The number of seconds to wait between two updates (example: 600)
    • settings: The settings shared by all the widgets
      • locale: The language used by the display (examples: "en_US", "fr_FR")
      • timezone: The timezone used by the display (examples: "America/New_York", "Europe/Paris")
      • units: "imperial" or "metric"
    • widgets: The list of widgets to show on the display
      • widget: The id of the widget ("date", "googlecalendar", "googlemaps" or "weather")
      • position: The top left position on the display (example: "0, 68")
      • size: The size of the widget (example: 300x316)
      • settings: The widget-specific settings
  • The tokens key contains the tokens of the clients with their matching display id.

Widgets

googlemaps

Shows a map between home and work with the current fastest route, and its time.

The settings are :

  • home_address
  • work_address
  • client_key: The Google Maps API client key. Please follow the instructions provided here to get a key (free up to $200 per month)

weather

Display the weather in your city.

The settings are :

googlecalendar

Displays today's event from your Google Calendar.

Settings :

  • credentials : The path to the credentials.json file, see below
  • token_store : The path to the token.pickle file, see below

This widget uses the Google Calendar API to fetch data from your calendar. Follow the instructions here to create enable the API (free up to $200 par month) and get the credentials.json file.

The token.pickle file stores the OAuth2 tokens linked to your account. The create this file, simply set its path in the settings file and launch the project locally. The service will open a web page to authorize your account. This will only happen once, make sure to store the file properly.

date

Displays the current date on a black background.

Compile the firmware

Open the epaper-esp32 using PlatformIO. Copy the file include/settings.example.h to include/settings.h.

You can then deploy the project on you ESP32. The firmware uses ESP-IDF 4.0.

Misc.

Optimizations/protocol

Don't refresh the display when is not needed

The servers returns a header ETag containing an id of the image. This id is stored by the client and sent on each request.

If the image did not change since the previous request, the status code returned will be 304, so that the clients knows it should not update the display.

Don't request the server too frequently

The data is updated according to the updateEvery setting. Each request for the image returns a header Cache-Control": max-age=XXX containing the number of seconds until the next request, plus 20 seconds.

This allows the client to sleep the time required, and request the next image only when it would be updated.

Notes

  • Conversion of SVG to monochrome PNG for the weather : mogrify -format png -flatten -density 300 -monochrome *.svg && mogrify -format png -auto-level *.png

Attribution

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].