{"id":30112707,"url":"https://github.com/flothinkspi/photopainter-esp32","last_synced_at":"2025-08-10T06:50:14.130Z","repository":{"id":306832951,"uuid":"1027353968","full_name":"FloThinksPi/PhotoPainter-ESP32","owner":"FloThinksPi","description":"Custom firmware for an ESP32 and the Waveshare PhotoPainter. The ESP32 fetches arbitary BMP files from the internet and streams them to the PhotoPainter over I2C over 2 Pins from the SDCard Slot. The SDCard slot also powers the ESP32 - Effectively enhancing the PhotoPainter to paint files from the internet once woken up via its RTC.","archived":false,"fork":false,"pushed_at":"2025-07-27T22:55:46.000Z","size":931,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-27T23:23:22.260Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FloThinksPi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-27T21:09:13.000Z","updated_at":"2025-07-27T22:55:49.000Z","dependencies_parsed_at":"2025-07-27T23:36:42.710Z","dependency_job_id":null,"html_url":"https://github.com/FloThinksPi/PhotoPainter-ESP32","commit_stats":null,"previous_names":["flothinkspi/photopainter-esp32"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/FloThinksPi/PhotoPainter-ESP32","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FloThinksPi%2FPhotoPainter-ESP32","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FloThinksPi%2FPhotoPainter-ESP32/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FloThinksPi%2FPhotoPainter-ESP32/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FloThinksPi%2FPhotoPainter-ESP32/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FloThinksPi","download_url":"https://codeload.github.com/FloThinksPi/PhotoPainter-ESP32/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FloThinksPi%2FPhotoPainter-ESP32/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269688082,"owners_count":24459403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-08-10T06:50:09.982Z","updated_at":"2025-08-10T06:50:14.094Z","avatar_url":"https://github.com/FloThinksPi.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ESP32 PhotoPainter Enhancement\n\n**Upgrade your Waveshare PhotoPainter into an internet-connected smart photo frame**\n\nThis project provides custom firmware to add WiFi connectivity to the Waveshare PhotoPainter, enabling automatic image fetching and display from the web using an ESP32 microcontroller.\n\n## 🎯 Overview\n\nESP32 PhotoPainter Enhancement is a hardware/software solution that retrofits onto the [Waveshare PhotoPainter`s](https://www.waveshare.com/wiki/PhotoPainter) SDCard Slot. By utilizing the SD card slot, it seamlessly adds internet connectivity—no permanent hardware modifications required. Firmware for the ESP32(Fetcher) and the PhotoPainter(Renderer) are custom to enable this.\n\n### How It Works\n\n1. **ESP32**: Powered via the PhotoPainter's SD card slot.\n2. **I2C Communication**: Uses two SD slot pins for high-speed I2C (600kHz).\n3. **Smart Fetching**: Downloads BMP images from the internet and streams them to the PhotoPainter.\n4. **RTC Wake-up**: Activates automatically when the PhotoPainter's RTC wakes the system and powers up the SDCard slot. So uses the same RTC deep sleep as the PhotoPainter that cuts of power from SDCard slot when going into deep sleep.\n5. **Seamless Display**: Images are processed and shown on the 7.3\" e-paper screen.\n\n## 🏗️ Wiring\n\n### Hardware Setup\n```\nPhotoPainter SD Slot → ESP32 Wemos D1 Mini\n├── Power (3.3V)     → VCC\n├── Ground           → GND\n├── Pin 4 (SDA)      → GPIO 21 (SDA)\n└── Pin 5 (SCL)      → GPIO 22 (SCL)\n\nTo find out which pins are Pin 4/5 on the PhotoPainter consult a pinout of a microSDCard. The CS(Chip Select) on the SDCard Connector goes to Pin 5 of the PhotoPainter. The MISO port of the SDCard Connector goes to Pin 4 of the PhotoPainter.\n```\n\n### Software Components\n```\n┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐\n│   ESP32 Master  │────│   I2C Protocol   │────│ PhotoPainter    │\n│   (Fetcher)     │    │   600kHz, 123B   │    │ (Renderer)      │\n│                 │    │   chunks         │    │                 │\n│ • WiFi Connect  │    │                  │    │ • Image Receive │\n│ • HTTP Download │    │                  │    │ • BMP Processing│\n│ • Format Convert│    │                  │    │ • E-paper Draw  │\n│ • I2C Stream    │    │                  │    │ • RTC Control   │\n└─────────────────┘    └──────────────────┘    └─────────────────┘\n```\n\n## 🚀 Quick Start\n\n### Prerequisites\n- Waveshare PhotoPainter device\n- ESP32 Wemos D1 Mini or compatible board\n- MicroSD card adapter ([example](https://amzn.eu/d/5vNI9uq))\n- Basic soldering skills for SD slot connections. I soldered it onto above adapter to create a non permenant connection and also dont destroy the PhotoPainter on soldering misstakes.\n\n### 1. Flash ESP32 Firmware\n```bash\n# Adopt Platformio.ini with your correct COM Ports\npio run -t upload -e Fetcher\n```\n\n### 3. Flash PhotoPainter Firmware\n```bash\n# Adopt Platformio.ini with your correct COM Ports\npio run -t upload -e Renderer\n# Copy firmware.uf2 to PhotoPainter via USB\n# See /docs/photopainter-flash.md for details\n# The attached script works on windows and sets the PhotoPainter in Flash mode and uploads the firmware file.\n```\n\n### 4. Configure WiFi\n```bash\n# On first boot, ESP32 creates WiFi hotspot \"ESP32-PhotoFrame\"\n# Connect and configure your network\n```\n\n### 5.\n```bash\n# Change hardcoded URL List in fetcher.cpp to point at the ones you want to download.\n# I propose to use a webserver with a/some static files and the user overwrites them on the webserver so the client(esp32 fetcher) code can stay the same while rotating images soley over the webserver.\n```\n\n## 📁 Project Structure\n\n```\nESP32PhotoFrame/\n├── src/\n│   ├── fetcher.cpp          # ESP32 firmware (WiFi + I2C master)\n│   └── renderer.cpp         # PhotoPainter firmware (I2C slave + display)\n├── lib/\n│   ├── Config/              # Hardware config \u0026 I2C drivers\n│   ├── EPaper/              # E-paper display drivers\n│   ├── GUI/                 # BMP processing \u0026 color conversion\n│   ├── Fonts/               # Text rendering\n│   └── Examples/            # Test images/sample data\n├── ImageConverter/\n│   ├── dither.py            # Python image converter\n│   ├── requirements.txt     # Python dependencies\n│   └── IMAGE_CONVERTER.md   # Converter docs\n├── datasheets/              # Hardware docs\n├── utils/                   # Upload utilities/scripts\n└── platformio.ini           # Build config\n```\n\n## 📄 License\n\nThis project is dual-licensed under MIT and Apache License 2.0. See [LICENSE](LICENSE) for details.\n\n## 🙏 Acknowledgments\n\n- **Waveshare** - For the excellent PhotoPainter hardware and documentation example project","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflothinkspi%2Fphotopainter-esp32","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflothinkspi%2Fphotopainter-esp32","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflothinkspi%2Fphotopainter-esp32/lists"}