{"id":48962033,"url":"https://github.com/todd-herbert/heltec-eink-modules","last_synced_at":"2026-04-18T02:21:13.715Z","repository":{"id":154473107,"uuid":"352572439","full_name":"todd-herbert/heltec-eink-modules","owner":"todd-herbert","description":"Third-party Arduino Library for Heltec E-Ink displays","archived":false,"fork":false,"pushed_at":"2025-07-08T14:00:53.000Z","size":28727,"stargazers_count":28,"open_issues_count":5,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-08T14:49:22.204Z","etag":null,"topics":["adafruit-gfx","arduino","arduino-library","display","drawing","e-ink","e-paper","epd","esp32","esp8266","graphics","heltec","samd21","uno","vision-master","wireless-paper"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/todd-herbert.png","metadata":{"files":{"readme":"docs/README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-03-29T08:38:35.000Z","updated_at":"2025-07-08T13:59:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7c05780-9a54-48a4-bfa2-6b2a902bc9b9","html_url":"https://github.com/todd-herbert/heltec-eink-modules","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/todd-herbert/heltec-eink-modules","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todd-herbert%2Fheltec-eink-modules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todd-herbert%2Fheltec-eink-modules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todd-herbert%2Fheltec-eink-modules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todd-herbert%2Fheltec-eink-modules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/todd-herbert","download_url":"https://codeload.github.com/todd-herbert/heltec-eink-modules/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/todd-herbert%2Fheltec-eink-modules/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"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":["adafruit-gfx","arduino","arduino-library","display","drawing","e-ink","e-paper","epd","esp32","esp8266","graphics","heltec","samd21","uno","vision-master","wireless-paper"],"created_at":"2026-04-18T02:21:13.190Z","updated_at":"2026-04-18T02:21:13.708Z","avatar_url":"https://github.com/todd-herbert.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Heltec E-Ink Modules\n\nThird-party Arduino Library for **Heltec E-Ink Displays**.\u003cbr /\u003e\nRun-time drawing, using Adafruit-GFX.\n\n**[Read the API](/docs/API.md)** \u003cbr /\u003e\n\n- [Vision Master](#vision-master)\n- [Wireless Paper](#wireless-paper)\n- [SPI Displays](#spi-displays)\n  - [Identification](#identification)\n  - [Wiring](#wiring)\n  - [Should I use `update()` or `DRAW()`?](#should-i-use-update-or-draw)\n- [Drawing](#drawing)\n  - [Shapes and Text](#shapes-and-text)\n  - [Fonts](#fonts)\n  - [Images](#images)\n  - [SD card](#sd-card)\n  - [Fast Mode (Partial Refresh)](#fast-mode-partial-refresh)\n- [Troubleshooting](#troubleshooting)\n- [Installation](#installation)\n  - [Arduino](#arduino)\n  - [PlatformIO](#platformio)\n- [Acknowledgements](#acknowledgements)\n\n## Vision Master\n\nSee [Getting Started with Vision Master](/docs/VisionMaster/vision_master.md#getting-started) for instructions on setting up Arduino IDE or PlatformIO.\u003cbr /\u003e\n\u003csmall\u003e(Important platformio.ini config)\u003c/small\u003e\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eModel\u003c/th\u003e\n            \u003cth\u003eDriver Class\u003c/th\u003e\n            \u003cth align=\"center\"\u003eFront Image\u003c/th\u003e\n            \u003cth align=\"center\"\u003eRear Image\u003c/th\u003e\n            \u003cth\u003eResolution (px)\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eE213 V1.1\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_VisionMasterE213V1_1\u003c/code\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/VME213V1.1-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n            \u003cimg alt=\"Rear\" src=\"Identification/VME213V1.1-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003e250 x 122\u003c/td\u003e\n        \u003c/tr\u003e    \n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eE213\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_VisionMasterE213\u003c/code\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/VME213-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n            \u003cimg alt=\"Rear\" src=\"Identification/VME213-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003e250 x 122\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eE290\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_VisionMasterE290\u003c/code\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/VME290-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/VME290-Rear.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e296 x 128\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n```cpp\n#include \"heltec-eink-modules.h\"\n\nEInkDisplay_VisionMasterE213 display;\n\nvoid setup() {\n    display.print(\"Hello, World!\");\n    display.update();\n}\n\nvoid loop() {}\n```\n\n## Wireless Paper\n\nSee [Getting Started with Wireless Paper](/docs/WirelessPaper/wireless_paper.md) for instructions on setting up Arduino IDE or PlatformIO.\u003cbr /\u003e\n\u003csmall\u003e(Important platformio.ini config)\u003c/small\u003e\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eHardware Version\u003c/th\u003e\n            \u003cth\u003eDriver Class\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"FlexConnector/flex_labels.md\"\u003eFlex Connector Label\u003c/a\u003e\u003c/th\u003e\n            \u003cth align=\"center\"\u003eFront Image\u003c/th\u003e\n            \u003cth align=\"center\"\u003eRear Image\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eV1.2\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_WirelessPaperV1_2\u003c/code\u003e\u003c/td\u003e\n            \u003ctd\u003e(not visible)\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e(no image available)\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e(no image available)\u003c/td\u003e            \n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eV1.1.1\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_WirelessPaperV1_1_1\u003c/code\u003e\u003c/td\u003e\n            \u003ctd\u003e(not visible)\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e(no image available)\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e(no image available)\u003c/td\u003e            \n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eV1.1\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_WirelessPaperV1_1\u003c/code\u003e\u003c/td\u003e\n            \u003ctd\u003e(not visible)\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/PaperV1.1-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear, with sticker\" src=\"Identification/PaperV1.1-Rear.jpg\" /\u003e\u003c/td\u003e            \n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cnobr\u003e\u003cstrong\u003eOriginal\u003c/strong\u003e (V1.0)\u003c/nobr\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ccode\u003eEInkDisplay_WirelessPaperV1\u003c/code\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-7528B\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/PaperV1-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/PaperV1-Rear.jpg\" /\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n```cpp\n#include \"heltec-eink-modules.h\"\n\nEInkDisplay_WirelessPaperV1_1 display;\n\nvoid setup() {\n    display.print(\"Hello, World!\");\n    display.update();\n}\n\nvoid loop() {}\n```\n\nA [low power state](/docs/WirelessPaper/wireless_paper.md#deep-sleep) is available for the whole board (18μA while sleeping).\n\n## SPI Displays\n\n### Identification\n\nPay attention to the model name: you will need it to use the library.\n\n#### 1.54 Inch\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eModel Name\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"FlexConnector/flex_labels.md\"\u003eFlex Connector Label\u003c/a\u003e\u003c/th\u003e\n            \u003cth align=\"center\"\u003eFront Image\u003c/th\u003e\n            \u003cth align=\"center\"\u003eRear Image\u003c/th\u003e\n            \u003cth\u003eColors\u003c/th\u003e\n            \u003cth\u003eScreen Protector\u003c/th\u003e\n            \u003cth\u003eResolution (px)\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"#fast-mode-partial-refresh\"\u003eFastmode (partial\u0026nbsp;refresh)\u003c/a\u003e\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eDEPG0154BNS800\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-7525\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/DEPG0154BNS800-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/DEPG0154BNS800-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e152 x 152\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eDEPG0150BNS810\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-8101\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/DEPG0150BNS810-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/DEPG0150BNS810-Rear.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e200 x 200\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eGDEP015OC1\u003c/strong\u003e\u0026nbsp;\u003csup\u003e?\u003c/sup\u003e\u003c/td\u003e\n            \u003ctd\u003eHINK-E0154A05-A2\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/GDEP015OC1-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/GDEP015OC1-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eBlue Tab\u003c/td\u003e\n            \u003ctd\u003e200 x 200\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n\n#### 2.13 Inch\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eModel Name\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"FlexConnector/flex_labels.md\"\u003eFlex Connector Label\u003c/a\u003e\u003c/th\u003e\n            \u003cth align=\"center\"\u003eFront Image\u003c/th\u003e\n            \u003cth align=\"center\"\u003eRear Image\u003c/th\u003e\n            \u003cth\u003eColors\u003c/th\u003e\n            \u003cth\u003eScreen Protector\u003c/th\u003e\n            \u003cth\u003eResolution (px)\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"#fast-mode-partial-refresh\"\u003eFastmode (partial\u0026nbsp;refresh)\u003c/a\u003e\u003c/th\u003e\n        \u003c/tr\u003e            \n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eDEPG0213RWS800\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-7528B\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/DEPG0213RWS800-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/DEPG0213RWS800-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White, Red\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e250 x 122\u003c/td\u003e\n            \u003ctd\u003eNo\u003c/td\u003e\n        \u003c/tr\u003e        \n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eQYEG0213RWS800\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-7528\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/QYEG0213RWS800-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/QYEG0213RWS800-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White, Red\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e250 x 122\u003c/td\u003e\n            \u003ctd\u003eNo\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n#### 2.9 Inch\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eModel Name\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"FlexConnector/flex_labels.md\"\u003eFlex Connector Label\u003c/a\u003e\u003c/th\u003e\n            \u003cth align=\"center\"\u003eFront Image\u003c/th\u003e\n            \u003cth align=\"center\"\u003eRear Image\u003c/th\u003e\n            \u003cth\u003eColors\u003c/th\u003e\n            \u003cth\u003eScreen Protector\u003c/th\u003e\n            \u003cth\u003eResolution (px)\u003c/th\u003e\n            \u003cth\u003e\u003ca href=\"#fast-mode-partial-refresh\"\u003eFastmode (partial\u0026nbsp;refresh)\u003c/a\u003e\u003c/th\u003e\n        \u003c/tr\u003e            \n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eDEPG0290BNS800\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eFPC-7519 rev.b\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/DEPG0290BNS800-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/DEPG0290BNS800-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e296 x 128\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eDEPG0290BNS75A\u003c/strong\u003e\u0026nbsp;\u003c/td\u003e\n            \u003ctd\u003eFPC-750\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/DEPG0290BNS75A-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/DEPG0290BNS75A-Rear.jpg\" /\u003e\u003c/td\u003e            \n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eRed Tab\u003c/td\u003e\n            \u003ctd\u003e296 x 128\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003cstrong\u003eGDE029A1\u003c/strong\u003e\u003c/td\u003e\n            \u003ctd\u003eSYX-1553\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Front\" src=\"Identification/GDE029A1-Front.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg alt=\"Rear\" src=\"Identification/GDE029A1-Rear.jpg\" /\u003e\u003c/td\u003e\n            \u003ctd\u003eBlack, White\u003c/td\u003e\n            \u003ctd\u003eBlue Tab\u003c/td\u003e\n            \u003ctd\u003e296 x 128\u003c/td\u003e\n            \u003ctd\u003eYes\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n___\n\n### Wiring\n\n**Warning: in some cases, connecting directly to the display will cause damage!** \u003cbr /\u003e\nSee your boards's wiring page for specific information:\n\n* [**Wiring:** Arduino Uno R3 / Arduino Nano](/docs/Wiring/wiring_m328p.md)\n* [**Wiring:** Arduino Mega 2560](/docs/Wiring/wiring_m2560.md)\n* [**Wiring:** ESP32](/docs/Wiring/wiring_esp32.md)\n* [**Wiring:** ESP8266](/docs/Wiring/wiring_esp8266.md)\n* [**Wiring:** SAMD21G18A](/docs/Wiring/wiring_samd21g18a.md)\n\n```c++\n// Specify your wiring when declaring the display\nDEPG0150BNS810 display(dc, cs, busy);\n\n// Optional: specify SDI and CLK (ESP32 \u0026 SAMD21* only)\nDEPG0150BNS810 display(dc, cs, busy, sdi, clk)\n```\n\n\u003csub\u003e[See here](/docs/Wiring/wiring_samd21g18a.md#optional-changing-mosi-and-sck-pins) for limitations of SAMD21G18A wiring\u003c/sub\u003e\n\n___\n### Should I use `update()` or `DRAW()`?\n\nThe `DRAW()` operation allows for RAM saving tricks (paging). Required for older boards, configurable for new boards.\n[More info about `DRAW()` here](/docs/Paging/paging.md).\n\n```cpp\n/* \n  Use DRAW() if:\n   - you need to support Arduino Uno R3 / Mega 2560, or\n   - you desperately need to save RAM\n*/\n    DRAW(display) {\n        display.print(\"Hello, \");\n        display.print(\"World!\");\n    }\n\n\n// Otherwise, you're free to use update() instead\n    display.clearMemory();\n    display.print(\"Hello, \");\n    display.print(\"World!\");\n    display.update();\n```\n\n## Drawing\n\n### Shapes and Text\n\nDrawing operations come from the **Adafruit GFX** library\nYou'll find a full list of supported commands in **[the API](/docs/API.md)**. Check out the [examples folder](/examples/) to see them in action.\nAlternatively, [the official adafruit-gfx tutorial](https://learn.adafruit.com/adafruit-gfx-graphics-library/graphics-primitives) is a good place to start.\n\n### Fonts\nThe library comes with a selection of custom fonts. You can create more with [truetype2gfx](https://rop.nl/truetype2gfx/).\u003cbr /\u003e\nSee the [Fonts example](/examples/fonts/fonts.ino).\n\n### Images\n\nAs decided by the Adafruit library, the ancient *\"XBitmap\"* is the format of choice for pre-rendered graphics. Luckily, GIMP maintains good support for it. If you need a hint on how to use it, I have thrown together a [tutorial on preparing XBitmap images](XBitmapTutorial/README.md).\n\n### SD card\n\nIt is possible to load and save .bmp images, using a cheap SD card SPI adapter. [Read more](/docs/SD/sd.md)\n\n### Fast Mode (Partial Refresh)\n\nE-Ink displays generally take several seconds to refresh. Some displays have an alternative mode, where the image updates much faster.\n\nThe trade-off is that images drawn in fast mode are of a lower quality. The process may also be particularly difficult on the hardware. **Use sparingly.**\n\n*Not all displays support fast mode.*\n\nCall [`fastmodeOn()`](/docs/API.md#fastmodeon) to enable.\u003cbr /\u003e\nCall [`fastmodeOff()`](/docs/API.md#fastmodeoff) to return to normal.\n\n\u003csub\u003e\\* Technically, this mode is not a true \"partial refresh\", as the whole display image is updated.\u003c/sub\u003e \n\n## Troubleshooting\n\n* **Double-check your wiring**\u003cbr /\u003e\n    On breadboard, or header pins, it is easy to be one row out.\u003cbr /\u003e\n    Make sure to use a level-shifter, if needed.\n\n* **Double-check your constructor**\u003cbr /\u003e\n    ```c++\n    // Make sure to use the correct class for your display model\n    EInkDisplay_WirelessPaperV1_1 display;\n\n    // SPI displays: make sure your pins are set correctly\n    DEPG0150BNS810 display(dc, cs, busy);   \n    ```\n\n* **Take a look at the [examples](/examples/), and the [API](/docs/API.md)**\u003cbr /\u003e\n    Some commands might not work the way you would expect. If unsure, double check.\n\n* **Disconnect and Reconnect**\u003cbr /\u003e\n    If the display has been used incorrectly, it can get \"stuck\".\u003cbr /\u003e\n    Remove all power from the display and Arduino for 5 seconds.\n\n* **Make sure your build environment is configured correctly**\u003cbr /\u003e\n    * [Vision Master](/docs/VisionMaster/vision_master.md#getting-started)\n    * [Wireless Paper](/docs/WirelessPaper/wireless_paper.md#getting-started)\n## Installation\n\n### Arduino\nLibrary can be installed to Arduino IDE with *Sketch* -\u003e *Include Library* -\u003e *Add .Zip Library..*, or through the built-in Library Manager. \n\n* [Setting up Arduino IDE for Vision Master boards](/docs/VisionMaster/vision_master.md#arduino-ide)\n* [Setting up Arduino IDE for Wireless Paper boards](/docs/WirelessPaper/wireless_paper.md#arduino-ide)\n\n### PlatformIO\nAvailable through the built-in library registry, or alternatively, can be installed by extracting the Zip file to the lib folder of your project.\n\nFor Vision Master and Wireless Paper boards, your platformio.ini file needs to be [correctly configured](/platformio.ini).\n\n## Acknowledgements\n\n* Display information referenced from both [official Heltec sources](https://github.com/HelTecAutomation/e-ink), and [GxEPD2](https://github.com/ZinggJM/GxEPD2).\n* Drawing functions provided by [GFX Root](https://github.com/ZinggJM/GFX_Root), which itself is a stripped down version of [Adafruit GFX](https://github.com/adafruit/Adafruit-GFX-Library).\n* A bundled version of [SdFat](https://github.com/greiman/SdFat) is used with some platforms.\n* [TJpg_Decoder](https://github.com/Bodmer/TJpg_Decoder) is bundled with certain examples.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftodd-herbert%2Fheltec-eink-modules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftodd-herbert%2Fheltec-eink-modules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftodd-herbert%2Fheltec-eink-modules/lists"}