Git Product home page Git Product logo

m5gfx's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

m5gfx's Issues

Where to find the original example, that is running on the ATOM Display, when shipped?

Hi, thank you for the great work. I am looking for the original example, that is running on the ATOM Display after first startup. I am interested in the PDQ graphicstest part, as it supports for example roundRects. I have a few existing codes, that I would like to run on the ATOM Display, however they are built on the TFT_eSPI library. For my understanding I am able to use TFT_eSPI functions by adding:

#include <LGFX_TFT_eSPI.hpp>
//#include <TFT_eSPI.h>

However I was not successful to get this running, or even compiling. This is why I thought I could understand how to do it, with the original example, that is running on the Atom Display, as I can see that is basically running the TFT_graphicstest_PDQ.ino example.

Thank you for any help or suggestions.

Cannot use drawPngFile without FS

The examples do not match the latest version.
Our firmware uses drawPngFile to show images from LittleFS.
It was removed in this release. Please give a new example how to use it now.

thx.

Question: drawPngFile using SdFat

Hello @lovyan03,

in my M5 application, I depend on long filenames (8.3 filenames are really outdated).

So how can I use e.g. drawPngFile using the SdFat library?

#include <FS.h>  // including this, didn't help
#include <SdFat.h>
#include <M5Unified.h>

SdFat32 sd; // for FAT16/FAT32
..
M5.Display.drawPngFile(sd, "/m5stack.png", 0, 0); 

fails with compilation errors:

...\Documents\Arduino\libraries\M5GFX\src/lgfx/v1/LGFXBase.hpp:888:23: error: cannot declare variable 'file' to be of abstract type 'lgfx::v1::DataWrapperT<SdFat32>'
       DataWrapperT<T> file ( &fs ); \
                       ^~~~
...\Documents\Arduino\libraries\M5GFX\src/lgfx/v1/LGFXBase.hpp:896:5: note: in expansion of macro 'LGFX_FUNCTION_GENERATOR'
     LGFX_FUNCTION_GENERATOR(drawPng, draw_png)
     ^~~~~~~~~~~~~~~~~~~~~~~

Thank you,
Marcus

M5stack cording -

Hi,
I'm trying to run the analogmeter example and hitting an error for the coreink.

divide by zero error, could this be that the size of the screen is not recognised?


[env:m5stack-coreink]
platform = espressif32
board = m5stack-coreink
framework = arduino
lib_deps =
m5stack/M5Core-Ink@^0.0.7
m5stack/M5GFX@^0.1.10
monitor_speed =115200
monitor_filters = esp32_exception_decoder

--- Error
rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13104
load:0x40080400,len:3036
entry 0x400805e4
Guru Meditation Error: Core 1 panic'ed (IntegerDivideByZero). Exception was unhandled.

Core 1 register dump:
PC : 0x400d246a PS : 0x00060830 A0 : 0x800dcb39 A1 : 0x3ffb27f0
A2 : 0x3ffc2564 A3 : 0x3ffc2560 A4 : 0x3ffc2584 A5 : 0x00000000
A6 : 0x3ffbdb68 A7 : 0x00000000 A8 : 0x800d2463 A9 : 0x3ffb27a0
A10 : 0x00000000 A11 : 0x00000000 A12 : 0x00000000 A13 : 0x3ffc255c
A14 : 0x3ffc2584 A15 : 0x00000015 SAR : 0x00000006 EXCCAUSE: 0x00000006
EXCVADDR: 0x00000000 LBEG : 0x4008486d LEND : 0x40084875 LCOUNT : 0x00000027

Backtrace: 0x400d2467:0x3ffb27f0 0x400dcb36:0x3ffb2820

#0 0x400d2467:0x3ffb27f0 in lgfx::v1::LGFXBase::width() const at .pio/libdeps/m5stack-coreink/M5GFX/src/lgfx/v1/LGFXBase.hpp:284
(inlined by) setup() at src/main.ino:160
#1 0x400dcb36:0x3ffb2820 in loopTask(void*) at /.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:42

Request: Writing QOI images

I know that QOI is not already a standard, and an IANA type for that new image format is on the way. But it has a great potential especially for small devices.
So, as I have seen, that the LovyanGFX already supports createQoi() in the Qoi branch, I want kindly ask, if it is possible to merge that also to the M5GFX repo. For me M5Unified + M5GFX has alot of pro's on the M5Core2 (and other) M5 plattforms.
At this point, a big thanks to the high-quality contribution of M5GFX and M5Unified.

How to make this library work with M5Unified?

Hi Lovyan!

I tried to make use of this library because I am particularly interested in using sprites, but I can't get it to work.
I have searched for a similar issue both in this and in m5stack/M5Unified repo but without luck.

I followed examples listed on the official documentation site, but those don't use M5Unified.

My setup

I am using M5Stick C Plus 2 with Platform IO and Arduino framework.
I have added two libraries for working with the device:

[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino
lib_deps = 
	m5stack/M5GFX@^0.1.15
	m5stack/M5StickCPlus2@^1.0.2

With this setup, when I take some example code like BarGraph.ino it works out of the box, which is great!

The issue

It is when I try to extend the aforementioned example with M5Unified.h / M5StickCPlus2.h is when it goes wrong. The code compiles fine, and the display is initiated and backlit to ~50%, but the screen is completely black, with no output whatsoever.

The only changes I made are:

// on the top
#include <M5Unified.h>
// at beginning of setup()
  M5.begin();
// at beginning of loop()
  M5.update();

What is the proper way to integrate those two libraries? Am I missing something obvious, or can you suggest some troubleshooting steps?

M5StickCPlus2 display detection not handling ST7789V2

Similar to #69, I have a unit of the M5StickCPlus2 that is not being detected correctly.

Good unit:

[    42][D][M5GFX.cpp:482] _read_panel_id(): [M5GFX] [Autodetect] read cmd:04 = 00528585

Bad unit:

[    40][D][M5GFX.cpp:482] _read_panel_id(): [M5GFX] [Autodetect] read cmd:04 = ffb38181

Patching

if ((id & 0xFF) == 0x85)
to also check for 0x81 solves the issue, though it baffles me as to how this unit can leave the factory without the SDK handling it properly.

M5Stack CoreS3 IDF 5.1.1 not compiling

When using the M5Stack CoreS3 With IDF 5.1.1 a compile error pops up.

Line 809 of src/lgfx/v1/platforms/esp32/common.cpp is as follows:

 #if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 2) && ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0))
      (&dev->comd[0])[index].val = cmd_val;
 #else
      (&dev->comd0)[index].val = cmd_val;
 #endif

Which is checking for idf version 5, 0, 2 and higher and lower than 5.1.0. This does not work on
Changing it to

 #if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 2) && ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(5, 1, 1))
      (&dev->comd[0])[index].val = cmd_val;
 #else
      (&dev->comd0)[index].val = cmd_val;
 #endif

fixes the issue
The &dev->comd[0] is correct here

StoreProhibited at FlipBuffer

Sometimes, acquiring DMA-capable memory fails, resulting in the following exception.

Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x400e5cc4  PS      : 0x00060830  A0      : 0x800e98b5  A1      : 0x3ffd8b80
A2      : 0x00000000  A3      : 0x00000000  A4      : 0x00000320  A5      : 0x3ffd8cc8
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x00000001
A10     : 0x3ffdc418  A11     : 0x00000140  A12     : 0x3f815024  A13     : 0x01000000
A14     : 0x00ffffff  A15     : 0x00000000  SAR     : 0x00000007  EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000  LBEG    : 0x4008b684  LEND    : 0x4008b69a  LCOUNT  : 0x00000000


Backtrace: 0x400e5cc1:0x3ffd8b80 0x400e98b2:0x3ffd8ba0 0x401db239:0x3ffd8c00 0x400e8ea2:0x3ffd8c20 0x400e48c5:0x3ffd8c60 0x400fec1a:0x3ffd8ca0 0x400ff592:0x3ffd8d30 0x400fe30b:0x3ffd8de0 0x400fe33d:0x3ffd8e40

  #0  0x400e5cc1:0x3ffd8b80 in unsigned int lgfx::v1::color_convert<lgfx::v1::swap565_t, lgfx::v1::bgr888_t>(unsigned int) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/misc/colortype.hpp:566
      (inlined by) unsigned int lgfx::v1::pixelcopy_t::copy_palette_affine<lgfx::v1::swap565_t, lgfx::v1::bgr888_t>(void*, unsigned int, unsigned int, lgfx::v1::pixelcopy_t*) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/misc/pixelcopy.hpp:188
  #1  0x400e98b2:0x3ffd8ba0 in lgfx::v1::Bus_SPI::writePixels(lgfx::v1::pixelcopy_t*, unsigned int) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/platforms/esp32/Bus_SPI.cpp:427
  #2  0x401db239:0x3ffd8c00 in lgfx::v1::Panel_LCD::writePixels(lgfx::v1::pixelcopy_t*, unsigned int, bool) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/panel/Panel_LCD.cpp:278
  #3  0x400e8ea2:0x3ffd8c20 in lgfx::v1::Panel_LCD::writeImage(unsigned int, unsigned int, unsigned int, unsigned int, lgfx::v1::pixelcopy_t*, bool) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/panel/Panel_LCD.cpp:346 (discriminator 4)
  #4  0x400e48c5:0x3ffd8c60 in lgfx::v1::LGFXBase::pushImage(int, int, int, int, lgfx::v1::pixelcopy_t*, bool) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/LGFXBase.cpp:1165
  #5  0x400fec1a:0x3ffd8ca0 in lgfx::v1::LGFX_Sprite::push_sprite(lgfx::v1::LovyanGFX*, int, int, unsigned int) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/LGFX_Sprite.hpp:540
  #6  0x400ff592:0x3ffd8d30 in lgfx::v1::LGFX_Sprite::pushSprite(lgfx::v1::LovyanGFX*, int, int) at .pio/libdeps/m5stack-core2/M5GFX/src/lgfx/v1/LGFX_Sprite.hpp:359
      (inlined by) m5avatar::Face::draw(m5avatar::DrawContext*) at .pio/libdeps/m5stack-core2/M5Stack-Avatar/src/Face.cpp:132
  #7  0x400fe30b:0x3ffd8de0 in m5avatar::Avatar::draw() at .pio/libdeps/m5stack-core2/M5Stack-Avatar/src/Avatar.cpp:155 (discriminator 4)
  #8  0x400fe33d:0x3ffd8e40 in m5avatar::drawLoop(void*) at .pio/libdeps/m5stack-core2/M5Stack-Avatar/src/Avatar.cpp:23

This is caused by the failure of allocating DMA-capable memory on FlipBuffer::getBuffer()

_buffer[_flip] = (uint8_t*)heap_alloc_dma(length);

called from Bus_SPI::writePixels()

auto dmabuf = _flip_buffer.getBuffer(len * bytes);

I understand that this is due to the limitation of DMA-capable memory size and cannot be completely prevented from occurring due to conflicting with other processes, but I am wondering if there is some kind of countermeasure.

Please take it into consideration.

Plan 1) Reduce the maximum memory size for one copy.

This can reduce the probability of failure. (but not perfect)

Plan 2) Retry with a smaller size when the allocation fails.

This can increase the probability of succeed. (but it still might fail to allocate.)

Plan 3) Skip the drawing process when the allocation fails.

The drawing result may be incomplete, but it can continue other processes.

Plan 4) Throw exception immediately when the allocation fails.

This doesn't solve anything, but it makes it easier to figure out the reason for the reboot.

LCD Unit 1.14 + M5StickC PLUS

Hi, I would like to know if there is a way to duplicate the same image that shows on the M5StickC PLUS screen to LCD Screen Unit 1.14

Thank you lovyan03!

Your skills with embedded graphics are unmatched.
I was very impressed with the ESP32_ScreenShotReceiver you wrote - expertly avoiding the tight memory limits, and making an incredibly fast real-time windows/ESP32 combined image encoding/decoding system!

Then today I saw your M5GFX library with Jpg drawing! Amazing!

Sorry this isn't an "Issue" - GitHub doesn't have a "Praise" tab.

xx

Compilation fails with IDF 5.0.1

IDF: 5.0.1
OS: Windows 11
VS Code: 1.77.3
Espressif IDF VS Code Extension: v.1.6.1

Create sample project based on IDF C++ template (like "blink"), add "components" directory, anc checkout M5GFX and M5Unified modules, then try to use M5:

#include <cstdlib>
#include <thread>
#include "esp_log.h"
#include "gpio_cxx.hpp"
#include "M5Unified.hpp"

using namespace idf;
using namespace std;

extern "C" void app_main(void)
{
    try
    {
        GPIOInput gpio(GPIONum(26));
        gpio.set_pull_mode(GPIOPullMode::PULLUP());

        auto cfg = M5.config();
        M5.begin(cfg);
        M5.Lcd.setRotation(3);
        M5.Lcd.fillScreen(BLACK);
        M5.Lcd.setCursor(0, 0, 4);
        M5.Lcd.println("PIR TEST");

        while (true)
        {
            auto level = gpio.get_level();
            M5.Lcd.setCursor(110, 55, 6);
            M5.Lcd.println(level == GPIOLevel::HIGH ? "1":"0");
        }
    }
    catch (GPIOException &e)
    {
        printf("GPIO exception occurred: %s\n", esp_err_to_name(e.error));
        printf("stopping.\n");
    }
}

Compiler warns about deprecated API, but along those error is reported:

error: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'int' [-Werror=format=]

Adding to CMakeLists.txt as a last line in M5GFX solves problem (although it may require better solution)
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-format)

Application @ https://github.com/andrzejroszkowski/m5gfx-sample

build-log.txt

M5unitLCD for ESP32 I2C2 issue

Hi All,

I have defined two I2Cs in ESP32 to control M5UnitLCD.
Now there is a problem, when i use I2C1 to control LCD everything works fine, but when i switch to I2C2, I2C error occurs, and i use gpio 15/16 or 32/33 to control I2C1 without problem, but I2C2 LCD has problems , can anyone help?
Thansk

ERROR LOG:
[D][esp32-hal-i2c.c:1344] i2cProcQueue(): Busy Timeout start=0xd7, end=0x10 9, =50, max=50 error=1
[E][esp32-hal-i2c.c:318] i2cDumpI2c(): i2c=0x3ffbe218
[I][esp32-hal-i2c.c:319] i2cDumpI2c(): dev=0x60027000 date=0x16042000
[I][esp32-hal-i2c.c:321] i2cDumpI2c(): lock=0x3ffb8b00
[I][esp32-hal-i2c.c:323] i2cDumpI2c(): num=1
[I][esp32-hal-i2c.c:324] i2cDumpI2c(): mode=1
[I][esp32-hal-i2c.c:325] i2cDumpI2c(): stage=3
[I][esp32-hal-i2c.c:326] i2cDumpI2c(): error=1
[I][esp32-hal-i2c.c:327] i2cDumpI2c(): event=0x3ffb8b88 bits=0
[I][esp32-hal-i2c.c:328] i2cDumpI2c(): intr_handle=0x3ffb8bbc
[I][esp32-hal-i2c.c:329] i2cDumpI2c(): dq=0x3ffb8b64
[I][esp32-hal-i2c.c:330] i2cDumpI2c(): queueCount=1
[I][esp32-hal-i2c.c:331] i2cDumpI2c(): queuePos=0
[I][esp32-hal-i2c.c:332] i2cDumpI2c(): errorByteCnt=0
[I][esp32-hal-i2c.c:333] i2cDumpI2c(): errorQueue=0
[I][esp32-hal-i2c.c:334] i2cDumpI2c(): debugFlags=0x00000000
[I][esp32-hal-i2c.c:311] i2cDumpDqData(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:354] i2cDumpInts(): Debug Buffer not Enabled
[D][esp32-hal-i2c.c:1353] i2cProcQueue(): Gross Timeout Dead start=0x15a, e nd=0x18c, =50, max=50 error=1
[E][esp32-hal-i2c.c:318] i2cDumpI2c(): i2c=0x3ffbe218
[I][esp32-hal-i2c.c:319] i2cDumpI2c(): dev=0x60027000 date=0x16042000
[I][esp32-hal-i2c.c:321] i2cDumpI2c(): lock=0x3ffb8b00
[I][esp32-hal-i2c.c:323] i2cDumpI2c(): num=1
[I][esp32-hal-i2c.c:324] i2cDumpI2c(): mode=1
[I][esp32-hal-i2c.c:325] i2cDumpI2c(): stage=3
[I][esp32-hal-i2c.c:326] i2cDumpI2c(): error=1
[I][esp32-hal-i2c.c:327] i2cDumpI2c(): event=0x3ffb8b88 bits=0
[I][esp32-hal-i2c.c:328] i2cDumpI2c(): intr_handle=0x3ffb8bbc
[I][esp32-hal-i2c.c:329] i2cDumpI2c(): dq=0x3ffb8b64
[I][esp32-hal-i2c.c:330] i2cDumpI2c(): queueCount=1
[I][esp32-hal-i2c.c:331] i2cDumpI2c(): queuePos=0
[I][esp32-hal-i2c.c:332] i2cDumpI2c(): errorByteCnt=0
[I][esp32-hal-i2c.c:333] i2cDumpI2c(): errorQueue=1
[I][esp32-hal-i2c.c:334] i2cDumpI2c(): debugFlags=0x00000000
[I][esp32-hal-i2c.c:311] i2cDumpDqData(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:354] i2cDumpInts(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:1138] i2cProcQueue(): Bus busy, reinit
[E][common.cpp:939] writeBytes(): i2c write error : ack wait
[D][esp32-hal-i2c.c:1344] i2cProcQueue(): Busy Timeout start=0x1f8, end=0x2 2a, =50, max=50 error=1
[E][esp32-hal-i2c.c:318] i2cDumpI2c(): i2c=0x3ffbe218
[I][esp32-hal-i2c.c:319] i2cDumpI2c(): dev=0x60027000 date=0x16042000
[I][esp32-hal-i2c.c:321] i2cDumpI2c(): lock=0x3ffb8b00
[I][esp32-hal-i2c.c:323] i2cDumpI2c(): num=1
[I][esp32-hal-i2c.c:324] i2cDumpI2c(): mode=1
[I][esp32-hal-i2c.c:325] i2cDumpI2c(): stage=3
[I][esp32-hal-i2c.c:326] i2cDumpI2c(): error=1
[I][esp32-hal-i2c.c:327] i2cDumpI2c(): event=0x3ffb8b88 bits=0
[I][esp32-hal-i2c.c:328] i2cDumpI2c(): intr_handle=0x3ffb8bbc
[I][esp32-hal-i2c.c:329] i2cDumpI2c(): dq=0x3ffb8b64
[I][esp32-hal-i2c.c:330] i2cDumpI2c(): queueCount=1
[I][esp32-hal-i2c.c:331] i2cDumpI2c(): queuePos=0
[I][esp32-hal-i2c.c:332] i2cDumpI2c(): errorByteCnt=0
[I][esp32-hal-i2c.c:333] i2cDumpI2c(): errorQueue=0
[I][esp32-hal-i2c.c:334] i2cDumpI2c(): debugFlags=0x00000000
[I][esp32-hal-i2c.c:311] i2cDumpDqData(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:354] i2cDumpInts(): Debug Buffer not Enabled
[D][esp32-hal-i2c.c:1353] i2cProcQueue(): Gross Timeout Dead start=0x27b, e nd=0x2ad, =50, max=50 error=1
[E][esp32-hal-i2c.c:318] i2cDumpI2c(): i2c=0x3ffbe218
[I][esp32-hal-i2c.c:319] i2cDumpI2c(): dev=0x60027000 date=0x16042000
[I][esp32-hal-i2c.c:321] i2cDumpI2c(): lock=0x3ffb8b00
[I][esp32-hal-i2c.c:323] i2cDumpI2c(): num=1
[I][esp32-hal-i2c.c:324] i2cDumpI2c(): mode=1
[I][esp32-hal-i2c.c:325] i2cDumpI2c(): stage=3
[I][esp32-hal-i2c.c:326] i2cDumpI2c(): error=1
[I][esp32-hal-i2c.c:327] i2cDumpI2c(): event=0x3ffb8b88 bits=0
[I][esp32-hal-i2c.c:328] i2cDumpI2c(): intr_handle=0x3ffb8bbc
[I][esp32-hal-i2c.c:329] i2cDumpI2c(): dq=0x3ffb8b64
[I][esp32-hal-i2c.c:330] i2cDumpI2c(): queueCount=1
[I][esp32-hal-i2c.c:331] i2cDumpI2c(): queuePos=0
[I][esp32-hal-i2c.c:332] i2cDumpI2c(): errorByteCnt=0
[I][esp32-hal-i2c.c:333] i2cDumpI2c(): errorQueue=1
[I][esp32-hal-i2c.c:334] i2cDumpI2c(): debugFlags=0x00000000
[I][esp32-hal-i2c.c:311] i2cDumpDqData(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:354] i2cDumpInts(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:1138] i2cProcQueue(): Bus busy, reinit

CODE:
//I2C BUS
#define I2C1_SDA 15
#define I2C1_SDL 16
#define I2C2_SDA 32
#define I2C2_SDL 33

/* I2C Bus */
TwoWire I2C1 = TwoWire(0); //I2C1 bus
TwoWire I2C2 = TwoWire(1); //I2C2 bus

// LCD
#include <M5UnitLCD.h>
M5UnitLCD display (I2C2_SDA,I2C2_SDL,400000);
void setup()
{
Serial.begin(115200);
I2C2.begin(I2C2_SDA,I2C2_SDL);

display.begin();

if (display.isEPD())
{
display.setEpdMode(epd_mode_t::epd_fastest);
display.invertDisplay(true);
display.clear(TFT_WHITE);
}
if (display.width() < display.height())
{
display.setRotation(display.getRotation() ^ 1);
}

// width=240 , height=135
log_d("width=%d , height=%d",display.width(),display.height());

display.setColorDepth(1); // mono color
display.setFont(&fonts::Font4);
display.setTextWrap(false);
display.setTextSize(3);
display.setTextColor(TFT_BLACK);

display.fillScreen(WHITE);

display.drawString("Ready" , 0, (display.height()/3));
}

Nathan Kuo

M5 core ink display show dimmer content

I've written an app on the coreink using M5GFX that displays data on the screen.

Sometimes if i press te powerbutton or wakeup from sleep the black pixels go briefly dark and display the same data a bit dimmer.

It seems the refresh process sometimes behaves oddly with some weird result.
Sometimes during the last step in the refresh process the contents of the display gets a bit dimmer. ( see picture)
I tried the 4 different edp modes but all with the same endresults (sometimes good sometimes dim)

afbeelding

What could be the problem?
Do i need to disable M5 eink when using M5GFX like this :

 M5.begin(false , true , true);

or shouldnt it matter?

            display.begin();
            display.setEpdMode(epd_mode_t::epd_fastest);
              
            display.startWrite();
            display.fillScreen(TFT_WHITE);
            display.setTextColor(TFT_BLACK);
            
            display.setFont(&fonts::FreeMonoBold18pt7b);
            display.drawString(ipStr, 1,10);
            
            char batStr[32] = { '\0' }; // initialize with all zeroes
            sprintf(batStr,"B:%.3fV" ,getBatVoltage() ); 
            display.drawString(batStr, 5,50);
          
            char counterStr[32] = { '\0' }; // initialize with all zeroes
            sprintf(counterStr,"%05d" , esp_random() % 99999 ); 
            display.setFont(&fonts::DejaVu56);
            display.drawString(counterStr, 5,100);
          
            display.setFont(&fonts::FreeMonoBold12pt7b);
            display.drawString("Rain & cloudy", 5,170);
            
            display.endWrite();
            delay(250);   // Give Serial.print statements time to show stuff in monitor
            M5.shutdown(120);

M5AtomDisplay working with pre-installed software but not with the software from Github--> Solved

So, this is the situation.
I have two M5AtomDisplay Units, say A and B and I have a wave share 5 inch HDMI display (https://www.waveshare.com/wiki/5inch_HDMI_LCD#Screen_orientation_settings).

Unit A is out of the box plugged to my Waveshare screen. It rins smoothly the graphics. To clarify, I have not uploaded any software to the M5Atom.

Unit B I uploaded the software (Atomdisplay_factory) to the M5Atom. I use Arduino IDE, I dont see any related libs to be updated. BUT, nog graphics shown on the screen. I tried different setting for M5AtomDisplay display. Btw, I know the software is running in the sense that I created a Serial.println(mills()) in the main loop. And I see the loop is running. It is just That nothing is shown on the display.

Anyone any clue how to get this Waveshare working with M5AtomDisplay. Oh, btw, unit B works perfectly with the Waveshare 7 inch display. Help is appreciated.

LittleFS error occurs suddenly

on my M5Dial,

Using LittleFS,
Suddenly this error occurs.

.pio/libdeps/esp32/M5GFX/src/lgfx/v1/LGFXBase.hpp:920:23: error: cannot declare variable 'file' to be of abstract type 'lgfx::v1::DataWrapperT<fs::LittleFSFS>'
before then, this program normally runs.

Draw fillRoundRect

how can I use fillRoundRect (x,x,x,x,x) (like in tft_espi, in M5GFX ?
if I write, no error on compile, but also no result in display drawing

drawJpgUrl missing?

Hi!

I wrote a simple sketch using the function mentioned in the comments in drawImageData.ino, display.drawJpgUrl().
The included libraries/files:

#include <Arduino.h>
#include <WiFiMulti.h>
#include <M5GFX.h>
M5GFX display;
WiFiMulti WiFiMulti;
WiFiClient client;
extern const uint8_t jpg[];
void setup(){...............................

The compiler stops and tells me:

F:\sarah\Documents\Arduino\sketches\M5Stack\netStreamVersions\G5GFXVersion\G5GFXVersion.ino: In function 'void loop()':
G5GFXVersion:27:11: error: 'using M5GFX = class m5gfx::M5GFX {aka class m5gfx::M5GFX}' has no member named 'drawJpgUrl'
display.drawJpgUrl("http://untamed.zone/M5Stack/", 0, 0);
^

I don't know if the M5GFX\src\lgfx\v1\lgfx_filesystem_support needs including by-hand, or if it should be ok just using :
#include <M5GFX.h>
M5GFX display;

Display Module 13.2 not working with Core2 V1.1

I have an application that works fine when using Core2 V1.0 with the Display Module 13.2, but when I use the new Core2 V1.1, the display is blank.

M5.getDisplayIndex(m5gfx::board_M5ModuleDisplay) returns 1 on a Core2 V1.0, but returns -1 on a Core2 V1.1, so it appears the Core isn't seeing the display module.

Can these files be used with the M5Core2 device

I appreciate that the read.me suggests that there are several devices that this library can be used with but wanted to check before I experiment with my m5core2 as I don't want to brick it!

Any advice pls? Thanks.

readPixelRGB が M5Stack CoreS3 で機能しない

readPixelRGB does not work in M5Stack CoreS3.

構成

  • M5Stack CoreS3

ビルド環境

  • macOS Catallina 10.15.7
  • PlatformIO Core, version 6.1.13
  • espressif32 / arduino
  • M5Unified 0.1.12

問題の内容

Core,Core2 では readPixelRGB で値が取れているが、CoreS3 では取れていない。

再現コード

#include <M5Unified.h>
auto& lcd = M5.Display;
void setup()
{
    M5.begin();

    lcd.clear(TFT_WHITE);
    uint16_t clr16 = lcd.readPixel(160,120);
    auto clr24 = lcd.readPixelRGB(160,120);
    M5_LOGI("rgb888 = 0x%02x%02x%02x, rgb565 = 0x%04x",clr24.r, clr24.g, clr24.b, clr16);
    // CoreS3     rgb888 = 0x000000, rgb565 = 0xffff
    // Core/Core2 rgb888 = 0xfcfcfc, rgb565 = 0xffff
}
void loop()
{
}

Using AtomDisplay with Makerfabs 1920x480 IPS display with MIPI-HDMI Driver

Recently got a number of these displays link but cannot get them to work with the M5Stack AtomDisplay though I do see some artefacts displayed on the screen when I run some test code with Arduino IDE. I know that they are 60Hz with a pixel clock of 66280000. I can drive them with other HDMI sources such as my development Mac, embedded computers etc but not with the AtomDisplay. I'm not a display kinda guy, I write industrial control and state machine code :-). Just wondering if these will work with the AtomDisplay and if so, any pointers to getting them to work? Really appreciate any help + apologies if this is not the right place to post this question.

I'm using the AtomDisplay with PSRAM though I know this makes no difference so the controller is an ESP32 PICO-V3

Mark

Conflict error on LongTextScroll.ino

I'll share my experience.
I encountered an error when trying to run the LongTextScroll.ino sample code for M5GFX on M5CORE2.
The conflict error occurs at the bottom of M5GFX.h, specifically at the line:

cpp
Copy code
using EncodeRange = lgfx::EncodeRange;
I'm writing the code using VScode+PIO.
Interestingly, I don't get this error when using M5GFX in my custom code.
Moreover, the LongTextScroll.ino works fine on M5Stack Basic.

(JP)
わたしの体験を共有します。
M5GFXのサンプルコードLongTextScroll.inoをM5CORE2で動かそうとしたときのエラーについて。
M5GFX.hの一番したのほうの、
using EncodeRange = lgfx::EncodeRange;
でconflict errorが出てしまいます。
VScode+PIOで書いています。
自作コードでM5GFXを使っているとこのエラーは出ません。
また、M5Stack BasicではLongTextScroll.inoは普通に動きます。

Copying in `miniz` makes this difficult to use with projects that already use `miniz`

miniz is vendor'd into this repo, causing duplicate symbol linker errors if M5GFX is used in projects that already use miniz.

Not sure on the best way to handle this. Here are some options:

  • Compile time flag that skips compiling miniz.c (assumes symbols will come from somewhere else)
  • Rename symbols in miniz.c so they don't conflict with other projects using miniz

I'm running into this specifically in an esp-idf project where I have a miniz component already.

Continuous integration with GitHub actions

I was trying to implement CI to ensure the component compiles for the various versions of ESP-IDF.

The problem is that the project is not set up in a way that allows for this:
ESP-IDF components should be in a subfolder (commonly main/, but it could also be M5GFX/). Without this, any attempt to compile the component with idf.py build leads to this error:

Called idf_component_register from a non-component directory.

Reference build: https://github.com/KenVanHoeylandt/M5GFX/actions/runs/8222729252/job/22484559726

.github/workflows/build.yml example:

name: Build
on: [push]
jobs:
  build-esp-idf-4.4:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: build
        uses: espressif/esp-idf-ci-action@main
        with:
          esp_idf_version: v4.4
          target: esp32

To allow for idf.py build to work independently in this project, these steps are required:

  • Add a subfolder for this component (main/ or M5GFX/), move relevant files into this folder and add a CMakeLists.txt
  • Add include($ENV{IDF_PATH}/tools/cmake/project.cmake) to the root CMakeLists.txt

Considering that moving source files has a big impact on your currently unmerged branches, I figured I'd open this issue to discuss the proposed changes.

Using AtomDisplay with single-mode HDMI devices

Hi and thanks for this awesome driver!

According to the data sheet of my display, I came up with this configuration. However the initialization fails with an "out of range" error printed in the console.

M5AtomDisplay display( 800, 480, 66, 800, 480, 1, 1, 32000000 );

I plugged the display to a linux machine and extracted the xrandr information after it was detected.

It turns out this display only has one refresh rate: 66Hz (negociated at 65.681445).

I've double checked the numbers in a pixel clock calculator, and the EDID information matches the data sheet information, what am I doing wrong?

Display informations

    00ffffffffffff000481040001000000
    01110103800f0a000a00000000000000
    00000000000001010101010101010101
    010101010101800c208030e02d102830
    d3006c44000000180000001000000000
    00000000000000000000000000100000
    00000000000000000000000000000010
    00000000000000000000000000000017
  • Vendor & Product Identification:
  Manufacturer: ADA
  Model: 4
  Serial Number: 1
  Made in: week 1 of 2007
  • Preferred video timing:
  DTD   1:   800x480    65.681445 Hz   5:3     34.483 kHz     32.000000 MHz (108 mm x 68 mm)
                  Hfront   40 Hsync  48 Hback   40 Hpol N
                  Vfront   13 Vsync   3 Vback   29 Vpol N
  • Calculations:
    image

other AtomDisplay related threads: #30 #47

i2c timeout error

On my two M5StickC-PLUS2, I get the following error:

[176344][W][common.cpp:1400] readBytes(): [LGFX] i2c read error : read timeout

It happens randomly.

It seems to happen only when using the IMU.

When it happens, my single (user) task hangs, but the BLE task remains active.

How to use 16bit colors instead of 32 bit colors?

Hi Lovyan03,

I am using M5 ATOM Display and I want to use 16bit RGB565 colors.
I have used display.setColorDepth(16); in the setup after display.init();
However the 16bit colors (for example: 0xCFFC) are interpreted as 32bit colors (0x00CFFC).

m5core2 resets on load drawPng

Hi there!

I have the problem that my m5core2 resets at displaying PNG files through drawPng:
`
#include <Arduino.h>

#include <M5GFX.h>
M5GFX display;

extern const uint8_t jpg[];

void setup()
{
// WiFi.begin("ssid","passwd");

display.begin();

if (display.width() < display.height())
{
display.setRotation(display.getRotation() ^ 1);
}
}

void loop(void)
{

display.drawPng(jpg, ~0u, 0, 0);
delay(1000);

}

constexpr uint8_t jpg[] = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xAA, 0x69, 0x71,
0xDE, 0x00, 0x00, 0x0A, 0x67, 0x49, 0x44, 0x41, 0x54, 0x78, 0x5E, 0xED, 0x9B, 0x5D, 0x6C, 0x55,
0x55, 0x16, 0xC7, 0x4B, 0x41, 0x3E, 0x02, 0xFA, 0xE0, 0x84, 0x0A, 0x0C, 0xD0, 0x3A, 0x2D, 0x05,
0x86, 0x0F, 0x95, 0x8F, 0x0E, 0x5A, 0x28, 0x30, 0xC8, 0x38, 0x0F, 0x1A, 0x79, 0xC5, 0x17, 0x32,
0x13, 0x8D, 0x0F, 0x62, 0xA2, 0x0F, 0x26, 0x6A, 0xF4, 0x81, 0x79, 0xD0, 0x44, 0x3A, 0x4F, 0xC4,
0x88, 0x99, 0x91, 0xD2, 0x96, 0xD6, 0x7E, 0xD1, 0x5B, 0x78, 0x41, 0x85, 0xC4, 0x21, 0xBC, 0x98,
0xA8, 0x31, 0x0D, 0x46, 0x9D, 0x99, 0x60, 0xC4, 0x44, 0x8D, 0x98, 0x9E, 0x73, 0x2E, 0xA2, 0x78,
0xC5, 0xEE, 0xF8, 0xDB, 0xFB, 0x9E, 0x7D, 0xEF, 0xBE, 0xE7, 0xE3, 0x9E, 0xCF, 0x3A, 0xC9, 0x44,
0x93, 0x7F, 0x6A, 0xE2, 0x39, 0x7B, 0xEF, 0xDF, 0x5A, 0xEB, 0xEC, 0xBD, 0xD6, 0xDA, 0xD7, 0x86,
0x86, 0x5F, 0xFF, 0xF9, 0xD5, 0x02, 0x33, 0x6A, 0x81, 0xBD, 0xA7, 0x8B, 0x37, 0xDF, 0x7B, 0xBA,
0xB8, 0x17, 0x3D, 0x8B, 0x06, 0xF7, 0x9C, 0x2A, 0xBE, 0x83, 0x2E, 0xA3, 0x6B, 0x7F, 0x3C, 0x55,
0xBC, 0x21, 0xB5, 0x9B, 0x7F, 0xDF, 0x3D, 0x51, 0xBC, 0xBC, 0x6B, 0xC2, 0x79, 0x07, 0x0D, 0xEE,
0x9A, 0x28, 0x3E, 0xBB, 0x73, 0xC2, 0xD9, 0xDB, 0x35, 0x51, 0xBC, 0x79, 0x46, 0x17, 0x37, 0x53,
0x83, 0x03, 0xBD, 0x04, 0x3D, 0x8E, 0xDE, 0x06, 0xBA, 0x84, 0x84, 0x14, 0xD0, 0x4A, 0x40, 0x57,
0x04, 0xBC, 0x00, 0x5E, 0x00, 0xAD, 0xB4, 0xD3, 0x50, 0x57, 0xC1, 0x29, 0xA1, 0xB7, 0x77, 0x14,
0x9C, 0xC7, 0xB7, 0x17, 0x8A, 0x4B, 0x66, 0x6A, 0xBD, 0xB9, 0x8C, 0xFB, 0xE7, 0x33, 0xD7, 0x1B,
0x00, 0xEE, 0x44, 0xA3, 0xA8, 0x84, 0x14, 0xB4, 0x09, 0x6E, 0xC2, 0x7B, 0xC1, 0x4D, 0x78, 0xA0,
0x85, 0x16, 0xF0, 0x42, 0x6A, 0x3B, 0xC6, 0xD8, 0x3E, 0xEE, 0x8C, 0x76, 0x8E, 0x3B, 0xF7, 0x6C,
0x2B, 0x5C, 0xCF, 0x65, 0xCD, 0xB9, 0x0D, 0x02, 0x6C, 0x07, 0x3A, 0x27, 0xA1, 0x4D, 0xF0, 0x20,
0xAF, 0x2B, 0xF0, 0xFA, 0x5E, 0x57, 0xF0, 0x06, 0xB8, 0x84, 0x17, 0xC0, 0x0B, 0xE0, 0x95, 0xEE,
0x19, 0x77, 0xCE, 0xDE, 0x3D, 0xEE, 0x74, 0xE4, 0x06, 0x90, 0x76, 0x20, 0x60, 0x6F, 0xFD, 0xD3,
0xE9, 0xE2, 0x6B, 0xFC, 0xFD, 0xC9, 0x0B, 0xAF, 0xC3, 0x3D, 0xA9, 0xD7, 0x35, 0xB8, 0xEB, 0x75,
0x2F, 0xB8, 0x84, 0x57, 0xBA, 0xFB, 0xA4, 0xF3, 0x13, 0x7A, 0x6D, 0xDB, 0x49, 0xE7, 0xD6, 0xB4,
0xEB, 0xCF, 0xF4, 0x1E, 0xE0, 0xF7, 0xA1, 0x2F, 0xB2, 0x7A, 0xBD, 0xAB, 0x50, 0x0C, 0x0A, 0xF7,
0x1A, 0x70, 0xD7, 0xEB, 0x1A, 0x5C, 0xC2, 0x2B, 0x01, 0x2F, 0xF5, 0xC5, 0x1F, 0x4E, 0x3A, 0xF7,
0x65, 0x82, 0x49, 0xF2, 0x32, 0xC0, 0x8D, 0xE8, 0x6F, 0x68, 0x3A, 0xCC, 0xEB, 0x09, 0x36, 0xB9,
0x9A, 0x70, 0x8F, 0xE1, 0x75, 0x13, 0x5C, 0x00, 0x5E, 0xD6, 0x98, 0x33, 0xDD, 0x31, 0xE6, 0x1C,
0xDA, 0x3A, 0x66, 0x37, 0x26, 0x61, 0x49, 0xFC, 0x2C, 0xC0, 0xF3, 0xD1, 0x48, 0x92, 0x70, 0x0F,
0xDA, 0xE1, 0x43, 0x36, 0xB9, 0x48, 0xAF, 0xBB, 0x1E, 0x57, 0x9E, 0x77, 0xC1, 0x05, 0xE0, 0x15,
0x6D, 0x1D, 0x73, 0x46, 0xD0, 0xFC, 0xC4, 0x60, 0x71, 0x5E, 0x00, 0x7A, 0x21, 0x3A, 0x1B, 0xB5,
0xC9, 0x49, 0xEF, 0xFB, 0x37, 0x39, 0x47, 0x1E, 0x6F, 0x17, 0xD1, 0x2B, 0xC0, 0x3F, 0x8A, 0xF6,
0xE0, 0xED, 0xF5, 0xA8, 0x65, 0x47, 0xA1, 0xD8, 0xC2, 0x26, 0xB7, 0x9E, 0x4D, 0x6E, 0x0F, 0xA1,
0xFE, 0x28, 0x7A, 0x85, 0x6F, 0xFC, 0xA2, 0xFB, 0x9D, 0x7B, 0xC3, 0xBD, 0x02, 0x8E, 0xD7, 0x4D,
0x70, 0x01, 0xB8, 0xD8, 0x32, 0xAA, 0x74, 0x76, 0xF3, 0xA8, 0xBD, 0x30, 0x0E, 0x53, 0xEC, 0x67,
0x80, 0x9E, 0x87, 0xDE, 0x4A, 0x7E, 0xB4, 0x39, 0x9F, 0x00, 0xFD, 0x14, 0x6A, 0x06, 0x34, 0xF6,
0x7C, 0xEC, 0xF0, 0x0D, 0x7C, 0xE3, 0xCD, 0xE8, 0x29, 0xBC, 0xFD, 0x89, 0xF6, 0xBC, 0xD7, 0xEB,
0x12, 0x5A, 0xCB, 0x85, 0x17, 0x9B, 0x31, 0x02, 0x7A, 0x6B, 0xD3, 0xA8, 0x33, 0x2F, 0xF6, 0x84,
0xF5, 0x1E, 0xDC, 0x7B, 0xFA, 0xEA, 0x2C, 0xC0, 0x07, 0xF4, 0x99, 0x1E, 0xF3, 0x68, 0x9B, 0xE4,
0x5C, 0xDF, 0xB7, 0xB3, 0x50, 0xCC, 0xFC, 0x4D, 0x6E, 0xE3, 0xBB, 0x06, 0x7C, 0x1F, 0x1E, 0x9F,
0xF4, 0x84, 0xBB, 0xE9, 0x75, 0xE5, 0x7D, 0x17, 0x5E, 0x00, 0x2F, 0x36, 0x8D, 0xD8, 0x03, 0x77,
0x8E, 0xD8, 0xB3, 0x32, 0x1B, 0x01, 0xE0, 0x67, 0xE2, 0x67, 0x72, 0x4E, 0x11, 0xF0, 0x83, 0x68,
0x76, 0xE6, 0x89, 0x3D, 0x03, 0x74, 0x8C, 0xD9, 0xB3, 0x31, 0xC0, 0x41, 0x3C, 0x5E, 0x0C, 0xF1,
0x7A, 0x19, 0x5C, 0xC1, 0x3B, 0xE2, 0x2E, 0x25, 0xFB, 0xE9, 0x4C, 0xEB, 0x00, 0x7C, 0x07, 0xBA,
0x51, 0xEF, 0x4C, 0xAF, 0x6E, 0x72, 0xCE, 0x7B, 0x80, 0xB7, 0x65, 0x9A, 0x30, 0xC6, 0xCB, 0xEC,
0xF4, 0x6D, 0x78, 0xFB, 0x3D, 0xD3, 0xE3, 0xD2, 0xF3, 0xB5, 0xE0, 0x8E, 0xC0, 0xFB, 0x52, 0x37,
0xEE, 0x1C, 0xB6, 0x77, 0xC4, 0x18, 0xD6, 0xFF, 0x08, 0xD0, 0x8B, 0xEE, 0x3D, 0x55, 0xBC, 0x14,
0x27, 0x7F, 0xA7, 0x80, 0x19, 0x06, 0x7E, 0x41, 0xAA, 0x89, 0x52, 0xBC, 0xC4, 0x26, 0xB7, 0x00,
0x8D, 0x04, 0x81, 0xE3, 0x75, 0x0D, 0x2F, 0xEE, 0x18, 0xB6, 0xA5, 0x2E, 0x6D, 0x1C, 0xB6, 0x17,
0x25, 0x9E, 0x06, 0xF0, 0xBF, 0x7B, 0xE1, 0x83, 0xF3, 0x77, 0xE7, 0xD8, 0xCE, 0xC2, 0xD5, 0xCC,
0xDF, 0x7A, 0xD2, 0x05, 0x02, 0xDA, 0xC8, 0x77, 0x7E, 0xAC, 0x1A, 0xEE, 0x15, 0xAF, 0x2B, 0x03,
0xB8, 0xF0, 0x02, 0x78, 0xA9, 0xEE, 0x44, 0xE3, 0x03, 0xBE, 0x1A, 0x95, 0x74, 0x42, 0x13, 0x9E,
0xBF, 0x3B, 0x23, 0xFF, 0x0B, 0x78, 0x0D, 0x03, 0x68, 0x23, 0x86, 0x18, 0x09, 0xF0, 0xBA, 0x06,
0x57, 0x7F, 0x37, 0x0C, 0xDB, 0xA5, 0xF5, 0x43, 0xF6, 0xEA, 0xD8, 0x46, 0x00, 0x7C, 0xB8, 0x06,
0xDE, 0x28, 0x57, 0xAB, 0x55, 0x9B, 0xF3, 0x3E, 0xBB, 0x7C, 0xE2, 0xB0, 0xE7, 0x68, 0xBB, 0xC0,
0xB1, 0xA6, 0xC4, 0xEE, 0x5E, 0xD6, 0x98, 0x73, 0x81, 0x0D, 0x4E, 0x29, 0xF6, 0x22, 0xDD, 0x07,
0x31, 0xC2, 0x02, 0xF4, 0xBE, 0xF6, 0xB8, 0xFC, 0xEB, 0x7A, 0x5D, 0x82, 0x8B, 0x0D, 0x43, 0x65,
0x61, 0x80, 0xA1, 0x58, 0x63, 0x03, 0xBE, 0x16, 0x4D, 0xD7, 0xAB, 0xDA, 0xC8, 0xDF, 0xAF, 0x92,
0xCC, 0xB4, 0xC6, 0x1A, 0xD0, 0xF3, 0x50, 0xD8, 0x99, 0x2E, 0x8F, 0x38, 0xB9, 0xBB, 0xA7, 0x19,
0x13, 0xE8, 0x56, 0x74, 0x55, 0x83, 0xBB, 0x5E, 0xD7, 0xE0, 0x12, 0x5E, 0xAC, 0x1B, 0xB2, 0xA7,
0xD1, 0x9A, 0xC8, 0xF1, 0x01, 0x3F, 0x1A, 0xA3, 0x5C, 0x3D, 0x18, 0x39, 0x50, 0xC8, 0x03, 0x46,
0xFE, 0xEE, 0xCF, 0xE4, 0x52, 0x1A, 0x40, 0x4E, 0x05, 0xF4, 0xC1, 0x20, 0x70, 0x17, 0x5E, 0x1A,
0x40, 0xFC, 0xFE, 0x75, 0xFB, 0x68, 0xDD, 0x75, 0x73, 0xA4, 0x2D, 0x44, 0xF2, 0x2C, 0xF7, 0x75,
0x68, 0x8C, 0xFC, 0x7D, 0x92, 0x7F, 0x4F, 0x7D, 0xCE, 0x9B, 0x29, 0xAC, 0xF6, 0xBA, 0x91, 0xC6,
0xA6, 0x8A, 0x00, 0x65, 0x80, 0x21, 0x7B, 0x36, 0xA1, 0x3E, 0xE9, 0x86, 0xBB, 0xF6, 0xBA, 0x02,
0x77, 0xE1, 0xA5, 0x01, 0x8A, 0x6B, 0x5E, 0xAF, 0x93, 0x26, 0x73, 0x9C, 0x3D, 0x14, 0xD2, 0x9A,
0x32, 0xAB, 0xB6, 0x07, 0xD3, 0x7A, 0x5F, 0xBE, 0xA7, 0xB3, 0x39, 0x6F, 0x32, 0xA3, 0xCF, 0xF5,
0x2C, 0x63, 0xE3, 0xED, 0x7D, 0xD2, 0xE3, 0x1E, 0xAF, 0x4B, 0x70, 0xB1, 0xB6, 0xAA, 0x87, 0x42,
0xE7, 0x00, 0x7E, 0x2C, 0xA8, 0x35, 0x65, 0x34, 0x29, 0x3E, 0xEE, 0x2C, 0x38, 0x99, 0xD2, 0xCB,
0x3A, 0xF9, 0xBB, 0x4A, 0x66, 0xB2, 0x18, 0x00, 0xD0, 0x59, 0x78, 0xFB, 0x63, 0xC3, 0xE3, 0x35,
0xF0, 0x78, 0x5F, 0xAC, 0x19, 0xB4, 0xC7, 0x02, 0xE7, 0xD8, 0x55, 0x28, 0xCE, 0xA1, 0x13, 0xEB,
0xC8, 0xA6, 0x64, 0x9D, 0x26, 0xC5, 0x93, 0x59, 0x16, 0x28, 0xDF, 0x35, 0xC3, 0x5D, 0xE7, 0xEE,
0x66, 0x42, 0x93, 0x75, 0x7C, 0x8C, 0xF0, 0xA4, 0xF4, 0xB8, 0xC7, 0xEB, 0xC2, 0x85, 0x17, 0xAB,
0x07, 0x6D, 0xA7, 0x7D, 0xD0, 0x9E, 0xE3, 0x9B, 0x87, 0x23, 0x6D, 0x4B, 0x19, 0xBE, 0xDC, 0x90,
0x0C, 0x68, 0x4D, 0x4D, 0x53, 0xAA, 0x2E, 0xCB, 0xBA, 0x40, 0x4F, 0xD5, 0x56, 0x49, 0x61, 0x75,
0x42, 0x93, 0x75, 0x7C, 0x42, 0x7D, 0x19, 0xF0, 0xD3, 0x3A, 0xE4, 0x0D, 0x70, 0x09, 0xAF, 0x84,
0x01, 0xB6, 0xF8, 0xE6, 0x01, 0xFA, 0xB1, 0x80, 0x4E, 0xAC, 0xD9, 0xA4, 0x78, 0x37, 0xEB, 0xE2,
0xE4, 0xFB, 0x41, 0x5E, 0x2F, 0x17, 0x2E, 0xE5, 0x4C, 0x2E, 0x8F, 0x39, 0x80, 0x7F, 0x57, 0x81,
0x97, 0x43, 0xDE, 0x04, 0x97, 0xF0, 0x52, 0x8F, 0x05, 0x19, 0xE0, 0x68, 0x44, 0x27, 0x36, 0x59,
0x3A, 0x19, 0x42, 0x12, 0x95, 0xBF, 0xE7, 0x61, 0x00, 0xC0, 0xBB, 0x4D, 0x70, 0xD7, 0xEB, 0x0A,
0x7E, 0xD5, 0x80, 0x92, 0xFF, 0x38, 0x04, 0xFE, 0x5C, 0x50, 0x4F, 0xCE, 0x68, 0x48, 0xEE, 0xCF,
0x63, 0x71, 0x21, 0x55, 0x5B, 0x25, 0x7F, 0xCF, 0x63, 0x0E, 0x80, 0xF7, 0x1B, 0xE1, 0x6E, 0x82,
0x2B, 0x03, 0xB4, 0x0D, 0xD8, 0xE7, 0x7C, 0xF3, 0xD0, 0x96, 0xFA, 0x8F, 0xEC, 0xBD, 0x7B, 0xFA,
0xEF, 0x66, 0x27, 0xF6, 0xAE, 0x3C, 0x16, 0xA7, 0xC3, 0x3D, 0x2C, 0x7F, 0xCF, 0x63, 0x0E, 0xE0,
0x37, 0xB9, 0xA1, 0x5E, 0x03, 0x0F, 0xB8, 0x84, 0x17, 0xAD, 0x03, 0xF6, 0xBF, 0xFD, 0x06, 0x18,
0x77, 0x2C, 0xE3, 0xE2, 0xC1, 0xEC, 0xBF, 0xBB, 0x9D, 0x58, 0xBB, 0x29, 0x8F, 0xC5, 0x05, 0x81,
0x9B, 0xF9, 0x7B, 0x1E, 0x73, 0xB4, 0x0F, 0xD8, 0x4D, 0x46, 0xB8, 0x6B, 0xAF, 0x6B, 0x78, 0xD1,
0x7A, 0xC2, 0xB2, 0x7C, 0xF3, 0x00, 0xFF, 0x43, 0xBD, 0xFE, 0x3B, 0x29, 0xEC, 0xDC, 0x3C, 0x16,
0xE7, 0x36, 0x2A, 0xBC, 0xE5, 0xAA, 0xAE, 0xDA, 0x72, 0xD9, 0x04, 0xDB, 0x06, 0xED, 0xB9, 0xEE,
0xB7, 0xAE, 0xA0, 0x5D, 0xAF, 0x4B, 0x70, 0xA5, 0xDF, 0x9D, 0xB0, 0x7E, 0xF0, 0xB1, 0xE8, 0x1B,
0x17, 0xB3, 0x1B, 0x6B, 0x16, 0x2E, 0x79, 0xC0, 0xCB, 0x31, 0xEA, 0x55, 0x6D, 0x32, 0x83, 0xCB,
0x6B, 0x1E, 0x0D, 0x6E, 0xC2, 0x03, 0x2E, 0xE1, 0xC5, 0xED, 0x28, 0xC8, 0x00, 0xD7, 0x3D, 0x37,
0x2E, 0x35, 0xFD, 0xF7, 0xAD, 0xA3, 0xF9, 0xF4, 0xDB, 0x7D, 0xE5, 0xAA, 0x5B, 0xB2, 0xEA, 0x14,
0x36, 0x0F, 0x03, 0xB4, 0x9D, 0xB0, 0xE7, 0x07, 0x78, 0xBD, 0x02, 0x8F, 0x01, 0xFC, 0xB7, 0xAB,
0xC0, 0x7F, 0x63, 0x5C, 0x37, 0xF9, 0xFA, 0xEF, 0xF4, 0xE2, 0x96, 0xE6, 0xB1, 0x38, 0x6F, 0xAD,
0xAE, 0xC1, 0x75, 0xFE, 0x9E, 0xC7, 0x1C, 0x6C, 0x72, 0x4B, 0x91, 0x0E, 0x77, 0x13, 0x5C, 0x79,
0xBF, 0xA5, 0xDF, 0xFA, 0xC6, 0x37, 0x0F, 0xE1, 0xFE, 0x51, 0x44, 0xFF, 0x3D, 0x97, 0xDB, 0x58,
0x4F, 0x93, 0xC2, 0x57, 0xB8, 0xE4, 0x61, 0x00, 0xC2, 0xBC, 0x43, 0x87, 0xBB, 0x0E, 0x79, 0x17,
0x5C, 0xC2, 0x8B, 0xE6, 0x7E, 0xEB, 0xA3, 0x20, 0x03, 0xBC, 0x19, 0x72, 0xDD, 0xA4, 0xFB, 0xEF,
0x07, 0xF2, 0x58, 0x5C, 0x44, 0xB9, 0x9A, 0xCB, 0x1E, 0x00, 0xF4, 0x81, 0x1A, 0xF0, 0xB2, 0xD7,
0x35, 0xBC, 0x34, 0xC0, 0x1B, 0x3E, 0x16, 0xEA, 0xF4, 0x23, 0x81, 0xD7, 0x4D, 0xD5, 0x2B, 0xA7,
0x23, 0x79, 0x18, 0x20, 0xAC, 0x5C, 0xD5, 0xC5, 0x4B, 0x1E, 0x73, 0xE0, 0xED, 0x23, 0xD2, 0xE3,
0x1E, 0xAF, 0x4B, 0x70, 0xA5, 0x95, 0xFD, 0x96, 0x9F, 0x85, 0x3A, 0xFD, 0x91, 0xB0, 0x5A, 0xBD,
0x9C, 0xBF, 0xDB, 0x1F, 0xE6, 0xB1, 0x38, 0xDD, 0xA0, 0x30, 0x4B, 0x56, 0xB3, 0x70, 0xC9, 0x63,
0x0E, 0xC0, 0x3F, 0xD4, 0x1E, 0x77, 0x43, 0x5E, 0x83, 0x8B, 0x95, 0x7D, 0x96, 0x58, 0xD1, 0x67,
0x3D, 0xE2, 0x9B, 0x87, 0x4D, 0x6E, 0x43, 0x58, 0x93, 0xA2, 0x9C, 0xBF, 0xDB, 0xF2, 0xBA, 0x29,
0x55, 0x1F, 0xD0, 0x9C, 0x2C, 0x08, 0x5C, 0x1A, 0x40, 0x17, 0x2E, 0x59, 0x0D, 0xD0, 0x72, 0xC2,
0x6A, 0xF5, 0x84, 0xBB, 0xF4, 0x78, 0x59, 0x65, 0x78, 0xA9, 0x0D, 0x41, 0x06, 0x68, 0xC4, 0x00,
0x5F, 0x07, 0x96, 0xAB, 0x95, 0xEB, 0x26, 0xFB, 0xF9, 0xAC, 0x0B, 0xF4, 0xD6, 0xEA, 0x1A, 0x5C,
0x17, 0x2F, 0x59, 0xC7, 0x07, 0xFE, 0x79, 0x1D, 0xEA, 0x6E, 0xB8, 0x9B, 0xE0, 0x62, 0x79, 0x9F,
0xF5, 0xF5, 0xF2, 0xFE, 0x90, 0xDF, 0x11, 0x00, 0xDF, 0xE7, 0xBF, 0x64, 0xD4, 0xF7, 0x6C, 0xAA,
0x5C, 0xBD, 0x8C, 0xFC, 0xCD, 0x84, 0x04, 0xAB, 0x36, 0x5A, 0x53, 0x81, 0xE5, 0x6A, 0x82, 0xA1,
0x7C, 0x8F, 0xB6, 0xF4, 0xDB, 0x73, 0x80, 0xFE, 0xDC, 0x04, 0x37, 0xBC, 0x2E, 0xE1, 0xA5, 0xFA,
0x42, 0xE7, 0xE0, 0x3B, 0x7F, 0xB0, 0x52, 0xAE, 0xD6, 0x5C, 0x32, 0x56, 0x6F, 0x5D, 0x48, 0x64,
0x32, 0x9D, 0x06, 0x66, 0xB8, 0xEB, 0x8A, 0xCD, 0x2C, 0x57, 0xB3, 0x18, 0x00, 0xF0, 0x03, 0x21,
0x5E, 0xD7, 0xF0, 0xE2, 0xB7, 0xBD, 0x56, 0x78, 0x4F, 0x93, 0xEF, 0x7C, 0x2E, 0xBA, 0x12, 0x71,
0xDD, 0xF4, 0x29, 0xC9, 0x4C, 0xEA, 0x5F, 0x61, 0x84, 0x35, 0x29, 0x56, 0xB9, 0xB5, 0x7A, 0x5A,
0x03, 0xF0, 0x8D, 0xCF, 0x47, 0x9F, 0x9A, 0x1E, 0x97, 0xDF, 0xBB, 0xEB, 0x75, 0x09, 0x2E, 0x75,
0x65, 0x59, 0xAF, 0x55, 0xBF, 0xA6, 0xA1, 0x5A, 0x7B, 0xC9, 0xBD, 0x5A, 0xF6, 0x5E, 0x32, 0xAA,
0x02, 0xC6, 0xCD, 0xE4, 0x0E, 0xA5, 0x5D, 0x68, 0x90, 0xD7, 0xCD, 0xC2, 0x25, 0xED, 0xB8, 0x80,
0x1F, 0x0A, 0x08, 0x77, 0x65, 0x00, 0x17, 0x5E, 0x00, 0xFF, 0x52, 0xE4, 0xF8, 0x18, 0x60, 0x05,
0xDF, 0x79, 0x29, 0xAC, 0x6A, 0x53, 0x99, 0x5C, 0xF9, 0xAE, 0x6D, 0x73, 0xE4, 0x60, 0x01, 0x0F,
0x04, 0x74, 0x67, 0x6A, 0xCA, 0xD5, 0x34, 0x63, 0xE2, 0xE9, 0xCD, 0xA8, 0xE4, 0xEE, 0xF0, 0x5E,
0xAF, 0x4B, 0x70, 0xA9, 0x12, 0x5A, 0x11, 0x6B, 0x7C, 0xE0, 0x5F, 0xF5, 0xDC, 0xAE, 0x56, 0xCA,
0x55, 0x23, 0x93, 0xBB, 0xC4, 0x91, 0x96, 0xF8, 0x37, 0x7A, 0xD4, 0xE9, 0xFD, 0x52, 0x78, 0xBD,
0x22, 0x0A, 0x97, 0x7E, 0x29, 0xF2, 0xF7, 0xFE, 0x58, 0x0B, 0x34, 0x1E, 0x02, 0xFA, 0x37, 0xE8,
0x52, 0x4D, 0xB8, 0xD7, 0x7A, 0x5D, 0x19, 0x60, 0x69, 0xAF, 0xF5, 0x6A, 0xEC, 0xB1, 0x81, 0x5F,
0x86, 0xBE, 0x0D, 0xB9, 0x64, 0x34, 0xF3, 0xF7, 0x7F, 0xAD, 0x1D, 0xB2, 0x13, 0x5F, 0x90, 0xC6,
0x5E, 0x48, 0xC4, 0x83, 0x84, 0xF6, 0x02, 0xC0, 0xCF, 0xEB, 0xEF, 0xDC, 0x13, 0xEE, 0xDA, 0xF3,
0x12, 0xFE, 0xDB, 0xA5, 0xC7, 0xAD, 0x64, 0x1D, 0x6D, 0xE0, 0x9F, 0x09, 0xB9, 0x64, 0xF4, 0x5E,
0x37, 0x9D, 0x61, 0x67, 0xFF, 0xC5, 0x8D, 0xB0, 0x1C, 0x78, 0x80, 0xDF, 0xF0, 0x6C, 0x72, 0xEA,
0x7B, 0x77, 0x43, 0x5E, 0x82, 0x0B, 0xC0, 0xC5, 0x92, 0xE3, 0x56, 0xF2, 0x9F, 0xCA, 0xF0, 0x8D,
0xDF, 0x44, 0xB8, 0x7F, 0xE0, 0x2D, 0x57, 0x43, 0x32, 0xB9, 0x0B, 0xEC, 0xEE, 0x8B, 0xF3, 0xF2,
0x6C, 0xD4, 0x38, 0x40, 0x2F, 0x46, 0x17, 0xBC, 0xF0, 0x35, 0xE0, 0x55, 0xF8, 0x0F, 0x30, 0xC0,
0x4D, 0x51, 0x63, 0x06, 0xFE, 0x77, 0xE0, 0xD7, 0xA1, 0xEF, 0xA2, 0xF2, 0x77, 0x99, 0xC5, 0xA1,
0xCF, 0xD8, 0xE0, 0x3A, 0x53, 0x4D, 0x94, 0xE0, 0x25, 0x3C, 0xDF, 0x09, 0xF8, 0x67, 0x75, 0xC2,
0x5D, 0x7B, 0x5D, 0x7A, 0xFE, 0x3B, 0xB4, 0x2E, 0xC1, 0xF0, 0xFE, 0x47, 0x81, 0x3F, 0x10, 0x95,
0xBF, 0x1B, 0x2D, 0xE8, 0x1F, 0xD9, 0xE0, 0xBA, 0xD9, 0xE0, 0x6E, 0xC9, 0x34, 0x69, 0xC0, 0xCB,
0x00, 0xDF, 0x82, 0xBA, 0xD1, 0x8F, 0x18, 0xC1, 0x3C, 0xDA, 0xF4, 0x26, 0xA7, 0xC0, 0xDD, 0x90,
0x07, 0x7E, 0x4A, 0xDC, 0x76, 0xDC, 0xCA, 0x94, 0xB4, 0x55, 0x96, 0x41, 0xFE, 0x7E, 0xD8, 0xBC,
0x6B, 0x0B, 0xB9, 0x6E, 0x32, 0x5B, 0xD0, 0x5F, 0xB1, 0xAB, 0x3F, 0x81, 0x92, 0xFF, 0x38, 0xC9,
0x03, 0x0F, 0xF0, 0x22, 0xF4, 0x04, 0xFA, 0x2A, 0xA6, 0xD7, 0x25, 0xB8, 0x54, 0xF4, 0x99, 0x1F,
0xD7, 0x4B, 0x6C, 0x72, 0x8D, 0xA8, 0x37, 0x28, 0x8D, 0x8D, 0xE8, 0xBF, 0x5B, 0x74, 0x61, 0x5F,
0xA6, 0x39, 0xD1, 0x45, 0x89, 0x1A, 0xBB, 0x86, 0x58, 0xD1, 0x3B, 0x35, 0x87, 0xDD, 0xBD, 0x0B,
0xE0, 0x97, 0x91, 0x65, 0x82, 0x87, 0x6C, 0x72, 0x32, 0xDC, 0x95, 0xCA, 0xF0, 0x53, 0xBD, 0x4D,
0x3D, 0x53, 0xF9, 0xFE, 0x70, 0xAB, 0x9D, 0x1F, 0x20, 0xF0, 0x9D, 0xF7, 0x46, 0x65, 0x72, 0xDE,
0x36, 0xB4, 0xD1, 0x89, 0xB5, 0x31, 0xC2, 0x19, 0xCA, 0xD5, 0x17, 0xA9, 0xD8, 0x1E, 0x46, 0xF7,
0x93, 0xB7, 0xEF, 0x96, 0x22, 0x85, 0xBD, 0x9F, 0x2C, 0xEE, 0x61, 0xA0, 0x5F, 0x44, 0x67, 0x90,
0x5D, 0xEF, 0x68, 0x53, 0xBB, 0x7B, 0x75, 0x93, 0x33, 0xC0, 0x81, 0xEF, 0x99, 0xEA, 0x5D, 0xDC,
0x63, 0xA5, 0xFE, 0x01, 0x47, 0xDD, 0xA0, 0x00, 0x7E, 0x16, 0xEA, 0xD6, 0x5E, 0xD7, 0xF9, 0xBB,
0x7B, 0xDD, 0x54, 0xED, 0xBF, 0x87, 0x34, 0x24, 0x23, 0x9A, 0x14, 0xBA, 0x56, 0x0F, 0xCB, 0xE4,
0x6A, 0xBE, 0x75, 0xED, 0xF1, 0xAA, 0xD7, 0x2D, 0x81, 0xD7, 0xBB, 0x81, 0xCF, 0xF4, 0xFB, 0x85,
0xC8, 0xAF, 0x02, 0xF8, 0x86, 0x55, 0x83, 0xD6, 0x5F, 0x57, 0x0D, 0x58, 0xDF, 0x9B, 0xE0, 0x61,
0xFD, 0xF7, 0x88, 0xD6, 0x94, 0xB7, 0x56, 0x0F, 0x85, 0xAF, 0xEF, 0x75, 0xEB, 0x7B, 0xE0, 0xFF,
0xD2, 0xD4, 0x63, 0x47, 0xAE, 0x3F, 0xB7, 0x07, 0x00, 0xDE, 0xD8, 0x36, 0x60, 0x4D, 0x06, 0x81,
0x07, 0x75, 0x62, 0x43, 0x5A, 0x53, 0xA9, 0xBC, 0xEE, 0x6E, 0x72, 0xEA, 0x7B, 0x6F, 0xEA, 0xB1,
0x26, 0x81, 0xDF, 0x98, 0x1B, 0x58, 0x92, 0x81, 0xD8, 0xE0, 0xE6, 0x92, 0xBF, 0x3F, 0xC7, 0xDF,
0x6B, 0xE6, 0xAD, 0x4B, 0x98, 0xD7, 0x03, 0x5A, 0x53, 0x3E, 0x8F, 0x07, 0x6D, 0x72, 0xD5, 0xA3,
0x4D, 0x6F, 0x72, 0xEA, 0x5B, 0xBF, 0x06, 0xF8, 0x73, 0x28, 0x97, 0x2B, 0xBB, 0x24, 0xDC, 0xBE,
0x67, 0x81, 0x5F, 0x89, 0xFE, 0x09, 0x78, 0xA9, 0x4E, 0x27, 0x36, 0x76, 0xB8, 0xBB, 0xC5, 0x8B,
0x99, 0xD0, 0xE8, 0xA3, 0x4D, 0xEE, 0xF0, 0x25, 0xA0, 0xFF, 0x81, 0xE7, 0x57, 0x66, 0x5A, 0xF4,
0x4C, 0xBC, 0x7C, 0x7B, 0xBF, 0xD5, 0x4C, 0xA8, 0x1F, 0x46, 0x57, 0x8C, 0x16, 0x74, 0x0D, 0x78,
0x40, 0x93, 0x22, 0x2C, 0x7F, 0xF7, 0x1C, 0x6D, 0xD6, 0x15, 0xC0, 0x0F, 0x03, 0xDE, 0x3C, 0x13,
0x6B, 0xCF, 0x75, 0xCC, 0xE6, 0x3E, 0x6B, 0x1E, 0x06, 0x78, 0x80, 0x90, 0x3F, 0xC6, 0xF1, 0xF6,
0xA5, 0xB7, 0x4E, 0x0F, 0x4A, 0x68, 0x42, 0x36, 0xB9, 0x2F, 0xF9, 0xCE, 0x8F, 0xDD, 0xD6, 0x63,
0x3D, 0x00, 0x78, 0x3E, 0xFF, 0x07, 0x48, 0xAE, 0xA4, 0x31, 0x06, 0xA3, 0x03, 0xDB, 0x80, 0x01,
0xDA, 0x81, 0xDE, 0x8F, 0x5E, 0xE0, 0x1B, 0x1F, 0x42, 0xE7, 0x09, 0xF3, 0x8B, 0xE8, 0xBF, 0x52,
0xC0, 0x5F, 0xE4, 0x3B, 0x3F, 0xCF, 0x91, 0x36, 0x84, 0x5E, 0x20, 0x8D, 0xDD, 0xCF, 0x37, 0xDE,
0xBE, 0xE4, 0x97, 0xDC, 0xD5, 0x63, 0xB0, 0xFC, 0x5F, 0x3E, 0xF2, 0x33, 0x10, 0xEB, 0x46, 0xD1,
0xED, 0xC8, 0x90, 0xFD, 0x00, 0x00, 0x00, 0x24, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6F, 0x70, 0x79,
0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20,
0x32, 0x30, 0x31, 0x35, 0x20, 0x49, 0x4E, 0x43, 0x4F, 0x52, 0x53, 0x20, 0x47, 0x6D, 0x62, 0x48,
0x7A, 0x86, 0xDD, 0x36, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
};`

i'm using the actual Arduino IDE 1.8.15
Libraries are up to date (updated today).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.