vroland / epdiy Goto Github PK
View Code? Open in Web Editor NEWEPDiy is a driver board for affordable e-Paper (or E-ink) displays.
Home Page: https://vroland.github.io/epdiy-hardware/
License: GNU Lesser General Public License v3.0
EPDiy is a driver board for affordable e-Paper (or E-ink) displays.
Home Page: https://vroland.github.io/epdiy-hardware/
License: GNU Lesser General Public License v3.0
Not an issue but a question ... is there a reason why you beefed up the power supply / regulators in the later version of the PCB ?. Cannot believe that the display needs that much power ?
Hi,
bom.csv lists designators which are non existent on the board and also is not coherent with epaper-breakout.pdf.
Here are differences that I've found:
designator | BOM | |
---|---|---|
C6 | 4.7uF | 0.33uF |
R1 | not listed | 10kOhm |
C7 | 0.1uF | 0.33uF |
C10 | 4.7uF | 1uF |
C11 | 100pF | 1uF |
C19, C20 | 1uF | not listed |
L3, L4 | 22uH | not listed |
R8, R9 | 10kOhm | 39kOhm |
R19 | 10kOhm | not listed |
R14 | 390kOhm | 400kOhm |
R16 | 300k | not listed |
R17 | 27k | not listed |
R18 | 110kOhm | not listed |
U3 | LT1945 | L7915 |
U4 | not listed | L7815 |
Which of these sources should be treated as the ground truth?
You have blatantly copied my G6EJD weather station software without recognising me as the author as required by the GitHub licence and my licence, see here:
This software, the ideas and concepts is Copyright (c) David Bird 2018. All rights to this software are reserved.
Any redistribution or reproduction of any part or all of the contents in any form is prohibited other than the following:
I have today issues a copyright infringement take-down notice on LilyGo who included your code and now require you to do the same, or I shall raise a GitHub Take-Down notice within 5-days if you have not made the necessary changes.
The specifications seems very similar ?
Is the 2 actually the same except for the touch screen function ?
see #28 .
Would it be possible to add an example for arduino ide? That would make development for this much more accessible for many people, me included :)
So I managed to compile the demo file but it crashes. This is the output in command prompt... any ideas?
W (993) main: Hello World!
Heap summary for capabilities 0x00000800:
At 0x3ffae6e0 len 6432 free 0 allocated 6312 min_free 0
largest_free_block 0 alloc_blocks 22 free_blocks 0 total_blocks 22
At 0x3ffb2a20 len 185824 free 170644 allocated 15036 min_free 169740
largest_free_block 169740 alloc_blocks 26 free_blocks 2 total_blocks 28
At 0x3ffe0440 len 15072 free 15036 allocated 0 min_free 15036
largest_free_block 15036 alloc_blocks 0 free_blocks 1 total_blocks 1
At 0x3ffe4350 len 113840 free 113804 allocated 0 min_free 113804
largest_free_block 113804 alloc_blocks 0 free_blocks 1 total_blocks 1
At 0x4008c9dc len 79396 free 79360 allocated 0 min_free 79360
largest_free_block 79360 alloc_blocks 0 free_blocks 1 total_blocks 1
Totals:
free 378844 allocated 21348 min_free 377940 largest_free_block 169740
Heap summary for capabilities 0x00000400:
At 0x3f800000 len 4194303 free 4194264 allocated 0 min_free 4194264
largest_free_block 4194264 alloc_blocks 0 free_blocks 1 total_blocks 1
Totals:
free 4194264 allocated 0 min_free 4194264 largest_free_block 4194264
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400d8ac5 PS : 0x00060f33 A0 : 0x800d53a0 A1 : 0x3ffb8ea0
0x400d8ac5: rmt_set_tx_intr_en at C:/Users/LGT/Desktop/esp-idf/components/driver/rmt.c:378 (discriminator 2)
A2 : 0x00000003 A3 : 0x00000008 A4 : 0x3ffb13f4 A5 : 0x00000000
A6 : 0x3ffb13f4 A7 : 0xdfffffff A8 : 0x00000000 A9 : 0x00000004
A10 : 0x00000002 A11 : 0x00060f20 A12 : 0x3ffb654c A13 : 0x00000001
A14 : 0x000000fe A15 : 0xffffffbf SAR : 0x0000001d EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000000 LBEG : 0x00000000 LEND : 0x00000000 LCOUNT : 0x00000000
ELF file SHA256: 50fa5ed7bb33b1ef
Backtrace: 0x400d8ac2:0x3ffb8ea0 0x400d539d:0x3ffb8ed0 0x400d4662:0x3ffb8ef0 0x400d4540:0x3ffb8f40 0x400d424b:0x3ffb8f70
0x400d8ac2: rmt_ll_enable_tx_end_interrupt at C:/Users/LGT/Desktop/esp-idf/components/soc/esp32/include/hal/rmt_ll.h:183 (discriminator 2)
(inlined by) rmt_set_tx_intr_en at C:/Users/LGT/Desktop/esp-idf/components/driver/rmt.c:378 (discriminator 2)
0x400d539d: rmt_pulse_init at C:/xampp/htdocs/epdiy/components/epd_driver/rmt_pulse.c:42
0x400d4662: epd_base_init at C:/xampp/htdocs/epdiy/components/epd_driver/ed097oc4.c:102
0x400d4540: epd_init at C:/xampp/htdocs/epdiy/components/epd_driver/epd_driver.c:865
0x400d424b: epd_task at c:\xampp\htdocs\epdiy\examples\demo\build/../main/main.c:133
Rebooting...
This is the display for Kobo Glo HD here. I see the ED060KD1 and ED060KC1 in the README which match the resolution and pin count and should work in V5 of the board. Any reason ED060KG1(LF) is not supported or is it just left out of the list?
Is rotation going to be added to the main branch or should I just use the epdiy-rotation fork?
Hi!
I was tinkering and working on the epdiy board to display images to the e-paper display.
I know that in the API you can use epd_draw_grayscale_image() to display image with the assumption that the previous display state is all white(cleared).
Is there a way or an API that I can use, so that I can update the display from an image buffer with the assumption that the previous display is non-white? For example, the current display is showing an image from an image buffer and I wanted to update the display with a new image buffer without clearing the display.
Thanks!
Danke für das großartige Projekt!
Ich plane ein paar epdiy-PCBs machen zu lassen und dann rumzubasteln.
Wie ist der Status der PCBs unter https://github.com/vroland/epdiy/tree/master/hardware/epaper-breakout/gerbers? Nicht das ich bestelle und drei Tage später eine dolle Änderung gemacht wird...
Hi @vroland I love this and I am eager to make this thing! I plan on making it as compact as possible and also as cheap as possible, so I have some questions. Hope this is the right place to ask those...
Please don't take these questions as nitpicking on your awesome project, it's just me being OCD. I want to optimize everything as much as possible so it can be used in compact low power projects.
Hi :)
Sorry, This is not an issue but just a newbie question.
Really happy to see this repo exist, Thank you for your work. I have an old kindle touch that uses an E-Ink screen ED060SCG(LF)T1
. I wanted to use this as my DIY project and make use out of it, I'm new to this field so my searches are limited and I'm unable to find a way to connect that screen connector to my Arduino uno. It would be great if you can give me the advice to find a proper SPI interface or display driver for this model. Thank you so much.
The issue was found while using LilyGO's port of the epdiy library for Arduino/ESP32:
https://github.com/Xinyuan-LilyGO/LilyGo-EPD47
However, is seems to be applicable for the 'master' library as well.
Ok. Let's add few debug print messages near epd_init() function, as follows:
Serial.print(F("before epd_init: Free heap size: ")); Serial.println(ESP.getFreeHeap());
epd_init();
Serial.print(F("after epd_init: Free heap size: ")); Serial.println(ESP.getFreeHeap());
This is a console output for the test above running on WROVER-E with 8 MB of PSRAM:
before epd_init: Free heap size: 194912
after epd_init: Free heap size: 97856
So, the epd_init() takes about 97 Kbytes of built-in ESP32 static RAM.
Is it good or bad? The answer depends on whether or not we gonna use other functions of the ESP32 SoC...
The space remaining is Ok to bring up Wi-Fi stack or Bluetooth, but not both. 😞
The epd_init() function code contains the following:
conversion_lut = (uint8_t *)heap_caps_malloc(1 << 16, MALLOC_CAP_8BIT);
When we alter the line onto this (valid for built together with Arduino/ESP32) :
conversion_lut = (uint8_t *)heap_caps_malloc(1 << 16,
psramFound() ? MALLOC_CAP_SPIRAM : MALLOC_CAP_8BIT);
- it's getting much better now:
before epd_init: Free heap size: 194912
after epd_init: Free heap size: 163408
My sketch works fine to me when connversion LUT table is located in PSRAM. However, we yet need to:
Hi,
I was trying to upload the gerber files and the BOM to a manufacturer, as I don't have the skills to produce a PCB and to solder. Unfortunately on some parts the manufacturer was not able to determine the LCSC parts. Could you pls help me out, as I don't know which alternative parts can fit/have same pinouts? Thanks a lot!
GPIO12 (MTDI pin) on the ESP32 when pulled high on boot sets another LDO voltage:
Which will cause a brownout on the flash-chip in the wrover. We've learned that the hard way with the Hackerhotel 2019 badge project i was part of.
No idea if the display is capable of pulling the pin high on boot, but it might be interesting to verify. I have a few V2 boards (with my modifications bodged in) that aren't booting right now, will look into this.
A fix is relatively easy: burning a fusebit will set the voltage permanently. It is however unfortunate that not all wrovers require the same voltage IIRC.
Somehow the terminal example annoys the USB Serial chip so much it causes to re-enumerate on the USB bus 😎
Tried it with the Arduino IDE serial terminal, screen and IDF monitor. All three are gloriously killed 👍
Could be a shitty driver on my Linux Mint, could be a bad chip. Haven't seen this behaviour before in other USB serial chips, this is my first board with the CH330.
Hi,
awesome project.
i see that Q1 always open. Better add transistor to ground and SMPS_CTRL. Other pin of R1 connect to pin 2 of Q1.
I make a little bit changes in layout/components and all works fine.
Best wishes
I just got a device to run the demo.
However, I can't get the terminal to run. I assumed that it's the same method of building and running, and then writing stuff to /dev/ttyUSB0
(e.g. using script -f /dev/ttyUSB0
), but no joy, reading from UART_NUM_1
returns with 0.
Should I have built something differently?
I'm using the rev2/3 config
Thanks!
Hi,
I'm trying to build a v3 pcb. In bom, however, there are cosmic quantities entered for the parts.
For example:
General Purpose Amplifiers General Purpose 2 3V ~ 32V, ±1.5V ~ 16V 700kHz 0.3 V/us SOIC-8_150mil RoHS
has quantity of 20.
As far as I noticed that bom is not for one board and more like for 20? Is that correct?
And also is bom created for v3 board or just v2 board?
I started a EPDiy Fork with the mission to add sofware rotation to the Epaper.
I want to leave this ticket open to document the challenges I go into but also to ping @vroland and other developers that have more experience than me with this library in case I get stuck.
About 3 I'm not sure if it's the best to do it in epd_copy_to_framebuffer or on a helper function that will rotate the pixels before sending it to the mentioned function.
0 Default landscape (As is now)
1 90° clockwise Portrait
2 180° inverted landscape
3 270° inverted Portrait
uint8_t epd_get_rotation();
void epd_set_rotation(uint8_t rotation);
While testing the new displays I found out that image on ED060XD4 looks grainy. Have you encountered such behavior on your displays, what do you think might cause this? This only happends on ED060XD4, the XC6 is perfect.
https://www.dropbox.com/s/kylm27qvu3jc300/Photo%2002.12.2020%2010%2030%2003.jpg?dl=0
Hello,
I'm having issues flashing projects to the board. Sometimes i can, then after a while i can no longer flash, i get error: "A fatal error occurred: Timed out waiting for packet content"
Would you happen to know any solution? I was thinking about replacing the HL-340
thanks
I am working on low power optimizations for my board and I was able to go just below 30uA in deep sleep. Probably more can be done but I'm quite happy with this result.
Changes required:
Hello,
I just wanted to ask, is it really bad to connect the display while the board is powered on? it causes insta-damage? thanks
I can't find much information on this. Just some pin differnences and one additional pin GPIO15 is now used. Can you elaborate on that please? :)
I made this a while ago and kinda forgot about it :) Please take a look, maybe it will be useful.
https://www.dropbox.com/s/8g3380bcyct6b7w/displays.xlsx?dl=0
Messed with RV1 and now i've got a completely black screen 😆 , any hints on calibrating RV1 and also recover the eink to normal?
No this is worse. I blew up the opamp... Replaced it and it now works again. Rotating RV1 too close somewhere apparantly blew op U7.
Regarding the opamp i've submitted a PR to properly close the second opamp, it could be related but not sure.
Hi,
I soldered a v4 board and tested it without the ePaper display connected. Unfortunately, part U2 (LT1945) burnt down between the pins 6 & 7 (top left). As I'm not that experienced at SMD soldering, I gave it a new try, soldered a new board and tested every single connection, it was all fine. However, the part burnt down at exactly the same place.
All parts were ordered from LCSC, LT1945 from AliExpress (https://www.aliexpress.com/item/32863876207.html?spm=a2g0s.9042311.0.0.290d4c4dfx2shh)
Has someone else faced this issue?
Is testing without the ePaper display recommended?
At the 2nd try I didn't solder the esp32 for now. Could this be the problem?
Thanks!
Hi,
I'm trying to calibrate voltage. Between VCOM pad and GND there is constant voltage of 0.391V. I haven't flashed esp yet - just plugged to usb.
Hi and thanks for good project, got the following issue:
Midle 1/3 part of screen is filled using last 1/3 part of image: https://photos.app.goo.gl/NrU67cK5Pw3RJGog6
build board using gerber files from June 04 2020
If change
dev->fifo_conf.tx_fifo_mod = 1;
to
dev->fifo_conf.tx_fifo_mod = 0;
or play with clock dividers i managed to get 2 dragons. But can't get correct image
Can you share your email?
We are Lilygo Company.
I want to cooperate with you on some projects related to ink screen.
Nice work @vroland ! I am trying to fabricate one board and get the dusty ED060SC4
part working.
Are you able to generate the BOM so that it's easier to have the parts ordered?
Or if you have a spare one, i wont mind buying it as well! My previous attempt to design a board that drinks the e-ink failed and your board will be useful to help me play around, test the e-ink displays to make sure it's working before making a revision based off your design. :)
I had great fun already using the Serial Terminal example, and with a bit of foolishness i added a second USB serial to route my PC keyboard from one terminal into the e-ink terminal session (by connecting the second USB-Serial TX line to the RX of the CH330). One problem arose when trying to update the board: the second usb-serial causes the communication to fail.
I'd like to have a proper input method on the ESP32. Could be as simple as just using a second serial port (they can be routed to any GPIO) and then pushing them towards the regular serial output. That will also allow some control options, like the classical terminals used to have. Alternatively a PS2 port, Bluetooth host or USB host could also work. I don't think we have the GPIOs left for a full keyboard matrix (i think you'd need about 20 GPIOs to do it).
Any thoughts on what you'd like to do in terms of input devices? We could make the expansion header a bit more useful by adding in as much of the GPIOs as we can.
(besides this hardware/software upgrade the terminal code would need a pretty decent upgrade too, to get to 80columns width, work with a cursor, stuff like VIM would be useful to have. But the first tests were really pleasing!)
Heck at some point i'd love to see the ESP32 do an SSH into my desktop :P (or maybe use a seperate ESP32 for that, so the current chip can focus on being a terminal).
SSH on ESP32: https://github.com/ewpa/LibSSH-ESP32
When I run demo for like 10 minutes and then I run dragon, the text (inverted) stays slightly visible on dragons wing. It needs tens of refreshes before the burned text disappears, so at this point it's not useful for static content like a dashboard. I tried to play with the refresh cycle but to no avail. I think what's missing here is to add an inverted image to the refresh cycle(as can be seen on the waveshare displays or on kindle for example). Maybe single inverted image can replace the current 3x black/white flash and make the refresh even faster.
Also, sorry to keep spamming issues!
Hi , @vroland
We are making a 4.7-inch ink screen board. It just happens that the driver you write is suitable for our screen. I have changed it to the Arduino method. It is suitable for novices who are not familiar with IDF. Link:
https://github.com/Xinyuan-LilyGO/LilyGo-EPD47
We want you to help us improve this product, do you have any intentions? If you like, we will send you the board for free, please send your address to this mailbox [email protected], thank you
Feel free to post useful resources, suggestions or show off your projects here. Older comments of this nature can be found in #21 .
Hello,
This looks really good. How many fps can it pull ? Could it be suitable for office work like programming?
I want to make my own font file, but even with your example practice, the font Successfully generated,but can't run in esp32. I'll revise it according to the guide you gave "fontconvert.py" The exercise generated a custom font file, The firmware generated by compilation will report an error when running .can you give us some suggestions?
This is my generation step:
FiraCode-Regular.ttf Symbola.ttf the same as your example.
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:9720
ho 0 tail 12 room 4
load:0x40080400,len:6352
entry 0x400806b8
Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x4000c46c PS : 0x00060130 A0 : 0x800d0e74 A1 : 0x3ffb1f70
A2 : 0x00000000 A3 : 0xffffffff A4 : 0x0003f480 A5 : 0x00000000
A6 : 0x00000001 A7 : 0x00003f48 A8 : 0x00000000 A9 : 0x3ffb1f40
A10 : 0x4008ed10 A11 : 0x000001e0 A12 : 0x00000000 A13 : 0x3ffd1efc
A14 : 0x00060120 A15 : 0x00000000 SAR : 0x0000001d EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4000c46c LEND : 0x4000c477 LCOUNT : 0x00003f47
Backtrace: 0x4000c46c:0x3ffb1f70 0x400d0e71:0x3ffb1f80 0x400d4617:0x3ffb1fb0 0x40088d2d:0x3ffb1fd0
This is another API about ink screen project, With the ability to read and display JPG, BMP, PNG,
for reference
https://github.com/m5stack/M5EPD/blob/main/src/M5EPD_Canvas.cpp
In the BOM, the 200k potentiometer is discontinued. I can't find a replacement on LCSC either I'm afraid. Ordered them off AliExpress now and Western vendors have Bourns 3x3 pots so it's not impossible to get, but do you know of a replacement part on LCSC perhaps for other future builders?
It's the EVM3ESX50B25 btw
I just received my ED097TC2 panel to replace the broken ED097OC4. While it appears to be of better contrast it is also a lot more "grainy" (see right side of attached picture). Any suggestions what I can tweak to get rid of this?
Fun fact - if I place my hand on the display during update (placed it o the left side) the grain appears to be much reduced.
Hey,
I was soldering a v4 board today i finished it then when i powered it on i saw that there was around 5v where there should have been 3.3v, and also it seemed that ground and 3.3v were shorted. After some testing i think the mistake was that i soldered the D4 diode the wrong way (it's the one that is direclty connected to +15v on one side and to one of the inductors on the other)
I corrected that and now 3.3v and ground are no longer shorted but still i'm getting around 4-5v where there should be 3.3v. THe usb to uart transceiver is not recognized by the pc and i cannot flash the esp32 with an external usb to uart board. should i just discard the board? i also tried swapping the MCP1700 LDO
thanks
I was reading stuff to fall asleep last night....
epdiy/components/epd_driver/font.c
Line 284 in 8b19eb3
should be
uint8_t bg = props.bg_color;
because the null pointer check some lines up.
epdiy/components/epd_driver/font.c
Line 318 in 8b19eb3
Why first assign something and then check for null? Should be swapped.
Hello,
I got the board, i'm trying to solder it. could you tell me if the inductors have polarity and so how to solder them? thanks
Hi @vroland,
thanks for the cool project! Looks very nice :) I would like to build a board too!
I was wondering which parts list to use:
I see that in the newest version of the PCB a jumper was added, I guess that one could be added into the parts list too. Or did I get this wrong?
Or should I refer to the schematics and get the required parts from there?
Thanks a lot!
Would it be possible to get the .pcb and .sch files that correspond to the latest gerbers updated in the repo?
Hi @vroland!
First of all, I'm really excited for this project and really one of the thing I've been searching for. This is awesome!
I'm currently, building the newest design based on the current gerbers file on hardware/epaper-breakout/gerbers
and am also trying to understand the schematics and comparing it to other available e-paper display driver like the Inkplate6 and Waveshare's IT8951. In the design I saw you use LT1945, L7915 and L7815 to supply the necessary power to the e-paper display and I believe you also mentioned that the design is taken from https://hackaday.io/project/21607-paperback-a-desktop-epaper-monitor.
My question are,
Thanks again!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.