<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ESP32 eInk T5 2.13 on MicroPython]]></title><description><![CDATA[<p dir="auto">Hello,<br />
I bought this one last week, but the seller didnt send me examples or documentation about.<br />
I would like to use with MicroPython to display geolocation data.<br />
Could anyone please share with me libraries or details which am I able to develop things with?</p>
<p dir="auto">I tried use some code from internet like:</p>
<p dir="auto"><a href="https://www.good-display.com/product/375.html" rel="nofollow ugc">https://www.good-display.com/product/375.html</a></p>
<p dir="auto"><a href="https://github.com/mcauser/micropython-waveshare-epaper/issues/5" rel="nofollow ugc">https://github.com/mcauser/micropython-waveshare-epaper/issues/5</a></p>
<p dir="auto">Here is following photos about the board.</p>
<p dir="auto">Merry Christmas!</p>
<p dir="auto"><img src="/assets/uploads/files/1640372603185-whatsapp-image-2021-12-24-at-15.53.08.jpeg" alt="WhatsApp Image 2021-12-24 at 15.53.08.jpeg" class=" img-responsive img-markdown" width="1280" height="960" /> <img src="/assets/uploads/files/1640372603152-whatsapp-image-2021-12-24-at-15.53.08-1.jpeg" alt="WhatsApp Image 2021-12-24 at 15.53.08 (1).jpeg" class=" img-responsive img-markdown" width="960" height="1280" /> <img src="/assets/uploads/files/1640372603125-whatsapp-image-2021-12-24-at-15.53.08-2.jpeg" alt="WhatsApp Image 2021-12-24 at 15.53.08 (2).jpeg" class=" img-responsive img-markdown" width="1280" height="960" /></p>
]]></description><link>https://www.community.lilygo.cc/topic/32/esp32-eink-t5-2-13-on-micropython</link><generator>RSS for Node</generator><lastBuildDate>Sat, 06 Jun 2026 11:25:25 GMT</lastBuildDate><atom:link href="https://www.community.lilygo.cc/topic/32.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Dec 2021 19:04:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Fri, 06 May 2022 00:30:30 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://www.community.lilygo.cc/uid/39">@fdaher</a> <img src="https://www.community.lilygo.cc/assets/plugins/nodebb-plugin-emoji/emoji/android/1f44d.png?v=5rta56507n5" class="not-responsive emoji emoji-android emoji--+1" title=":+1:" alt="👍" /></p>
]]></description><link>https://www.community.lilygo.cc/post/134</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/134</guid><dc:creator><![CDATA[zhang-LILYGO]]></dc:creator><pubDate>Fri, 06 May 2022 00:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Tue, 28 Dec 2021 15:33:41 GMT]]></title><description><![CDATA[<p dir="auto">Hello everyone,<br />
I could run using Waveshare lib!!<br />
Thank you so much!!</p>
]]></description><link>https://www.community.lilygo.cc/post/88</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/88</guid><dc:creator><![CDATA[fdaher]]></dc:creator><pubDate>Tue, 28 Dec 2021 15:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Sun, 26 Dec 2021 02:32:15 GMT]]></title><description><![CDATA[<p dir="auto">Demo Lib from github:</p>
<p dir="auto"><a href="http://epaper2in13.py" rel="nofollow ugc">epaper2in13.py</a></p>
<pre><code>from micropython import const
from machine import SPI, Pin
from time import sleep_ms
import ustruct

# Display resolution
EPD_WIDTH  = const(250)
EPD_HEIGHT = const(122)
# datasheet says 250x122 (increased to 128 to be multiples of 8)

# Display commands
DRIVER_OUTPUT_CONTROL                = const(0x01)
# Gate Driving Voltage Control       0x03
# Source Driving voltage Control     0x04
BOOSTER_SOFT_START_CONTROL           = const(0x0C) # not in datasheet
#GATE_SCAN_START_POSITION             = const(0x0F) # not in datasheet
DEEP_SLEEP_MODE                      = const(0x10)
DATA_ENTRY_MODE_SETTING              = const(0x11)
#SW_RESET                             = const(0x12)
#TEMPERATURE_SENSOR_CONTROL           = const(0x1A)
MASTER_ACTIVATION                    = const(0x20)
#DISPLAY_UPDATE_CONTROL_1             = const(0x21)
DISPLAY_UPDATE_CONTROL_2             = const(0x22)
# Panel Break Detection              0x23
WRITE_RAM                            = const(0x24)
WRITE_VCOM_REGISTER                  = const(0x2C)
# Status Bit Read                    0x2F
WRITE_LUT_REGISTER                   = const(0x32)
SET_DUMMY_LINE_PERIOD                = const(0x3A)
SET_GATE_TIME                        = const(0x3B)
#BORDER_WAVEFORM_CONTROL              = const(0x3C)
SET_RAM_X_ADDRESS_START_END_POSITION = const(0x44)
SET_RAM_Y_ADDRESS_START_END_POSITION = const(0x45)
SET_RAM_X_ADDRESS_COUNTER            = const(0x4E)
SET_RAM_Y_ADDRESS_COUNTER            = const(0x4F)
TERMINATE_FRAME_READ_WRITE           = const(0xFF) # not in datasheet, aka NOOP


class EPD:
    def __init__(self):
        self.spi = SPI(2, baudrate=20000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(17))
        self.spi.init()

        dc = Pin(17)
        cs = Pin(5)
        rst = Pin(16)

        self.cs = cs
        self.dc = dc
        self.rst = rst
        #self.busy = busy
        self.cs.init(self.cs.OUT, value=1)
        self.dc.init(self.dc.OUT, value=0)
        self.rst.init(self.rst.OUT, value=0)
        self.width = EPD_WIDTH
        self.height = EPD_HEIGHT

        self.size = self.width * self.height // 8
        self.buf = bytearray(self.size)

    LUT_FULL_UPDATE    = bytearray(b'\x80\x60\x40\x00\x00\x00\x00\x10\x60\x20\x00\x00\x00\x00\x80\x60\x40\x00\x00\x00\x00\x10\x60\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x02\x09\x09\x00\x00\x02\x03\x03\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x41\xA8\x32\x30\x0A')
    LUT_PARTIAL_UPDATE = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x41\xA8\x32\x30\x0A')

    def clearBuffer(self):
        self._command(b'\x24')
        for i in range(0, len(self.buf)):
            self.buf[i] = 255
            self._data(bytearray([self.buf[i&rsqb;&rsqb;))

    def displayBuffer(self, buf):
        self._command(b'\x24')
        for i in range(0, len(buf)):
            self._data(bytearray([buf[i&rsqb;&rsqb;))
        self._command(b'\x22')
        self._command(b'\xC7')
        self._command(b'\x20')
        self._command(bytearray([TERMINATE_FRAME_READ_WRITE]))
        self.wait_until_idle()

    def _command(self, command, data=None):
        self.cs(1) # according to LOLIN_EPD
        self.dc(0)
        self.cs(0)
        self.spi.write(command)
        self.cs(1)
        if data is not None:
            self._data(data)

    def _data(self, data):
        self.cs(1) # according to LOLIN_EPD
        self.dc(1)
        self.cs(0)
        self.spi.write(data)
        self.cs(1)

    def init(self):
        self.reset()

        self.wait_until_idle();
        self._command(b'\x12'); # soft reset
        self.wait_until_idle();


        self._command(b'\x74', b'\x54'); #set analog block control
        self._command(b'\x7E', b'\x3B'); #set digital block control
        self._command(b'\x01', b'\xF9\x00\x00'); #Driver output control
        self._command(b'\x11', b'\x01'); #data entry mode
        #set Ram-X address start/end position
        self._command(b'\x44', b'\x00\x0F'); #0x0C--&gt;(15+1)*8=128
        #set Ram-Y address start/end position
        self._command(b'\x45', b'\xF9\x00\x00\x00'); # 0xF9--&gt;(249+1)=250

        self._command(b'\x3C', b'\x03'); # BorderWavefrom
        self._command(b'\x2C', b'\x55'); # VCOM Voltage

        self._command(b'\x03', bytes([self.LUT_FULL_UPDATE[70&rsqb;&rsqb;)); # ??

        self._command(b'\x04')
        self._data(bytes([self.LUT_FULL_UPDATE[71&rsqb;&rsqb;)); # ??
        self._data(bytes([self.LUT_FULL_UPDATE[72&rsqb;&rsqb;)); # ??
        self._data(bytes([self.LUT_FULL_UPDATE[73&rsqb;&rsqb;)); # ??


        self._command(b'\x3A', bytes([self.LUT_FULL_UPDATE[74&rsqb;&rsqb;)); # Dummy Line
        self._command(b'\x3B', bytes([self.LUT_FULL_UPDATE[75&rsqb;&rsqb;)); # Gate time

        self.set_lut(self.LUT_FULL_UPDATE)

        self._command(b'\x4E', b'\x00'); # set RAM x address count to 0;
        self._command(b'\x4F', b'\xF9\x00'); # set RAM y address count to 0X127;
        self.wait_until_idle()

    def wait_until_idle(self):
        sleep_ms(1000)

    def reset(self):
        self.rst(1)
        sleep_ms(1)

        self.rst(0)
        sleep_ms(10)

        self.rst(1)

    def set_lut(self, lut):
        self._command(bytearray([WRITE_LUT_REGISTER]), lut)

    # put an image in the frame memory
    def set_frame_memory(self, image, x, y, w, h):
        # x point must be the multiple of 8 or the last 3 bits will be ignored
        x = x &amp; 0xF8
        w = w &amp; 0xF8

        if (x + w &gt;= self.width):
            x_end = self.width - 1
        else:
            x_end = x + w - 1

        if (y + h &gt;= self.height):
            y_end = self.height - 1
        else:
            y_end = y + h - 1

        self.set_memory_area(x, y, x_end, y_end)
        self.set_memory_pointer(x, y)
        self._command(bytearray([WRITE_RAM]), image)

    # replace the frame memory with the specified color
    def clear_frame_memory(self, color):
        self.set_memory_area(0, 0, self.width - 1, self.height - 1)
        self.set_memory_pointer(0, 0)
        self._command(bytearray([WRITE_RAM]))
        # send the color data
        for i in range(0, (self.width * self.height)//8):
            self._data(bytearray([color]))

    # draw the current frame memory and switch to the next memory area
    def display_frame(self):
        self._command(bytearray([DISPLAY_UPDATE_CONTROL_2]), b'\xC7')
        self._command(bytearray([MASTER_ACTIVATION]))
        self._command(bytearray([TERMINATE_FRAME_READ_WRITE]))
        self.wait_until_idle()

    # specify the memory area for data R/W
    def set_memory_area(self, x_start, y_start, x_end, y_end):
        self._command(bytearray([SET_RAM_X_ADDRESS_START_END_POSITION]))
        # x point must be the multiple of 8 or the last 3 bits will be ignored
        self._data(bytearray([(x_start &gt;&gt; 3) &amp; 0xFF]))
        self._data(bytearray([(x_end &gt;&gt; 3) &amp; 0xFF]))
        self._command(bytearray([SET_RAM_Y_ADDRESS_START_END_POSITION]), ustruct.pack("&lt;HH", y_start, y_end))

    # specify the start point for data R/W
    def set_memory_pointer(self, x, y):
        self._command(bytearray([SET_RAM_X_ADDRESS_COUNTER]))
        # x point must be the multiple of 8 or the last 3 bits will be ignored
        self._data(bytearray([(x &gt;&gt; 3) &amp; 0xFF]))
        self._command(bytearray([SET_RAM_Y_ADDRESS_COUNTER]), ustruct.pack("&lt;H", y))
        self.wait_until_idle()

    # to wake call reset() or init()
    def sleep(self):
        self._command(bytearray([DEEP_SLEEP_MODE]))
        self.wait_until_idle()
</code></pre>
<p dir="auto"><a href="http://main.py" rel="nofollow ugc">main.py</a> (just for run):</p>
<pre><code>import epaper2in13
e = epaper2in13.EPD()
e.init()
e.clearBuffer()

import framebuf
buf = bytearray(128 * 250 // 8)
fb = framebuf.FrameBuffer(buf, 128, 250, framebuf.MONO_HLSB)
black = 0
white = 1
fb.fill(white)
#fb.text('Hello World',30,30,black)
for i in range(1,50):
    fb.pixel(i,i,0)

e.displayBuffer(buf)
</code></pre>
]]></description><link>https://www.community.lilygo.cc/post/87</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/87</guid><dc:creator><![CDATA[fdaher]]></dc:creator><pubDate>Sun, 26 Dec 2021 02:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Sat, 25 Dec 2021 23:07:11 GMT]]></title><description><![CDATA[<p dir="auto">After search on Lilygo Github repo, I tried run the "Hello word" and I got this output on Serial Monitor.</p>
<p dir="auto">I'm using the controller:<br />
#include &lt;GxDEPG0213BN/GxDEPG0213BN.h&gt;</p>
<p dir="auto">[  4947][E][esp32-hal-cpu.c:107] addApbChangeCallback(): duplicate func=400DABC8 arg=3FFBDD08<br />
[  5248][W][sd_diskio.cpp:104] sdWait(): Wait Failed<br />
[  5248][E][sd_diskio.cpp:126] sdSelectCard(): Select Failed<br />
[  5248][W][sd_diskio.cpp:510] ff_sd_initialize(): GO_IDLE_STATE failed<br />
[  5253][E][sd_diskio.cpp:795] sdcard_mount(): f_mount failed: (3) The physical drive cannot work<br />
[  5562][W][sd_diskio.cpp:104] sdWait(): Wait Failed<br />
[  5562][E][sd_diskio.cpp:126] sdSelectCard(): Select Failed<br />
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.</p>
<p dir="auto">Core  1 register dump:<br />
PC      : 0x400d3330  PS      : 0x00060030  A0      : 0x800d33ad  A1      : 0x3ffb26a0<br />
A2      : 0x3ffc2fb8  A3      : 0x0000001a  A4      : 0x00000040  A5      : 0x00000000<br />
A6      : 0x00000001  A7      : 0x80000001  A8      : 0x00000017  A9      : 0xffffffff<br />
A10     : 0x0000ffff  A11     : 0x3ffb27ec  A12     : 0x00000000  A13     : 0x00000000<br />
A14     : 0xf913be73  A15     : 0x3f500000  SAR     : 0x0000001a  EXCCAUSE: 0x0000001c<br />
EXCVADDR: 0x00000018  LBEG    : 0x4008a7a9  LEND    : 0x4008a7b9  LCOUNT  : 0xfffffffe</p>
<p dir="auto">Backtrace:0x400d332d:0x3ffb26a00x400d33aa:0x3ffb26c0 0x400d3039:0x3ffb26e0 0x400d30f8:0x3ffb2700 0x400d317f:0x3ffb2720 0x401481d1:0x3ffb2740 0x401481f6:0x3ffb2760 0x400db625:0x3ffb2780 0x400d2b49:0x3ffb27a0 0x400dbea2:0x3ffb2820</p>
<p dir="auto">ELF file SHA256: 0000000000000000</p>
<p dir="auto">My code:</p>
<pre><code>/*
    LilyGo Ink Screen Series Test
        - Created by Lewis he
*/

// According to the board, cancel the corresponding macro definition
#define LILYGO_T5_V213
// #define LILYGO_T5_V22
// #define LILYGO_T5_V24
// #define LILYGO_T5_V28
// #define LILYGO_T5_V102                           
// #define LILYGO_T5_V266
// #define LILYGO_EPD_DISPLAY         //T-Display 1.02 inch epaper   //Depend  https://github.com/adafruit/Adafruit_NeoPixel
// #define LILYGO_EPD_DISPLAY_154

#include &lt;boards.h&gt;
#include &lt;GxEPD.h&gt;
#include &lt;SD.h&gt;
#include &lt;FS.h&gt;

//GDEQ0213B74
// #include &lt;GxGDGDEW0102T4/GxGDGDEW0102T4.h&gt; //1.02" b/w
// #include &lt;GxGDEW0154Z04/GxGDEW0154Z04.h&gt;  // 1.54" b/w/r 200x200
// #include &lt;GxGDEW0154Z17/GxGDEW0154Z17.h&gt;  // 1.54" b/w/r 152x152
// #include &lt;GxGDEH0154D67/GxGDEH0154D67.h&gt;  // 1.54" b/w
// #include &lt;GxDEPG0150BN/GxDEPG0150BN.h&gt;    // 1.51" b/w   form DKE GROUP
// #include &lt;GxDEPG0266BN/GxDEPG0266BN.h&gt;    // 2.66" b/w   form DKE GROUP
// #include &lt;GxDEPG0290R/GxDEPG0290R.h&gt;      // 2.9" b/w/r  form DKE GROUP
// #include &lt;GxDEPG0290B/GxDEPG0290B.h&gt;      // 2.9" b/w    form DKE GROUP
// #include &lt;GxGDEW029Z10/GxGDEW029Z10.h&gt;    // 2.9" b/w/r  form GoodDisplay
// #include &lt;GxGDEW0213Z16/GxGDEW0213Z16.h&gt;  // 2.13" b/w/r form GoodDisplay
// #include &lt;GxGDE0213B1/GxGDE0213B1.h&gt;      // 2.13" b/w  old panel , form GoodDisplay
// #include &lt;GxGDEH0213B72/GxGDEH0213B72.h&gt;  // 2.13" b/w  old panel , form GoodDisplay
// #include &lt;GxGDEH0213B73/GxGDEH0213B73.h&gt;  // 2.13" b/w  old panel , form GoodDisplay
// #include &lt;GxGDEM0213B74/GxGDEM0213B74.h&gt;  // 2.13" b/w  form GoodDisplay 4-color
// #include &lt;GxGDEW0213M21/GxGDEW0213M21.h&gt;  // 2.13"  b/w Ultra wide temperature , form GoodDisplay
#include &lt;GxDEPG0213BN/GxDEPG0213BN.h&gt;    // 2.13" b/w  form DKE GROUP
// #include &lt;GxGDEW027W3/GxGDEW027W3.h&gt;      // 2.7" b/w   form GoodDisplay
// #include &lt;GxGDEW027C44/GxGDEW027C44.h&gt;    // 2.7" b/w/r form GoodDisplay
// #include &lt;GxGDEH029A1/GxGDEH029A1.h&gt;      // 2.9" b/w   form GoodDisplay
// #include &lt;GxDEPG0750BN/GxDEPG0750BN.h&gt;    // 7.5" b/w   form DKE GROUP

#include GxEPD_BitmapExamples

// FreeFonts from Adafruit_GFX
#include &lt;Fonts/FreeMonoBold9pt7b.h&gt;
#include &lt;Fonts/FreeMonoBold12pt7b.h&gt;
#include &lt;Fonts/FreeMonoBold18pt7b.h&gt;
#include &lt;Fonts/FreeMonoBold24pt7b.h&gt;
#include &lt;GxIO/GxIO_SPI/GxIO_SPI.h&gt;
#include &lt;GxIO/GxIO.h&gt;
#include &lt;WiFi.h&gt;

GxIO_Class io(SPI,  EPD_CS, EPD_DC,  EPD_RSET);
GxEPD_Class display(io, EPD_RSET, EPD_BUSY);


#if defined(_HAS_SDCARD_) &amp;&amp; !defined(_USE_SHARED_SPI_BUS_)
SPIClass SDSPI(VSPI);
#endif

#if defined(_GxGDEW0213Z16_H_) || defined(_GxGDEW029Z10_H_) || defined(_GxGDEW027C44_H_) ||defined(_GxGDEW0154Z17_H_) || defined(_GxGDEW0154Z04_H_) || defined(_GxDEPG0290R_H_)
#define _HAS_COLOR_
#endif

#if defined(LILYGO_EPD_DISPLAY)
Adafruit_NeoPixel strip(RGB_STRIP_COUNT, RGB_STRIP_PIN, NEO_GRBW + NEO_KHZ800);
#endif /*LILYGO_EPD_DISPLAY_102*/


void showFont(const char name[], const GFXfont *f);
void drawCornerTest(void);

bool setupSDCard(void)
{
#if defined(_HAS_SDCARD_) &amp;&amp; !defined(_USE_SHARED_SPI_BUS_)
    SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI);
    return SD.begin(SDCARD_CS, SDSPI);
#elif defined(_HAS_SDCARD_)
    return SD.begin(SDCARD_CS);
#endif
    return false;
}


void testSpeaker()
{
#if defined(_HAS_SPEAKER_)
#ifdef _HAS_PWR_CTRL_
    pinMode(SPK_POWER_EN, OUTPUT);
    digitalWrite(SPK_POWER_EN, HIGH);
#endif
    ledcSetup(LEDC_CHANNEL_0, 1000, 8);
    ledcAttachPin(SPERKER_PIN, LEDC_CHANNEL_0);
    int i = 3;
    while (i--) {
        ledcWriteTone(LEDC_CHANNEL_0, 1000);
        delay(200);
        ledcWriteTone(LEDC_CHANNEL_0, 0);
    }
#ifdef _HAS_PWR_CTRL_
    pinMode(SPK_POWER_EN, INPUT);
#endif
    ledcDetachPin(SPERKER_PIN);
#endif
}

void testWiFi()
{
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    // WiFi.scanNetworks will return the number of networks found
    int n = WiFi.scanNetworks();

    Serial.println("scan done");
    if (n == 0) {
        Serial.println("no networks found");
    } else {
        Serial.print(n);
        Serial.println(" networks found");
        for (int i = 0; i &lt; n; ++i) {
            // Print SSID and RSSI for each network found
            Serial.print(i + 1);
            Serial.print(": ");
            Serial.print(WiFi.SSID(i));
            Serial.print(" (");
            Serial.print(WiFi.RSSI(i));
            Serial.print(")");
            Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
            delay(10);
        }
    }
    Serial.println("");
}

void setup()
{
    bool rlst = false;
    Serial.begin(115200);
    Serial.println();
    Serial.println("setup");

#if defined(LILYGO_EPD_DISPLAY)
    pinMode(EPD_POWER_ENABLE, OUTPUT);
    digitalWrite(EPD_POWER_ENABLE, HIGH);
    delay(50);
    // strip test
    strip.begin();
    strip.show();
    strip.setBrightness(200);
    int i = 0;
    while (i &lt; 5) {
        uint32_t color[] = {0xFF0000, 0x00FF00, 0x0000FF, 0x000000};
        strip.setPixelColor(0, color[i]);
        strip.show();
        delay(1000);
        i++;
    }
    strip.setPixelColor(0, 0);
    strip.show();
#endif /*LILYGO_EPD_DISPLAY*/
    
#if defined(LILYGO_EPD_DISPLAY_102)
    pinMode(EPD_POWER_ENABLE, OUTPUT);
    digitalWrite(EPD_POWER_ENABLE, HIGH);
#endif /*LILYGO_EPD_DISPLAY_102*/
#if defined(LILYGO_T5_V102)
    pinMode(POWER_ENABLE, OUTPUT);
    digitalWrite(POWER_ENABLE, HIGH);
#endif /*LILYGO_T5_V102*/
  

    SPI.begin(EPD_SCLK, EPD_MISO, EPD_MOSI);

    display.init();
    display.setTextColor(GxEPD_BLACK);

    testSpeaker();

    testWiFi();

    rlst = setupSDCard();

    display.setRotation(0);
    display.fillScreen(GxEPD_WHITE);

#if defined(_HAS_COLOR_)
    display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_RED);
#else
    display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
#endif

#if defined(_HAS_SDCARD_)
    display.setRotation(1);
#if defined(LILYGO_T5_V102)
    display.setCursor(5, display.height() - 15);
#else
    display.setCursor(20, display.height() - 15);
#endif
    String sizeString = "SD:" + String(SD.cardSize() / 1024.0 / 1024.0 / 1024.0) + "G";
    display.println(rlst ? sizeString : "SD:N/A");

    int16_t x1, x2;
    uint16_t w, h;
    String str = GxEPD_BitmapExamplesQ;
    str = str.substring(2, str.lastIndexOf("/"));
    display.getTextBounds(str, 0, 0, &amp;x1, &amp;x2, &amp;w, &amp;h);
    display.setCursor(display.width() - w - 5, display.height() - 15);
    display.println(str);
#endif

    display.update();

    delay(1000);

}

void loop()
{
    drawCornerTest();

    int i = 0;
    while (i &lt; 4) {
        display.setRotation(i);
        showFont("FreeMonoBold9pt7b", &amp;FreeMonoBold9pt7b);
        //showFont("FreeMonoBold18pt7b", &amp;FreeMonoBold18pt7b);
        //showFont("FreeMonoBold24pt7b", &amp;FreeMonoBold24pt7b);
        i++;
    }

    display.fillScreen(GxEPD_WHITE);

    display.update();

    display.powerDown();

    esp_sleep_enable_ext1_wakeup(((uint64_t)(((uint64_t)1) &lt;&lt; BUTTON_1)), ESP_EXT1_WAKEUP_ALL_LOW);

    esp_deep_sleep_start();

}

void showFont(const char name[], const GFXfont *f)
{
    display.fillScreen(GxEPD_WHITE);
    display.setTextColor(GxEPD_BLACK);
    display.setFont(f);
    display.setCursor(0, 0);
    display.println();
    display.println(name);
    display.println(" !\"#$%&amp;'()*+,-./");
    display.println("0123456789:;&lt;=&gt;?");
    display.println("@ABCDEFGHIJKLMNO");
    display.println("PQRSTUVWXYZ[\\]^_");
    display.println("`abcdefghijklmno");
    display.println("pqrstuvwxyz{|}~ ");
    display.update();
    delay(5000);
}

void drawCornerTest()
{
    display.drawCornerTest();
    delay(5000);
    uint8_t rotation = display.getRotation();
    for (uint16_t r = 0; r &lt; 4; r++) {
        display.setRotation(r);
        display.fillScreen(GxEPD_WHITE);
        display.fillRect(0, 0, 8, 8, GxEPD_BLACK);
        display.fillRect(display.width() - 18, 0, 16, 16, GxEPD_BLACK);
        display.fillRect(display.width() - 25, display.height() - 25, 24, 24, GxEPD_BLACK);
        display.fillRect(0, display.height() - 33, 32, 32, GxEPD_BLACK);
        display.update();
        delay(5000);
    }
    display.setRotation(rotation); // restore
}


</code></pre>
]]></description><link>https://www.community.lilygo.cc/post/86</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/86</guid><dc:creator><![CDATA[fdaher]]></dc:creator><pubDate>Sat, 25 Dec 2021 23:07:11 GMT</pubDate></item><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Sat, 25 Dec 2021 10:31:29 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://www.community.lilygo.cc/uid/39">@fdaher</a> Remember this example was made on C++</p>
]]></description><link>https://www.community.lilygo.cc/post/85</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/85</guid><dc:creator><![CDATA[fdaher]]></dc:creator><pubDate>Sat, 25 Dec 2021 10:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to ESP32 eInk T5 2.13 on MicroPython on Sat, 25 Dec 2021 02:19:10 GMT]]></title><description><![CDATA[<p dir="auto">Unfortunatelly, I could not work with the example:<br />
<a href="https://github.com/Xinyuan-LilyGO/T5-Ink-Screen-Series" rel="nofollow ugc">https://github.com/Xinyuan-LilyGO/T5-Ink-Screen-Series</a></p>
<p dir="auto">Libraries conflicts, and another issues happening during the tests <img src="https://www.community.lilygo.cc/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=5rta56507n5" class="not-responsive emoji emoji-android emoji--disappointed" title=":-(" alt="😞" /></p>
]]></description><link>https://www.community.lilygo.cc/post/84</link><guid isPermaLink="true">https://www.community.lilygo.cc/post/84</guid><dc:creator><![CDATA[fdaher]]></dc:creator><pubDate>Sat, 25 Dec 2021 02:19:10 GMT</pubDate></item></channel></rss>