diff options
Diffstat (limited to '_projects/etlas.md')
| -rw-r--r-- | _projects/etlas.md | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/_projects/etlas.md b/_projects/etlas.md new file mode 100644 index 0000000..3b62ba3 --- /dev/null +++ b/_projects/etlas.md @@ -0,0 +1,67 @@ +--- +title: "Etlas: e-paper display for news, stocks, and the weather" +date: 2024-09-05 +author: W. D. Sadeep Madurange +thumbnail: dash.jpg +layout: post +--- + +Etlas is a news, stock market, and weather tracker powered by an ESP32 NodeMCU +D1, featuring a 7.5-inch {{< link src="https://www.waveshare.com/" +class="external" target="_blank" rel="noopener noreferrer">}}Waveshare{{< +/link>}} e-paper display and a DHT22 sensor module. + +<table style="border: none;"> + <tr style="border: none;"> + <td style="border: none;"><img src="dash.jpg" alt="front" style="width: 100%"></td> + <td style="border: none;"><img src="pcb.jpg" alt="back" style="width: 100%"></td> + </tr> +</table> + +The top left panel displays the end-of-day stock prices from the {{< link +src="https://polygon.io/" class="external" target="_blank" +rel="noopener noreferrer" >}}Polygon.io{{</link >}} API, relayed through my own +FastCGI-wrapped Flask app hosted on a VPS. The stock symbols can be configured +through the Flask app's application settings. The server.fcgi script enclosed +in the tarball at the end of the page contains the Flask app. + +The following diagram outlines this system architecture. + + + +Unlike my [e-reader](/projects/e-reader), which worked with raster images, +Etlas downloads time series data as CSV and computes the price curves on the +ESP32. + +The more prominent panel on the right of the e-paper display shows local +(Singapore) and world news from the {{< link +src="https://www.channelnewsasia.com/" class="external" target="_blank" +rel="noopener noreferrer" >}}Channel News Asia{{< /link>}} RSS feed. The MCU +downloads and parses XML data from the RSS feed directly before rendering it to +the display. Although I did it this way to avoid writing server code, it limits +the feeds from which Etlas can receive data. In a future version, I will relay +the RSS feed through a server (like the stock prices) to make it more flexible. + +The bottom panels (middle and right) display the temperature and relative +humidity from a DHT22 sensor. The DHT22 driver, arguably the most interesting +part of the software, reads real-time sensor data by comparing relative pulse +widths. The pulses themselves are too quick for the ESP32 to reliably measure +directly. I ported {{< link src="https://github.com/Fonger/ESP8266-RTOS-DHT" +class="external" target="_blank" rel="noopener noreferrer" >}}this{{< /link>}} +implementation for ESP8266 modules to my ESP32. All credit for the algorithm +belongs to them. + +Much of the heavy lifting of acquiring, interpreting, and rendering data from +different data sources is performed on the microcontroller using less than 512 +KB of memory. The embedded software that makes that possible is written in C +using the ESP-IDF v5.2.1. My e-paper display driver is a port of Waveshare {{< +link src="https://github.com/waveshareteam/e-Paper" class="external" +target="_blank" rel="noopener noreferrer" >}}examples{{< /link>}} for Arduino +and STM32 platforms. + +I've been using Etlas daily (for a couple of hours on weekdays and all day on +weekends) since August 2024. As of October 2025, it's been running reliably for +over a year. If you are interested in an e-paper display like this, drop me an +email at the address on my home page. + +Files: [source.tar.gz](source.tar.gz) |
