ESP32 Guide
ESP32 is Espressif’s family of low-cost, low-power system-on-chip devices, commonly used for IoT projects, smart homes, and wearable devices. Wi-Fi and Bluetooth support depend on the model.
This page collects the English versions of my ESP32 development articles. It is a set of project notes, not a complete course. Check each article’s hardware, framework and version before following it.
Choose a goal
- Connect without Wi-Fi: start with PPPoS and a 4G modem, then try remote JPG display. You need an ESP32-C3, a PPP-capable modem and stable power. Verify IP assignment and DNS before adding application traffic.
- Display pictures on a monochrome screen: compare dithering in your browser, then follow the ESP32 / ST7305 implementation. Basic C/C++ and display-driver knowledge help turn the experiment into hardware output.
- Build a variable-font GUI: start with FreeType in a PC simulator, continue with the ESP32 port, then font-weight animation. Check LVGL versions, display models and font storage before copying APIs.
- Add HomeKit control: begin with servo light control and environment setup. Verify local control before provisioning and pairing.
When debugging, separate hardware and power issues from framework configuration and application logic. Different routes require different hardware; you do not need every board to get started.
Article index
GUI development: LVGL and FreeType variable fonts
This series starts with a simulator, then ports font rendering and dynamic font weights to a physical display.
| Part | Article | Topics |
|---|---|---|
| 1 | Variable fonts in LVGL | FreeType basics and dynamic font weight in a Windows simulator |
| 2 | Porting LVGL and FreeType to ESP32 | PlatformIO setup and TFT_eSPI display drivers |
| 3 | Animating font weights | Loading fonts from an SD card and animating weight changes |
Networking and communication
| Article | Topics |
|---|---|
| Displaying a remote JPG on ESP32 | HTTP, AsyncTCP chunks, and Content-Length parsing |
| ESP32 and a 4G modem using PPPoS | Using AT commands for setup, then carrying Socket traffic through PPP |
| Streaming a PC screen to ESP32 | Python frame capture, a custom TCP protocol, and DMA rendering |
| Remote desktop streaming on M5Stack Cardputer | PSRAM upgrades and H.264 streaming |
Smart home: HomeKit
| Article | Topics |
|---|---|
| Controlling lights with an ESP32 and a servo | A non-invasive modification and servo PWM control |
| Setting up ESP32 HomeKit development in WSL | Building and flashing esp-homekit-demo |
| Combining HomeKit and servo control | Bringing the pieces together for Siri control |
| Adding a Xiaomi Yeelight monitor light bar to HomeKit | Teardown and controller replacement |
Development notes and fixes
| Article | Topics |
|---|---|
| ESP32 development tips | Async HTTP, light-sleep PWM, GIF playback, and SPIFFS OTA |
| ESP-IDF embed_txtfiles notes | Embedding resources, certificates, and HTML |
| SPI LCD versus parallel LCD | Measured results for 60 MHz SPI and an 8-bit parallel interface |
Image processing: Ditherpunk
| Article | Topics |
|---|---|
| Ditherpunk, part 1 | Gamma correction, Bayer matrices, error diffusion, and live JavaScript demos |
| Ditherpunk, part 2: ESP32 and a monochrome display | An ST7305 1.54-inch display driver and dithering on hardware |
External resources
- ESP-IDF documentation
- LVGL documentation
- PlatformIO’s ESP32 platform documentation
- Espressif community forum
Contact and feedback
For questions or suggestions, email support@chaosgoo.com, or find me on GitHub.
This index is updated as new ESP32 articles are published.