Difference between revisions of "Template:Raspberry Pi Guides for SPI e-Paper"

From Waveshare Wiki
Jump to: navigation, search
 
(126 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Users Guides of Raspberry Pi =
+
=Users Guides of Raspberry Pi=
 
==Hardware connection==
 
==Hardware connection==
 
If the e-Paper you have is the HAT version which has 40pin GPIO, you can directly attach the e-Paper HAT on Raspberry Pi, otherwise, you can connect your e-Paper to Raspberry Pi by 8pins cable provided.
 
If the e-Paper you have is the HAT version which has 40pin GPIO, you can directly attach the e-Paper HAT on Raspberry Pi, otherwise, you can connect your e-Paper to Raspberry Pi by 8pins cable provided.
:To connect the e-Paper, you can following the table below
+
:To connect the e-Paper, you can following the table below:
 
{|border=1; style="width:600px;" align="center"
 
{|border=1; style="width:600px;" align="center"
 
|+Connect to Raspberry Pi
 
|+Connect to Raspberry Pi
Line 31: Line 31:
  
 
==Enable SPI interface==
 
==Enable SPI interface==
:The communication interface of e-Paper is SPI, to use it, we should firstly enable SPI interface of SPI
+
 
:Open terminal of Raspberry Pi, and open configuration by the following command
+
: The communication interface of e-Paper is SPI, to use it, we should firstly enable the SPI interface.
 +
: Open terminal of Raspberry Pi, and open the configuration by the following command:
 
  sudo raspi-config
 
  sudo raspi-config
 
:Choose Interfacing Options -> SPI -> Yes
 
:Choose Interfacing Options -> SPI -> Yes
:[[File:RPI open spi.png]]
+
: Restart Raspberry Pi
:Restart Raspberry Pi
 
 
  sudo reboot
 
  sudo reboot
 +
[[File:RPI open spi.png]]<br/>
 +
 
==Install libraries==
 
==Install libraries==
<font color=red>
+
<div class="cautionSec">Note: If you use the Bullseye image, please use "apt" instead of "apt-get" to install libraries, the Bullseye image could only support "ptyhon3".</div>
Note: If you use the Bullseye image, please use apt instead of apt-get to install libraries, the Bullseye image could only support ptyhon3.
 
 
</font>
 
</font>
 
<br />
 
<br />
Open terminal of Raspberry Pi and run the following commands to install corresponding libraries:
+
Open the terminal of Raspberry Pi and run the following commands to install corresponding libraries:
*Install BCM2835 libraries
+
*Install BCM2835 libraries:
 
<pre>
 
<pre>
#Open the Raspberry Pi terminal and run the following command
+
#Open the Raspberry Pi terminal and run the following command
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz
+
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.68.tar.gz
+
tar zxvf bcm2835-1.71.tar.gz
cd bcm2835-1.68/
+
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
+
sudo ./configure && sudo make && sudo make check && sudo make install
# For more information, please refer to the official website: http://www.airspayce.com/mikem/bcm2835/
+
# For more information, please refer to the official website: http://www.airspayce.com/mikem/bcm2835/
 
</pre>
 
</pre>
*Install WiringPi libraries
+
*Install WiringPi libraries:
 
  #Open the Raspberry Pi terminal and run the following command
 
  #Open the Raspberry Pi terminal and run the following command
 
  sudo apt-get install wiringpi
 
  sudo apt-get install wiringpi
Line 68: Line 69:
 
  # Run gpio -v and version 2.60 will appear. If it does not appear, it means that there is an installation error
 
  # Run gpio -v and version 2.60 will appear. If it does not appear, it means that there is an installation error
 
</pre>
 
</pre>
*Install Python2 libraries
+
*Install Python2 libraries:
 
<pre>
 
<pre>
 
  sudo apt-get update
 
  sudo apt-get update
Line 77: Line 78:
 
  sudo pip install spidev
 
  sudo pip install spidev
 
</pre>
 
</pre>
*Install Python3 libraries
+
*Install Python3 libraries:
 
<pre>
 
<pre>
 
sudo apt-get update
 
sudo apt-get update
Line 88: Line 89:
  
 
==Download demo codes==
 
==Download demo codes==
Open the terminal of Raspberry Pi and clone demo codes by the following commands:
+
Open the Raspberry Pi terminal and execute:<br/>
 +
Method 1: Download from Waveshare:
 
<pre>
 
<pre>
sudo git clone https://github.com/waveshare/e-Paper
+
sudo apt-get install p7zip-full
 +
wget  https://www.waveshare.com/w/upload/3/39/E-Paper_code.7z
 +
7z x E-Paper_code.7z -O./e-Paper
 +
cd e-Paper/RaspberryPi_JetsonNano/
 
</pre>
 
</pre>
 +
Method 2: Use GitHub
 +
<pre>
 +
git clone https://github.com/waveshare/e-Paper
 +
cd e-Paper/RaspberryPi_JetsonNano/
 +
</pre>
 +
 
==Examples==
 
==Examples==
 
===C===
 
===C===
*Enter the folder of C examples
+
[[File:RPI Guide for e-Paper02.png|thumb|right]]
 +
Open main. c to select the screen of the corresponding size.
 
<pre>
 
<pre>
cd ~/e-Paper/RaspberryPi_JetsonNano/
 
 
cd c
 
cd c
</pre>
 
*Modify the main.c file for corresponding e-Paper
 
<pre>
 
 
sudo nano examples/main.c
 
sudo nano examples/main.c
 
</pre>
 
</pre>
{{#switch:{{FULLPAGENAME}}
+
If you are using 2.7inch e-paper, then remove the // in front of the EPD_2IN7_test() function, then press Ctrl+c, press the Y key and Enter to save and exit, as shown in the figure: (The picture may not be updated. Timely, subject to the specific demo).<br/>
|1.54inch e-Paper F Pi=
+
Supporting types:<br/>
 +
;1.02inch(128 × 80):
 +
EPD_1in02d_test():Example for 1.02inch e-Paper/1.02inch e-Paper Module
 +
 
 +
;1.54inch(1.54inch e-paper c:152 × 152,others:200 × 200):
 +
EPD_1in54_test(): Example for 1.54inch e-paper V1(Balck/<font color="#DCDCDC">White</font>): This version was discontinued.<br />
 +
EPD_1in54_V2_test(): Example for 1.54inch e-paper V2(Balck/<font color="#DCDCDC">White</font>): Purchase date later than November 2019 is the V2 version, the current shipping version has the V2 logo on the back.<br />
 +
EPD_1in54b_test(): Example for 1.54inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). It is currently out of production.<br />
 +
EPD_1in54b_V2_test(): Example for 1.54inch e-Paper B V2 (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date later than November 2019 is the V2 version, the current shipping version has the V2 logo on the back;<br />
 +
EPD_1in54c_test(): Example for 1.54inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); <br />
 +
 
 +
;1.64inch(168 × 168):
 +
EPD_1in64g_test(): Example for 1.64inch e-paper G (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>)<br/>
 +
 
 +
;2.7inch(264 × 176):
 +
EPD_2in7_test(): Example for 2.7inch e-paper(Black/<font color="#DCDCDC">White</font>);<br />
 +
EPD_2in7b_test(): Example for 2.7inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>);<br />
 +
EPD_2in7b_V2_test(): Example for 2.7inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than February 2021 is the V2 version, the current shipping version has the V2 logo on the back;<br />
 +
 
 +
;2.9inch (296 × 128):
 +
EPD_2in9_test(): Example for 2.9inch e-paper (Black/<font color="#DCDCDC">White</font>), this version was discontinued.<br />
 +
EPD_2in9_V2_test(): Example for 2.9inch e-paper V2(Black/<font color="#DCDCDC">White</font>); The purchase date is later than December 2020 is the V2 version, the current shipping version has the V2 logo on the back;<br />
 +
EPD_2in9bc_test(): Example for 2.9inch e-paper B(Balck/<font color="#DCDCDC">White</font>/Red) and 2.9inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FFD700">Yellow</font>);<br />
 +
EPD_2in9b_V3_test(): Example for 2.9inch e-paper B V3 (Balck/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); Purchase date later than July 2020 is the V3 version, the current shipping version has the V3 logo on the back;<br />
 +
EPD_2in9d_test(): Example for 2.9inch e-paper D(Black/<font color="#DCDCDC">White</font>);
  
|5.65inch e-Paper Pi=
+
;2.13inch(2.13inch e-Paper:250 × 122,others:212 × 104):
[[File:RaspberryPi_guides_for_5in65.png|400px]]
+
EPD_2in13_test(): Example for 2.13inch e-paper V1(Black/<font color="#DCDCDC">White</font>), this version was discontinued.<br />
|#default=
+
EPD_2in13_V2_test(): Example for 2.13inch e-paper V2(Black/<font color="#DCDCDC">White</font>). The purchase date is later than May 2019, the V2 version is currently discontinued, and the V2 logo is affixed on the back;<br />
: For example, if you want to update a 2.7inch e-Paper/2.7inch e-Paper HAT, you should modify the main.c file, uncomment the line EPD_2in7_test(), comment others, and save.
+
EPD_2in13_V3_test(): Example for 2.13inch e-paper V3(Black/<font color="#DCDCDC">White</font>) This is the current version with sticker V3 on the backside (2020-07-29);<br />
:[[File:E-paper_rpi_change_main.png|500px]]
+
EPD_2in13bc_test():Example for 2.13inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 2.13inch e-paper C(Blackj/<font color="#DCDCDC">White</font>/Yellow);<br />
}}
+
EPD_2in13b_V3_test():Example for 2.13inch e-paper B V3(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)Purchase date later than April 2020 is the V3 version, the current shipping version has the V3 logo on the back;<br/>
*Compile codes
+
EPD_2in13d_test(): Example for 2.13inch e-paper D(Black/<font color="#DCDCDC">White</font>);<br />
<pre>
 
sudo make clean
 
sudo make
 
</pre>
 
*Try to run the example
 
<pre>
 
sudo ./epd
 
</pre>
 
  
====Supports type====
+
;2.66inch (152 × 296):
;1.02inch(128×80):
+
EPD_2in66_test(): Example for 2.66inch e-Paper (Black/<font color="#DCDCDC">White</font>);<br />
EPD_1in02d_test():Example for 1.02inch e-Paper/1.02inch e-Paper Module
+
EPD_2in66b_test(): Example for 2.66inch e-Paper B (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); <br />
  
;1.54inch(1.54inch e-paper c:152×152,others:200×200):
+
;3inch (400 × 168):
EPD_1in54_test(): Example for 1.54inch e-paper V1(Balck/White): This version is stopped production which can be bought before 2019-11-22;<br />
+
EPD_3in0g_test(): Example for 3inch e-Paper G(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>); <br />
EPD_1in54_V2_test(): Example for 1.54inch e-paper V2(Balck/White): This is the current version that can be bought now (2020-07-29). The e-Paper has V2 sticker on the backside. <br />
 
EPD_1in54b_test(): Example for 1.54inch e-paper B(Black/White/Red);<br />
 
EPD_1in54b_V2_test(): Example for 1.54inch e-Paper B V2 (Black/White/Red);<br />
 
EPD_1in54c_test(): Example for 1.54inch e-paper C(Black/White/Red); <br />
 
  
;2.7inch(264×176):
+
;3.52inch (360 × 240):
EPD_2in7_test()Example for 2.7inch e-paper(Black/White);<br />
+
EPD_3in52_test(): Example for 3.52inch e-Paper (Black/<font color="#DCDCDC">White</font>); <br />
EPD_2in7b_test(): Example for 2.7inch e-paper B(Black.White/Red);<br />
 
EPD_2in7b_V2_test(): Example for 2.7inch e-paper B V2(Black.White/Red);<br />
 
  
;2.9inch(296×128):
+
;3.7inch (280 × 480):
EPD_2in9_test(): Example for 2.9inch e-paper(Black/White);<br />
+
EPD_3in7_test(): Example for 3.7inch e-Paper(Black/<font color="#DCDCDC">White</font>); <br />
EPD_2in9_V2_test(): Example for 2.9inch e-paper V2(Black/White);<br />
 
EPD_2in9bc_test(): Example for 2.9inch e-paper B(Balck/White/Red) and 2.9inch e-paper C(Black/White/Yellow);<br />
 
EPD_2in9b_V3_test(): Example for 2.9inch e-paper B V3 (Balck/White/Red);<br />
 
EPD_2in9d_test(): Example for 2.9inch e-paper D(Black/White);
 
  
;2.13inch(2.13inch e-Paper:250×122,others:212×104):
+
;4.01inch (640 × 400):
EPD_2in13_test()Example for 2.13inch e-paper V1(Black/White), this version is stopped production and it can be bought before 019-05-15;<br />
+
EPD_4in01_test(): Example for the 4.01inch e-Paper HAT (F) (Black/<font color="#DCDCDC">White</font>/<font color="#008000">Green</font>/<font color="#0000FF">Blue</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>/<font color="#FFCC00">Orange</font>);<br />
EPD_2in13_V2_test(): Example for 2.13inch e-paper V2(Black/White) This is the current version with sticker V2 on the backside (2020-07-29);<br />
 
EPD_2in13_V3_test(): Example for 2.13inch e-paper V3(Black/White) This is the current version with sticker V3 on the backside (2020-07-29);<br />
 
EPD_2in13bc_test():Example for 2.13inch e-paper B(Black/White/Red)and 2.13inch e-paper C(Blackj/White/Yellow);<br />
 
EPD_2in13b_V3_test():Example for 2.13inch e-paper B V3(Black/White/Red)<br />
 
EPD_2in13d_test(): Example for 2.13inch e-paper D(Black/White);<br />
 
  
;2.66inch (152 x 296):
+
;4.2inch(400 × 300):
EPD_2in66_test(): Example for 2.66inch e-Paper (Black/White);<br />
+
EPD_4in2_test(): Example for 4.2inch e-paper(Black/<font color="#DCDCDC">White</font>);<br />
EPD_2in66b_test(): Example for 2.66inch e-Paper B (Black/White/Red); <br />
+
EPD_4in2bc_test()Example for 4.2inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>);<br />
 +
EPD_4in2b_V2_test()Example for 4.2inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than November 2020, it is the V2 version, and the current shipping version has the V2 logo on the back;<br />
  
;3.7inch (280 x 480):
+
;5.65inch (600 × 558):
EPD_3in7_test(): Example for 3.7inch e-Paper(Black/White); <br />
+
EPD_5in65f_test(): Example for for 5.65inch e-Paper F (Black/<font color="#DCDCDC">White</font>/<font color="#008000">Green</font>/<font color="#0000FF">Blue</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>/<font color="#FFCC00">Orange</font>);
  
;4.01inch (640x400):
+
;5.83inch(600 × 448):
EPD_4in01_test(): Example for the 4.01inch e-Paper HAT (F);<br />
+
EPD_5in83_test(): Example for 5.83inch e-paper(Black/<font color="#DCDCDC">White</font>), It is currently out of production.<br />
 +
EPD_5in83_V2_test()Example for 5.83inch e-paper V2(Black/<font color="#DCDCDC">White</font>), The purchase date is later than December 2020 is the V2 version, the current shipping version, with the V2 logo on the back.<br />
 +
EPD_5in83bc_test(): Example for 5.83inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 5.83inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FFD700">Yellow</font>);<br />
 +
EPD_5in83b_V2_test(): Example for 5.83inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than August 2020 for the V2 version, the current shipping version, with the V2 logo on the back.<br />
  
;4.2inch(400×300):
+
;7.3inch (800 × 480):
EPD_4in2_test(): Example for 4.2inch e-paper(Black/White);<br />
+
epd_7in3g_test.py: Example for 7inch3 e-paper G (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>).
EPD_4in2bc_test(): Example for 4.2inch e-paper B(Black/White/Red);<br />
 
EPD_4in2b_V2_test(): Example for 4.2inch e-paper B V2(Black/White/Red);<br />
 
  
;5.65inch (600x448):
+
;7.5inch(V1:640 × 384, V2:800 × 480):
EPD_5in65f_test(): Example for for 5.65inch e-Paper F (Seven-color);
+
EPD_7in5_test(): Example for 7.5inch e-paper(Black/<font color="#DCDCDC">White</font>). The purchase date is earlier than 2019-12-07 as the V1 version, which is currently discontinued.<br />
 +
EPD_7in5bc_test(): For example for 7.5inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 7.5inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FFD700">Yellow</font>), The purchase date later than 2019-12-07 is the V2 version, and the current shipping version has the V2 logo on the back;<br />
 +
EPD_7in5_V2_test(): Example for 7.5inch e-paper V2(Black/<font color="#DCDCDC">White</font>). The purchase date of 7.5inch e-paper B is earlier than 2019-12-07, which is the V1 version, which is currently discontinued, and 7.5inch e-paper C is normally available.<br/>
  
;5.83inch(600×448):
+
EPD_7in5bc_V2_test(): Example for 7.5inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); The purchase date is later than 2019-12-07 is the V2 version, with the V2 logo on the back; the purchase date is later than March 2021 is the V3 version, the current 7.5inch e-paper B shipping version, with the V3 logo on the back, the same use this program;<br />
EPD_5in83_test(): Example for 5.83inch e-paper(Black/White);<br />
 
EPD_5in83_V2_test(): Example for 5.83inch e-paper V2(Black/White);<br />
 
EPD_5in83bc_test(): Example for 5.83inch e-paper B(Black/White/Red)and 5.83inch e-paper C(Black/White/Yellow);<br />
 
EPD_5in83b_V2_test(): Example for 5.83inch e-paper B V2(Black/White/Red)<br />
 
  
;7.5inch(V1:640×384, V2:800×480):
+
;7.5inch (880 × 528)
EPD_7in5_test()Example for 7.5inch e-paper(Black/White), this version is stopped production and it can be bought before 2019-12-07;<br />
+
EPD_7in5_HD_test(): Example for 7.5inch e-Paper HD (Black/<font color="#DCDCDC">White</font>); <br />
EPD_7in5bc_test(): Example for 7.5inch e-paper B(Black/White/Red)and 7.5inch e-paper C(Black/White/Yellow),7.5inch e-paper B V1 version is stop production and it can be bought before 2019-12-07;<br />
+
EPD_7in5b_HD_test(): Example for 7.5inch e-Paper B HD (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); <br />
EPD_7in5_V2_test()Example for 7.5inch e-paper V2(Black/White), This is the current version with V2 sticker on the backside (2020-07-29)<br />  
 
EPD_7in5bc_V2_test():Example for 7.5inch e-paper B V2(Black/White/Red); This is the current version with V2 sticker on the backside. (2020-07-29);<br />
 
  
;7.5inch (HD: 880 x 528)
+
<font backgound=white; color=#DD1223>*Note: The above time is for reference only, please refer to the screen logo for the specific version.</font><br/>
EPD_7in5_HD_test(): Example for 7.5inch e-Paper HD (Black/White); <br />
+
*Recompile, the compilation process may take a few seconds<br/>
EPD_7in5b_HD_test(): Example for 7.5inch e-Paper B HD (Black/White/Red); <br />
+
<pre>
 +
Return to the c directory and run the following command
 +
make clean
 +
make
 +
sudo ./epd
 +
</pre>
  
 
===Python===
 
===Python===
 
<div class="cautionSec">PS: The system of the Bullseye branch only supports Python3. </div>
 
<div class="cautionSec">PS: The system of the Bullseye branch only supports Python3. </div>
*Enter the folder of python code
+
*Enter the folder of python code.
 
<pre>
 
<pre>
 
cd python/examples
 
cd python/examples
 
ls -al
 
ls -al
 
</pre>
 
</pre>
:[[File:E-paper_rpi_change_python1.png|500px]]
+
:[[File:E-paper_rpi_change_python012.png|500px]]
*Run the responding example
+
*Run the responding example.
 
{{#switch:{{FULLPAGENAME}}
 
{{#switch:{{FULLPAGENAME}}
 
|4.01inch e-Paper HAT (F)=
 
|4.01inch e-Paper HAT (F)=
Line 219: Line 231:
 
</pre>
 
</pre>
 
}}
 
}}
 
+
Supporting types:<br/>
====Supports type====
 
 
;1.02inch(128×80):
 
;1.02inch(128×80):
 
epd_1in02_test.py:Example for 1.02inch e-Paper/1.02inch e-Paper Module
 
epd_1in02_test.py:Example for 1.02inch e-Paper/1.02inch e-Paper Module
  
 
;1.54inch(1.54inch e-paper c:152×152,others:200×200):
 
;1.54inch(1.54inch e-paper c:152×152,others:200×200):
epd_1in54_test.py: Example for 1.54inch e-paper V1(Balck/White): This version is stopped production which can be bought before 2019-11-22;<br />
+
epd_1in54_test.py: Example for 1.54inch e-paper V1(Balck/<font color="#DCDCDC">White</font>): This version is stopped production which can be bought before 2019-11-22;<br />
epd_1in54_V2_test.py: Example for 1.54inch e-paper V2(Balck/White): This is the current version which can be bought now (2020-07-29). The e-Paper has V2 sticker on the backside. <br />
+
epd_1in54_V2_test.py: Example for 1.54inch e-paper V2(Balck/<font color="#DCDCDC">White</font>): This is the current version which can be bought now (2020-07-29). The e-Paper has V2 sticker on the backside. <br />
epd_1in54b_test.py: Example for 1.54inch e-paper B(Black/White/Red);<br />
+
epd_1in54b_test.py: Example for 1.54inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). It is currently out of production.<br />
epd_1in54b_V2_test.py: Example for 1.54inch e-paper B V2(Black/White/Red);<br />
+
epd_1in54b_V2_test.py: Example for 1.54inch e-paper B V2 (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than April 2020 is the V2 version, the current shipping version has the V2 logo on the back;<br />
epd_1in54c_test.py: Example for 1.54inch e-paper C(Black/White/Red);br />
+
epd_1in54c_test.py: Example for 1.54inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>).<br />
 +
 
 +
;1.64inch(168 × 168):
 +
epd_1in64g_test.py: Example for 1.64inch e-paper G (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>)<br/>
  
 
;2.7inch(264×176):
 
;2.7inch(264×176):
epd_2in7_test.py: Example for 2.7inch e-paper(Black/White);<br />
+
epd_2in7_test.py: Example for 2.7inch e-paper(Black/<font color="#DCDCDC">White</font>);<br />
epd_2in7b_test.py: Example for 2.7inch e-paper B(Black.White/Red);<br />
+
epd_2in7b_test.py: Example for 2.7inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>);<br />
epd_2in7b_V2_test.py: Example for 2.7inch e-paper B V2(Black.White/Red);<br />
+
epd_2in7b_V2_test.py: Example for 2.7inch e-paper B V2 (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than February 2021 is the V2 version, the current shipping version has the V2 logo on the back;<br />
  
 
;2.9inch(296×128):
 
;2.9inch(296×128):
epd_2in9_test.py: Example for 2.9inch e-paper(Black/White);<br />
+
epd_2in9_test.py: Example for 2.9inch e-paper(Black/<font color="#DCDCDC">White</font>); It is currently out of production.<br />
epd_2in9_V2_test.py: Example for 2.9inch e-paper V2(Black/White);<br />
+
epd_2in9_V2_test.py: Example for 2.9inch e-paper V2(Black/<font color="#DCDCDC">White</font>); The purchase date is later than December 2020 is the V2 version, the current shipping version, with the V2 logo on the back.<br />
epd_2in9bc_test.py: Example for 2.9inch e-paper B(Balck/White/Red) and 2.9inch e-paper C(Black/White/Yellow);<br />
+
epd_2in9bc_test.py: Example for 2.9inch e-paper B(Balck/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>) and 2.9inch e-paper C(Black/White/Yellow);<br />
epd_2in9b_V3_test.py: Example for 2.9inch e-paper B V3(Balck/White/Red;<br />
+
epd_2in9b_V3_test.py: Example for 2.9inch e-paper B V3(Balck/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>; The purchase date later than July 2020 is the V3 version, the current shipping version has the V3 logo on the back;<br />
epd_2in9d_test.py: Example for 2.9inch e-paper D(Black/White);
+
epd_2in9d_test.py: Example for 2.9inch e-paper D(Black/<font color="#DCDCDC">White</font>);
  
 
;2.13inch(2.13inch e-Paper:250×122,others:212×104):
 
;2.13inch(2.13inch e-Paper:250×122,others:212×104):
epd_2in13_test.py: Example for 2.13inch e-paper V1(Black/White), this version is stopped production and it can be bought before 019-05-15;<br />
+
epd_2in13_test.py: Example for 2.13inch e-paper V1(Black/<font color="#DCDCDC">White</font>), this version is stopped production and it can be bought before 019-05-15;<br />
epd_2in13_V2_test.py: Example for 2.13inch e-paper V2(Black/White) This is the current version with sticker V2 on the backside (2020-07-29);<br />
+
epd_2in13_V2_test.py: Example for 2.13inch e-paper V2(Black/<font color="#DCDCDC">White</font>) This is the current version with sticker V2 on the backside (2020-07-29);<br />
epd_2in13bc_test.py: Example for 2.13inch e-paper B(Black/White/Red)and 2.13inch e-paper C(Black/White/Yellow);<br />
+
epd_2in13_V3_test.py: Example for 2.13inch e-paper V3(Black/<font color="#DCDCDC">White</font>), The purchase date later than February 2022 is the V3 version, the current shipping version, with the V3 logo on the back.<br/>
epd_2in13b_V3_test.py: Example for 2.13inch e-paper B V3(Black/White/Red)<br />
+
epd_2in13bc_test.py: Example for 2.13inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 2.13inch e-paper C(Black/White/Yellow);<br />
epd_2in13d_test.py: Example for 2.13inch e-paper D(Black/White);<br />
+
epd_2in13b_V3_test.py: Example for 2.13inch e-paper B V3(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)<br />
 +
epd_2in13d_test.py: Example for 2.13inch e-paper D(Black/<font color="#DCDCDC">White</font>);<br />
  
 
;2.66inch (152 x 296):
 
;2.66inch (152 x 296):
epd_2in66_test.py: Example for 2.66inch e-Paper (Black/White); <br />
+
epd_2in66_test.py: Example for 2.66inch e-Paper (Black/<font color="#DCDCDC">White</font>); <br />
epd_2in66b_test.py: Example for 2.66inch e-Paoer (Black/White/Red);<br />
+
epd_2in66b_test.py: Example for 2.66inch e-Paoer (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>);<br />
 +
 
 +
;3inch (400 × 168):
 +
EPD_3in0g_test.py: Example for 3inch e-Paper G(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>); <br />
 +
 
 +
;3.52inch (360 × 240):
 +
EPD_3in52_test.py: Example for 3.52inch e-Paper (Black/<font color="#DCDCDC">White</font>); <br />
  
 
;3.7inch (280 x 480):
 
;3.7inch (280 x 480):
epd_3in7_test.py: Example for 3.7inch e-Paper (Black/White); <br />
+
epd_3in7_test.py: Example for 3.7inch e-Paper (Black/<font color="#DCDCDC">White</font>); <br />
  
 
;4.01inch (640x400):
 
;4.01inch (640x400):
Line 261: Line 282:
  
 
;4.2inch(400×300):
 
;4.2inch(400×300):
epd_4in2_test.py: Example for 4.2inch e-paper(Black/White);<br />
+
epd_4in2_test.py: Example for 4.2inch e-paper(Black/<font color="#DCDCDC">White</font>);<br />
epd_4in2bc_test.py: Example for 4.2inch e-paper B(Black/White/Red);<br />
+
epd_4in2bc_test.py: Example for 4.2inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>);<br />
epd_4in2b_V2_test.py: Example for 4.2inch e-paper B V2(Black/White/Red);<br />
+
epd_4in2b_V2_test.py: Example for 4.2inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than November 2020, it is the V2 version, and the current shipping version has the V2 logo on the back;<br />
  
;5.65inch (600x448):
+
;5.65inch (600x558):
 
epd_5in65f_test.py: Example for 5.65inch e-Paper F (Seven-color);
 
epd_5in65f_test.py: Example for 5.65inch e-Paper F (Seven-color);
  
 
;5.83inch(600×448):
 
;5.83inch(600×448):
epd_5in83_test.py: Example for 5.83inch e-paper(Black/White);<br />
+
epd_5in83_test.py: Example for 5.83inch e-paper(Black/<font color="#DCDCDC">White</font>). It is currently out of production.<br />
epd_5in83_V2_test.py: Example for 5.83inch e-paper V2(Black/White);<br />
+
epd_5in83_V2_test.py: Example for 5.83inch e-paper V2(Black/<font color="#DCDCDC">White</font>); The purchase date is later than December 2020 is the V2 version, the current shipping version has the V2 logo on the back;<br />
epd_5in83bc_test.py: Example for 5.83inch e-paper B(Black/White/Red)and 5.83inch e-paper C(Black/White/Yellow);<br />
+
epd_5in83bc_test.py: Example for 5.83inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 5.83inch e-paper C(Black/<font color="#DCDCDC">White</font>/<font color="#FFD700">Yellow</font>);<br />
epd_5in83b_V2_test.py: Example for 5.83inch e-paper B V2(Black/White/Red)<br />
+
epd_5in83b_V2_test.py: Example for 5.83inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date is later than August 2020 is the V2 version, the current shipping version has the V2 logo on the back;<br />
 +
 
 +
;7.3inch (400 × 168):
 +
epd_7in3g_test.py: Example for 7inch3 e-paper G (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>/<font color="#FFD700">Yellow</font>).
  
 
;7.5inch(V1:640×384, V2:800×480):
 
;7.5inch(V1:640×384, V2:800×480):
epd_7in5_test.py: Example for 7.5inch e-paper(Black/White), this version is stopped production and it can be bought before 2019-12-07;<br />
+
epd_7in5_test.py: Example for 7.5inch e-paper(Black/<font color="#DCDCDC">White</font>), this version is stopped production and it can be bought before 2019-12-07;<br />
epd_7in5_V2_test.py: Example for 7.5inch e-paper V2(Black/White), This is the current version with V2 sticker on the backside (2020-07-29)<br />  
+
epd_7in5_V2_test.py: Example for 7.5inch e-paper V2(Black/<font color="#DCDCDC">White</font>), This is the current version with V2 sticker on the backside (2020-07-29)<br />  
epd_7in5bc_test.py: Example for 7.5inch e-paper B(Black/White/Red)and 7.5inch e-paper C(Black/White/Yellow),7.5inch e-paper B V1 version is stopped production and it can be bought before 2019-12-07;<br />
+
epd_7in5bc_test.py: Example for 7.5inch e-paper B(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>)and 7.5inch e-paper C(Black/<font color="#DCDCDC">White</font>/Yellow), 7.5inch e-paper B V1 version is stopped production and it can be bought before 2019-12-07;<br />
epd_7in5b_V2_test.py: Example for 7.5inch e-paper B V2(Black/White/Red); This is the current version with V2 sticker on the backside. (2020-07-29);<br />
+
epd_7in5b_V2_test.py: Example for 7.5inch e-paper B V2(Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>). The purchase date later than 2019-12-07 is the V2 version, with the V2 logo on the back; the purchase date later than March 2021 is the V3 version, the current 7.5inch e-paper B shipping version, with the V3 logo on the back, the same use this program.<br />
  
 
;7.5inch (HD 880 x 528):
 
;7.5inch (HD 880 x 528):
epd_7in5_HD_test.py: Example for 7.5inch e-Paper HD (Black/White); <br />
+
epd_7in5_HD_test.py: Example for 7.5inch e-Paper HD (Black/<font color="#DCDCDC">White</font>); <br />
epd_7in5b_HD_test.py: Example for 7.5inch e-Paper B HD (Black/White/Red); <br />
+
epd_7in5b_HD_test.py: Example for 7.5inch e-Paper B HD (Black/<font color="#DCDCDC">White</font>/<font color="#FF0000">Red</font>); <br />
 +
 
 +
<font backgound=white; color=#DD1223>Note: The above time is for reference only, please refer to the screen logo for the specific version.</font><br/>
 +
Just run the program corresponding to the screen, the program supports python2/3, take 1.54 V2 as an example.<br/>
 +
<pre>
 +
# python2
 +
sudo python2.7 epd_1in54_V2_test.py
 +
# python3
 +
sudo python3 epd_1in54_V2_test.py
 +
</pre>
  
==Description of codes (API)==
+
==Codes Description(API)==
 
The libraries for Raspberry Pi and Jetson Nano are same. Examples contain three parts, hardware interface, EPD driver and the GUI functions.
 
The libraries for Raspberry Pi and Jetson Nano are same. Examples contain three parts, hardware interface, EPD driver and the GUI functions.
 
===C===
 
===C===
;Hardware interface
+
====<big>Hardware interface</big>====
:Two libraries are used by C example,WiringPi and BCM2835. The codes use wiringPi by default, if you want to use BCM2835, you can modify RaspberryPi&JetsonNano\c\Makefile file, modify lines 13 and 14. Change it as below:
+
[[File:E-paper Driver HAT RPI Makefile.png|400px|thumb|right]]
:[[File:E-paper_Driver_HAT_RPI_Makefile.png|400px]]
+
We have carried out the underlying package. As the hardware platform is different, the internal is various. If you need to know the internal, you can go to the corresponding directory.<br/>
 +
You can see many definitions in DEV_Config.c(.h), in the directory: RaspberryPi_JetsonNano\c\lib\Config.<br/>
 +
C language uses two ways to drive: BCM2835 library, and WiringPi library. The BCM2835 library is used by default. If you need to use the WiringPi library to drive, you can open RaspberryPi_JetsonNano\c\Makefile and modify lines 13-14.<br/>
 
*Data type
 
*Data type
 
<pre>
 
<pre>
Line 301: Line 336:
 
void DEV_Module_Exit(void);
 
void DEV_Module_Exit(void);
 
</pre>
 
</pre>
:Note: The Init() and Exit() function are used to configure GPIOs . EPD enter sleep mode after Exit() function is used, and the consumption of e-Paper should be 0 in sleep mode if the PCB is Rev2.1 version.
+
Note: The Init() and Exit() functions are used to configure GPIOs. EPD enters sleep mode after Exit() function is used, and the consumption of e-Paper should be 0 in sleep mode if the PCB is Rev2.1 version.
 
*GPIO Read/Write
 
*GPIO Read/Write
 
<pre>
 
<pre>
Line 307: Line 342:
 
UBYTE DEV_Digital_Read(UWORD Pin);
 
UBYTE DEV_Digital_Read(UWORD Pin);
 
</pre>
 
</pre>
*SPI transmit data
+
*SPI transmits data.
 
<pre>
 
<pre>
 
void DEV_SPI_WriteByte(UBYTE Value);
 
void DEV_SPI_WriteByte(UBYTE Value);
 
</pre>
 
</pre>
; EPD driver
+
 
:The driver file are saved under RaspberryPi&JetsonNano\c\lib\e-Paper
+
====<big>EPD Driver</big>====
 +
: The driver file is saved under RaspberryPi&JetsonNano\c\lib\e-Paper.
 
:[[File:E-paper_Driver_HAT_RPI_epd.png]]
 
:[[File:E-paper_Driver_HAT_RPI_epd.png]]
*Initial EPD
+
Open .h to see the following functions<br/>
:For 1.54inch e-Paper, 1.54inch e-Paper V2, 2.13inch e-Paper, 2.13inch e-Paper V2, 2.13inch e-Paper (D), 2.9inch e-Paper and 2.9inch e-Paper (D), partial refresh is supported. You can set Mode = 0 for full refresh and Mode =1 for partial refresh
+
*EPD initialization: please use it when the EPD starts to work or exits the sleep mode.
<pre>
 
void EPD_xxx_Init(UBYTE Mode);
 
</pre>
 
:For other e-Paper
 
 
<pre>
 
<pre>
 +
//1.54inch e-Paper, 1.54inch e-Paper V2, 2.13inch e-Paper, 2.13inch e-Paper V2, 2.13inch e-Paper (D), 2.9inch e-Paper, 2.9inch e-Paper (D )
 +
void EPD_xxx_Init(UBYTE Mode); // Mode = 0 full refresh initialization, Mode = 1 partial refresh initialization
 +
//other models
 
void EPD_xxx_Init(void);
 
void EPD_xxx_Init(void);
 
</pre>
 
</pre>
*Trasmite one frame of e-Paper and display
+
Where xxx represents the model. If it is 2.13D, the full screen initialization is EPD_2IN13D_Init(0), the partial refresh initialization EPD_2IN13D_Init(1); if it is 1.54 V2, then EPD_1IN54_V2_Init(); if it is 7.5B, it is EPD_7IN5BC_Init(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.<br/>
:For black/white e-Paper
+
*Clear the screen, and refresh the ink screen to white.
 +
void EPD_xxx_Clear(void);
 +
Where xxx represents the ink screen model. If it is 2.13D, then it is EPD_2IN9D_Clear(); if it is 7.5B, it is EPD_7IN5_Clear(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.<br/>
 +
*Transfer a frame of picture data and open the display.
 
<pre>
 
<pre>
 +
//Black and white two-color ink screen
 
void EPD_xxx_Display(UBYTE *Image);
 
void EPD_xxx_Display(UBYTE *Image);
</pre>
+
//Black and white red or black and white yellow ink screen
:For three-color e-Paper
 
<pre>
 
 
void EPD_xxx_Display(const UBYTE *blackimage, const UBYTE *ryimage);
 
void EPD_xxx_Display(const UBYTE *blackimage, const UBYTE *ryimage);
 
</pre>
 
</pre>
:'''There are exception:'''
+
Note that the following are special cases:<br/>
:For 2.13inch e-Paper (D) and 2.13inch e-Paper (D), if you want to do partial refresh, you should use function
 
 
<pre>
 
<pre>
 +
//For 2.13inch e-paper (D), 2.9inch e-paper (D) two flexible screens, partial refresh
 
void EPD_2IN13D_DisplayPart(UBYTE *Image);
 
void EPD_2IN13D_DisplayPart(UBYTE *Image);
 
void EPD_2IN9D_DisplayPart(UBYTE *Image);
 
void EPD_2IN9D_DisplayPart(UBYTE *Image);
 
</pre>
 
</pre>
:For 1.54inch e-Paper V2 and 2.13inch e-Paper V2. you should first display static background (base image) and then dynamicly display (display Part) when partial refresh.
+
//For 1.54inch e-paper V2 and 2.13inch e-paper V2, due to the upgrade of the control chip, for a partial refresh, it is necessary to call EPD_xxx_DisplayPartBaseImage to display the static background image, that is, to perform partial refresh based on this image, and then call the dynamic EPD_xxx_DisplayPart ()
 
<pre>
 
<pre>
 
void EPD_1IN54_V2_DisplayPartBaseImage(UBYTE *Image);
 
void EPD_1IN54_V2_DisplayPartBaseImage(UBYTE *Image);
Line 345: Line 382:
 
void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image);
 
void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image);
 
</pre>
 
</pre>
*Sleep mode
+
*Enter sleep mode
 
<pre>
 
<pre>
 
void EPD_xxx_Sleep(void);
 
void EPD_xxx_Sleep(void);
 
</pre>
 
</pre>
: To wake up module, you should set hardware reset (re power on it) or call the init function.
+
<font backgound=white; color=#DD1223>Note that after entering sleep mode, there are only two ways to work again: the first is a hardware reset, and the second is to call the initialization function again.</font><br/>
====GUI functions====
+
Where xxx represents the ink screen model. If it is 2.13D, then it is EPD_2IN13D_Sleep(); if it is 7.5B, it is EPD_7IN5BC_Sleep(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.<br/>
GUI files can be found in RaspberryPi&JetsonNano\c\lib\GUI\GUI_Paint.c(.h) directory
+
 
 +
====<big>GUI functions</big>====
 +
GUI files can be found in RaspberryPi&JetsonNano\c\lib\GUI\GUI_Paint.c(.h) directory.
 
:[[File:E-paper_Driver_HAT_GUI.png]]
 
:[[File:E-paper_Driver_HAT_GUI.png]]
The fonts can be found in the RaspberryPi&JetsonNano\c\lib\Fonts directory
+
The fonts can be found in the RaspberryPi&JetsonNano\c\lib\Fonts directory.
 
:[[File:E-paper_Driver_HAT_Fonts.png]]
 
:[[File:E-paper_Driver_HAT_Fonts.png]]
  
Line 366: Line 405:
 
*Color: Color of the image
 
*Color: Color of the image
  
;Select image buffer
+
; Select image buffer
 
<pre>
 
<pre>
 
void Paint_SelectImage(UBYTE *image)
 
void Paint_SelectImage(UBYTE *image)
 
</pre>
 
</pre>
* The image buffer, it is a pointer of image buffer's first address
+
* The image buffer is a pointer of the image buffer's first address.
  
;Rotate image
+
; Rotate image
:This function should be used after Paint_SelectImage()
+
:This function should be used after Paint_SelectImage().
 
<pre>
 
<pre>
 
void Paint_SetRotate(UWORD Rotate)
 
void Paint_SetRotate(UWORD Rotate)
 
</pre>
 
</pre>
*Rotate: The angle rotated. It should be ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270
+
*Rotate: The angle rotated. It should be ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270.
*Note: For different orientation, the position of the first pixel is different, here we take 1.54inch as example
+
*Note: For different orientations, the position of the first pixel is different, here we take 1.54inch as an example.
 
[[File:SPI-epaper-C-0.png|150px]][[File:SPI-epaper-C-90.png|150px]][[File:SPI-epaper-C-180.png|150px]][[File:SPI-epaper-C-270.png|150px]]
 
[[File:SPI-epaper-C-0.png|150px]][[File:SPI-epaper-C-90.png|150px]][[File:SPI-epaper-C-180.png|150px]][[File:SPI-epaper-C-270.png|150px]]
;Mirroring
+
; Mirroring
 
<pre>
 
<pre>
 
void Paint_SetMirroring(UBYTE mirror)
 
void Paint_SetMirroring(UBYTE mirror)
Line 395: Line 434:
 
*Color: The color of the pixel
 
*Color: The color of the pixel
  
;Clear
+
; Clear
 
: This function is used to clear the e-Paper
 
: This function is used to clear the e-Paper
 
<pre>
 
<pre>
Line 441: Line 480:
 
</pre>
 
</pre>
  
; Drawn Line
+
; Draw Line
 
<pre>
 
<pre>
 
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, LINE_STYLE Line_Style , LINE_STYLE Line_Style)
 
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, LINE_STYLE Line_Style , LINE_STYLE Line_Style)
Line 496: Line 535:
  
 
</pre>
 
</pre>
*Draw_Fill: set the rectangle full or empty.
+
*Draw_Fill: set the rectangle as full or empty.
 
<pre>
 
<pre>
 
typedef enum {
 
typedef enum {
Line 503: Line 542:
 
} DRAW_FILL;
 
} DRAW_FILL;
 
</pre>
 
</pre>
 +
; Draw circle: Draw a circle: In the image cache, with (X_Center Y_Center) as the center, draw a circle with a radius of Radius, you can choose the color, the width of the line, and whether to fill the inside of the circle<br/>
 +
void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
 +
parameter:
 +
  X_Center: X coordinate of the center of the circle
 +
  Y_Center: Y coordinate of the center of the circle
 +
  Radius: the radius of the circle
 +
  Color: fill color
 +
  Line_width: the width of the arc, providing 8 default widths
 +
  typedef enum {
 +
                  DOT_PIXEL_1X1 = 1, // 1 x 1
 +
                  DOT_PIXEL_2X2 , // 2 X 2
 +
                  DOT_PIXEL_3X3 , // 3 X 3
 +
                  DOT_PIXEL_4X4 , // 4 X 4
 +
                  DOT_PIXEL_5X5 , // 5 X 5
 +
                  DOT_PIXEL_6X6 , // 6 X 6
 +
                  DOT_PIXEL_7X7 , // 7 X 7
 +
                  DOT_PIXEL_8X8 , // 8 X 8
 +
  } DOT_PIXEL;
 +
  Draw_Fill: Fill, whether to fill the inside of the circle
 +
          typedef enum {
 +
                        DRAW_FILL_EMPTY = 0,
 +
                        DRAW_FILL_FULL,
 +
  } DRAW_FILL;
  
;Draw character (ASCII)
+
; Draw character (ASCII)
Set(Xstart Ystart) as letf-top point, draw a ASCII character.
+
Set(Xstart Ystart) as the left-top point, and draw an ASCII character.
 
<pre>
 
<pre>
 
void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Ascii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
 
void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Ascii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
Line 554: Line 616:
 
*Color_Background: color of the background
 
*Color_Background: color of the background
  
;Draw number
+
; Draw number
 
Draw a string of numbers, (Xstart, Ystart) is the left-top pixel.
 
Draw a string of numbers, (Xstart, Ystart) is the left-top pixel.
 
<pre>
 
<pre>
void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
+
void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Number, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
 
</pre>
 
</pre>
 
Parameter:
 
Parameter:
Line 569: Line 631:
 
*:font20:14*20
 
*:font20:14*20
 
*:font24:17*24
 
*:font24:17*24
*Color_Foreground: color of font;
+
*Color_Foreground: the color of the font;
*Color_Background: color of background;
+
*Color_Background: the color of background;
  
;Draw image
+
; Draw image
 
Send image data of BMP file to buffer
 
Send image data of BMP file to buffer
 
<pre>
 
<pre>
Line 578: Line 640:
 
</pre>
 
</pre>
 
Parameters:
 
Parameters:
*image_buffer: adrress of image data in buffer
+
*image_buffer: address of image data in the buffer.
  
;Read local bmp picture and write it to buffer
+
; Read local bmp picture and write it to buffer.
Linux platform like Jetson Nano and Raspberry Pi support to directly operate bmp pictures
+
Linux platforms like Jetson Nano and Raspberry Pi support directly operate bmp pictures.
Raspberry Pi & Jetson Nano:RaspberryPi&JetsonNano\c\lib\GUI\GUI_BMPfile.c(.h)
+
Raspberry Pi & Jetson Nano:RaspberryPi&JetsonNano\c\lib\GUI\GUI_BMPfile.c(.h).
 
<pre>
 
<pre>
 
UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart)
 
UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart)
Line 591: Line 653:
 
*Ystart: Y coordination of left-top of picture, default 0;
 
*Ystart: Y coordination of left-top of picture, default 0;
  
===Testing Code===
+
====<big>Testing Code</big>====
In the above part, we describe the tree structures of Linux codes, here we talk about the testing code for user.
+
[[File:Test code.png|400px|thumb|right]]
Raspberry Pi & Jetson Nano: RaspberryPi&JetsonNano\c\examples. The codes in examples are testing code, you can modify the definition in main.c file for different types of e-Paper.
+
The first three chapters introduce the classic Linux three-layer code structure, here is a little explanation of the user test code.<br/>
For example, if you want to test 2.13inch e-paper, you need to delete the "//" symbol on line 32.
+
For Raspberry Pi and Jetson Nano, in the directory: RaspberryPi_JetsonNano\c\examples, for all test codes, multiple shields can be made in main.c in this directory;<br/>
Use 5.65inch e-Paper as example, you need to change the line:
+
If you need to run the 7.5inch e-paper test program, you need to remove the 42-line shield.<br/>
 
  //EPD_5in65f_test();
 
  //EPD_5in65f_test();
 
to
 
to
 
  EPD_5in65f_test();
 
  EPD_5in65f_test();
  
Then compile it again and run  
+
Then compile it again and run.
 
<pre>
 
<pre>
 
make clean
 
make clean
Line 608: Line 670:
  
 
===Python===
 
===Python===
For Jetson Nano\Raspberry Pi, based on python2.7 and python3<br/>
+
[[File:Epd.png|400px|thumb|right]]
For python, his calls are not as complicated as C<br/>
+
For Jetson Nano\Raspberry Pi, based on python2.7 and python3.<br/>
 +
For python, its calls are not as complicated as C.<br/>
 
Raspberry Pi and Jetson Nano: RaspberryPi_JetsonNano\python\lib\<br/>
 
Raspberry Pi and Jetson Nano: RaspberryPi_JetsonNano\python\lib\<br/>
[[File:epd.png]]<br/>
+
===='''<big>Bottom Interface</big>'''====
====Bottom Interface====
+
The epdconfig.py file package the underlying interface.<br/>
The epdconfig.py file encapsulates the underlying interface<br/>
 
 
*Initialize module and exit handle:
 
*Initialize module and exit handle:
 
<pre>
 
<pre>
Line 620: Line 682:
 
</pre>
 
</pre>
 
Note:<br />
 
Note:<br />
1. The functions are used to set GPIP before and after driving e-Paper<br />
+
1. The functions are used to set GPIP before and after driving e-Paper.<br />
2. If the board you have is printed with Rev2.1, module enter low-ultra mode after Module_Exit(). (as we test, the current is about 0 in this mode);<br />
+
2. If the board you have is printed with Rev2.1, the module enters low-ultra mode after Module_Exit(). (as we test, the current is about 0 in this mode);<br />
  
 
*GPIO Read/Write:
 
*GPIO Read/Write:
Line 634: Line 696:
 
</pre>
 
</pre>
  
====Driver Interface====
+
===='''<big>Driver Interface</big>'''====
 
epdxxx.py (xxx means size, if it is 2.13inch e-paper, it is epd2in13.py, and so on)
 
epdxxx.py (xxx means size, if it is 2.13inch e-paper, it is epd2in13.py, and so on)
*Initailize e-paper: this function should be used at the begining. It can also be used to wake up e-Paper from Sleep mode.
+
*Initialize e-paper: this function should be used at the beginning. It can also be used to wake up e-Paper from Sleep mode.
 
<pre>
 
<pre>
 
#For 2.13inch e-Paper、2.9inch e-Paper
 
#For 2.13inch e-Paper、2.9inch e-Paper
 
def init(self, update) #  Choose lut_full_update or lut_partial_update
 
def init(self, update) #  Choose lut_full_update or lut_partial_update
#Other type
+
# Other types
 
def init(self)
 
def init(self)
 
</pre>
 
</pre>
Line 670: Line 732:
 
</pre>
 
</pre>
  
====Testing Function====
+
===='''<big>Testing Function</big>'''====
epd_xxx_test.py (xxx means dimension)python examples are saved in directory:<br />
+
epd_xxx_test.py (xxx means dimension)python examples are saved in the directory:<br />
Raspberry Pi和Jetson Nano:RaspberryPi&JetsonNano\python\examples\ <br />
+
Raspberry Pi and Jetson Nano:RaspberryPi&JetsonNano\python\examples\ <br />
If the python installed in your OS is python2, you should run examples like below:<br />
+
[[File:testing function.png]]<br/>
 +
 
 +
If the python installed in your OS is python2, you should run examples like the below:<br />
 
  sudo python epd_2in13_V2_test.py
 
  sudo python epd_2in13_V2_test.py
 
If it is python3, the commands should be:
 
If it is python3, the commands should be:
 
  sudo python3 epd_2in13-V2_test.py
 
  sudo python3 epd_2in13-V2_test.py
  
====Orientation====
+
===='''<big>Orientation</big>'''====
 
To rotate the display, you can use transpose function like blackimage = blackimage.transpose(Image.ROTATE_270):
 
To rotate the display, you can use transpose function like blackimage = blackimage.transpose(Image.ROTATE_270):
 
<pre>
 
<pre>
Line 685: Line 749:
 
#Support ROTATE_90, ROTATE_180, ROTATE_270
 
#Support ROTATE_90, ROTATE_180, ROTATE_270
 
</pre>
 
</pre>
 +
The rotation effect, taking 1.54B as an example, is 0°, 90°, 180°, 270° in sequence<br/>
 +
[[File:orientation.png]]<br/>
  
====GUI====
+
===='''<big>GUI</big>'''====
Python has a powerful [http://effbot.org/imagingbook PIL library], which can be used directly to drawing figures. Here we use it for drawing <br />
+
Python has a powerful [http://effbot.org/imagingbook PIL library], which can be used directly to drawing figures. Here we use it for drawing. <br />
  
*Install the library firstly
+
*Install the library firstly.
 
  sudo apt-get install python3-pil  
 
  sudo apt-get install python3-pil  
Import the library
+
Import the library.
 
  from PIL import Image,ImageDraw,ImageFont
 
  from PIL import Image,ImageDraw,ImageFont
 
Image: library; ImageDraw: drawing function; ImageFont: fonts
 
Image: library; ImageDraw: drawing function; ImageFont: fonts
Line 697: Line 763:
 
*Set image buffer for drawing.
 
*Set image buffer for drawing.
 
  image = Image.new('1', (epd.width, epd.height), 255)  # 255: clear the frame
 
  image = Image.new('1', (epd.width, epd.height), 255)  # 255: clear the frame
The first parameter is the depth of color, 1 means 2 grayscale. The second parameter is a tuple of image size. The third parameter is color of the image, 0 is black and 255 is white.
+
The first parameter is the depth of color, 1 means 2 grayscale. The second parameter is a tuple of image size. The third parameter is the color of the image, 0 is black and 255 is white.
  
 
*Create an image object.
 
*Create an image object.
Line 704: Line 770:
 
*Draw rectangle
 
*Draw rectangle
 
  draw.rectangle((0, 10, 200, 34), fill = 0)
 
  draw.rectangle((0, 10, 200, 34), fill = 0)
The first parameter is a tuple of coordination. 0, 10 is the top-left point of rectangle, 200, 34) is the right-bottom point. fille = 0 set the filled color to black.
+
The first parameter is a tuple of coordination. 0, 10 is the top-left point of the rectangle, and 200, 34) is the right-bottom point. fille = 0 set the fill color to black.
  
 
*Draw line
 
*Draw line
 
  draw.line((16, 60, 56, 60), fill = 0)
 
  draw.line((16, 60, 56, 60), fill = 0)
The first parameter is a type of coordination, 16, 60 is the begin point, 200, 34 is the end point. fill=0 set the line to black
+
The first parameter is a type of coordination, 16, 60 is the beginning point, and 200, 34 is the endpoint. fill=0 set the line to black.
  
 
*Draw circle
 
*Draw circle
Line 715: Line 781:
 
</pre>
 
</pre>
 
This function is used to draw a encircle of a square. The first parameter is a tuple of coordination of the square.  the degree of the circle is 0 to 360 °, fille=0 set the circle to black.<br />
 
This function is used to draw a encircle of a square. The first parameter is a tuple of coordination of the square.  the degree of the circle is 0 to 360 °, fille=0 set the circle to black.<br />
If the figure is not square according to the coordination, you will get an ellipse.<br />
+
If the figure is not square according to the coordination, you will get an ellipse.<br />
  
Besides the arc function, you can also use the chord function for drawing solid circle.<br />
+
Besides the arc function, you can also use the chord function for drawing a solid circle.<br />
 
<pre>
 
<pre>
 
draw.chord((90, 130, 150, 190), 0, 360, fill = 0)
 
draw.chord((90, 130, 150, 190), 0, 360, fill = 0)
Line 724: Line 790:
  
 
*Character
 
*Character
You can directkt import ImageFont model for drawing characters:<br />
+
You can directly import the ImageFont model for drawing characters:<br />
 
<pre>
 
<pre>
 
font = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
 
font = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)
Line 730: Line 796:
 
You can use the fonts of Windows or other fonts which is in ttc format.<br />
 
You can use the fonts of Windows or other fonts which is in ttc format.<br />
  
To draw English character, you can directly use the fonts; for Chinese character, you need to add a symbol u:<br />
+
To draw English character, you can directly use the fonts; for Chinese characters, you need to add a symbol u:<br />
 
<pre>
 
<pre>
 
draw.text((8, 12), 'hello world', font = font, fill = 255)
 
draw.text((8, 12), 'hello world', font = font, fill = 255)
draw.text((8, 36), u'电子墨水屏', font = font, fill = 0)
+
draw.text((8, 36), u'微雪电子', font = font, fill = 0)
 
</pre>
 
</pre>
 
The first parameter is a tuple of coordination of character, the second parameter is the font and las one is set the color.<br />
 
The first parameter is a tuple of coordination of character, the second parameter is the font and las one is set the color.<br />
Line 739: Line 805:
 
*Read local picture
 
*Read local picture
 
<pre>
 
<pre>
image = Image.open(os.path.join(picdir, '2in13-v2.bmp'))
+
image = Image.open(os.path.join(picdir, 'lin54.bmp'))
 
</pre>
 
</pre>
 
The parameter is the path of picture.
 
The parameter is the path of picture.
  
 
*Other functions.
 
*Other functions.
For more information about the PIL library, please refer to http://effbot.org/imagingbook.
+
For more information about the PIL library, you can search online.

Latest revision as of 02:50, 29 July 2022

Users Guides of Raspberry Pi

Hardware connection

If the e-Paper you have is the HAT version which has 40pin GPIO, you can directly attach the e-Paper HAT on Raspberry Pi, otherwise, you can connect your e-Paper to Raspberry Pi by 8pins cable provided.

To connect the e-Paper, you can following the table below:
Connect to Raspberry Pi
e-Paper Raspberry Pi
BCM2835 Board
VCC 3.3V 3.3V
GND GND GND
DIN MOSI 19
CLK SCLK 23
CS CE0 24
DC 25 22
RST 17 11
BUSY 24 18

Take the 7.5inch HD e-Paper (B) connected to the e-paper Driver HAT as an example, just plug it directly into the Raspberry Pi:
7.5inchrasp.png

Enable SPI interface

The communication interface of e-Paper is SPI, to use it, we should firstly enable the SPI interface.
Open terminal of Raspberry Pi, and open the configuration by the following command:
sudo raspi-config
Choose Interfacing Options -> SPI -> Yes
Restart Raspberry Pi
sudo reboot

RPI open spi.png

Install libraries

Note: If you use the Bullseye image, please use "apt" instead of "apt-get" to install libraries, the Bullseye image could only support "ptyhon3".


Open the terminal of Raspberry Pi and run the following commands to install corresponding libraries:

  • Install BCM2835 libraries:
#Open the Raspberry Pi terminal and run the following command
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# For more information, please refer to the official website: http://www.airspayce.com/mikem/bcm2835/
  • Install WiringPi libraries:
#Open the Raspberry Pi terminal and run the following command
sudo apt-get install wiringpi
#For Raspberry Pi systems after May 2019 (earlier than before, you may not need to execute), you may need to upgrade:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# Run gpio -v and version 2.52 will appear. If it does not appear, the installation is wrong
#Bullseye branch system use the following command:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# Run gpio -v and version 2.60 will appear. If it does not appear, it means that there is an installation error
  • Install Python2 libraries:
 sudo apt-get update
 sudo apt-get install python-pip
 sudo apt-get install python-pil
 sudo apt-get install python-numpy
 sudo pip install RPi.GPIO
 sudo pip install spidev
  • Install Python3 libraries:
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

Download demo codes

Open the Raspberry Pi terminal and execute:
Method 1: Download from Waveshare:

sudo apt-get install p7zip-full
wget  https://www.waveshare.com/w/upload/3/39/E-Paper_code.7z
7z x E-Paper_code.7z -O./e-Paper
cd e-Paper/RaspberryPi_JetsonNano/

Method 2: Use GitHub

git clone https://github.com/waveshare/e-Paper
cd e-Paper/RaspberryPi_JetsonNano/

Examples

C

RPI Guide for e-Paper02.png

Open main. c to select the screen of the corresponding size.

cd c
sudo nano examples/main.c

If you are using 2.7inch e-paper, then remove the // in front of the EPD_2IN7_test() function, then press Ctrl+c, press the Y key and Enter to save and exit, as shown in the figure: (The picture may not be updated. Timely, subject to the specific demo).
Supporting types:

1.02inch(128 × 80):

EPD_1in02d_test():Example for 1.02inch e-Paper/1.02inch e-Paper Module

1.54inch(1.54inch e-paper c:152 × 152,others:200 × 200):

EPD_1in54_test(): Example for 1.54inch e-paper V1(Balck/White): This version was discontinued.
EPD_1in54_V2_test(): Example for 1.54inch e-paper V2(Balck/White): Purchase date later than November 2019 is the V2 version, the current shipping version has the V2 logo on the back.
EPD_1in54b_test(): Example for 1.54inch e-paper B(Black/White/Red). It is currently out of production.
EPD_1in54b_V2_test(): Example for 1.54inch e-Paper B V2 (Black/White/Red). The purchase date later than November 2019 is the V2 version, the current shipping version has the V2 logo on the back;
EPD_1in54c_test(): Example for 1.54inch e-paper C(Black/White/Red);

1.64inch(168 × 168)

EPD_1in64g_test(): Example for 1.64inch e-paper G (Black/White/Red/Yellow)

2.7inch(264 × 176)

EPD_2in7_test(): Example for 2.7inch e-paper(Black/White);
EPD_2in7b_test(): Example for 2.7inch e-paper B(Black/White/Red);
EPD_2in7b_V2_test(): Example for 2.7inch e-paper B V2(Black/White/Red). The purchase date is later than February 2021 is the V2 version, the current shipping version has the V2 logo on the back;

2.9inch (296 × 128)

EPD_2in9_test(): Example for 2.9inch e-paper (Black/White), this version was discontinued.
EPD_2in9_V2_test(): Example for 2.9inch e-paper V2(Black/White); The purchase date is later than December 2020 is the V2 version, the current shipping version has the V2 logo on the back;
EPD_2in9bc_test(): Example for 2.9inch e-paper B(Balck/White/Red) and 2.9inch e-paper C(Black/White/Yellow);
EPD_2in9b_V3_test(): Example for 2.9inch e-paper B V3 (Balck/White/Red); Purchase date later than July 2020 is the V3 version, the current shipping version has the V3 logo on the back;
EPD_2in9d_test(): Example for 2.9inch e-paper D(Black/White);

2.13inch(2.13inch e-Paper:250 × 122,others:212 × 104):

EPD_2in13_test(): Example for 2.13inch e-paper V1(Black/White), this version was discontinued.
EPD_2in13_V2_test(): Example for 2.13inch e-paper V2(Black/White). The purchase date is later than May 2019, the V2 version is currently discontinued, and the V2 logo is affixed on the back;
EPD_2in13_V3_test(): Example for 2.13inch e-paper V3(Black/White) This is the current version with sticker V3 on the backside (2020-07-29);
EPD_2in13bc_test():Example for 2.13inch e-paper B(Black/White/Red)and 2.13inch e-paper C(Blackj/White/Yellow);
EPD_2in13b_V3_test():Example for 2.13inch e-paper B V3(Black/White/Red)Purchase date later than April 2020 is the V3 version, the current shipping version has the V3 logo on the back;
EPD_2in13d_test(): Example for 2.13inch e-paper D(Black/White);

2.66inch (152 × 296)

EPD_2in66_test(): Example for 2.66inch e-Paper (Black/White);
EPD_2in66b_test(): Example for 2.66inch e-Paper B (Black/White/Red);

3inch (400 × 168)

EPD_3in0g_test(): Example for 3inch e-Paper G(Black/White/Red/Yellow);

3.52inch (360 × 240)

EPD_3in52_test(): Example for 3.52inch e-Paper (Black/White);

3.7inch (280 × 480)

EPD_3in7_test(): Example for 3.7inch e-Paper(Black/White);

4.01inch (640 × 400)

EPD_4in01_test(): Example for the 4.01inch e-Paper HAT (F) (Black/White/Green/Blue/Red/Yellow/Orange);

4.2inch(400 × 300)

EPD_4in2_test(): Example for 4.2inch e-paper(Black/White);
EPD_4in2bc_test(): Example for 4.2inch e-paper B(Black/White/Red);
EPD_4in2b_V2_test(): Example for 4.2inch e-paper B V2(Black/White/Red). The purchase date is later than November 2020, it is the V2 version, and the current shipping version has the V2 logo on the back;

5.65inch (600 × 558)

EPD_5in65f_test(): Example for for 5.65inch e-Paper F (Black/White/Green/Blue/Red/Yellow/Orange);

5.83inch(600 × 448):

EPD_5in83_test(): Example for 5.83inch e-paper(Black/White), It is currently out of production.
EPD_5in83_V2_test(): Example for 5.83inch e-paper V2(Black/White), The purchase date is later than December 2020 is the V2 version, the current shipping version, with the V2 logo on the back.
EPD_5in83bc_test(): Example for 5.83inch e-paper B(Black/White/Red)and 5.83inch e-paper C(Black/White/Yellow);
EPD_5in83b_V2_test(): Example for 5.83inch e-paper B V2(Black/White/Red). The purchase date is later than August 2020 for the V2 version, the current shipping version, with the V2 logo on the back.

7.3inch (800 × 480)

epd_7in3g_test.py: Example for 7inch3 e-paper G (Black/White/Red/Yellow).

7.5inch(V1:640 × 384, V2:800 × 480):

EPD_7in5_test(): Example for 7.5inch e-paper(Black/White). The purchase date is earlier than 2019-12-07 as the V1 version, which is currently discontinued.
EPD_7in5bc_test(): For example for 7.5inch e-paper B(Black/White/Red)and 7.5inch e-paper C(Black/White/Yellow), The purchase date later than 2019-12-07 is the V2 version, and the current shipping version has the V2 logo on the back;
EPD_7in5_V2_test(): Example for 7.5inch e-paper V2(Black/White). The purchase date of 7.5inch e-paper B is earlier than 2019-12-07, which is the V1 version, which is currently discontinued, and 7.5inch e-paper C is normally available.

EPD_7in5bc_V2_test(): Example for 7.5inch e-paper B V2(Black/White/Red); The purchase date is later than 2019-12-07 is the V2 version, with the V2 logo on the back; the purchase date is later than March 2021 is the V3 version, the current 7.5inch e-paper B shipping version, with the V3 logo on the back, the same use this program;

7.5inch (880 × 528)

EPD_7in5_HD_test(): Example for 7.5inch e-Paper HD (Black/White);
EPD_7in5b_HD_test(): Example for 7.5inch e-Paper B HD (Black/White/Red);

*Note: The above time is for reference only, please refer to the screen logo for the specific version.

  • Recompile, the compilation process may take a few seconds
Return to the c directory and run the following command
make clean
make
sudo ./epd

Python

PS: The system of the Bullseye branch only supports Python3.
  • Enter the folder of python code.
cd python/examples
ls -al
E-paper rpi change python012.png
  • Run the responding example.
sudo python epd_xxx_test.py
sudo python3 epd_xxx_test.py

Supporting types:

1.02inch(128×80):

epd_1in02_test.py:Example for 1.02inch e-Paper/1.02inch e-Paper Module

1.54inch(1.54inch e-paper c:152×152,others:200×200):

epd_1in54_test.py: Example for 1.54inch e-paper V1(Balck/White): This version is stopped production which can be bought before 2019-11-22;
epd_1in54_V2_test.py: Example for 1.54inch e-paper V2(Balck/White): This is the current version which can be bought now (2020-07-29). The e-Paper has V2 sticker on the backside.
epd_1in54b_test.py: Example for 1.54inch e-paper B(Black/White/Red). It is currently out of production.
epd_1in54b_V2_test.py: Example for 1.54inch e-paper B V2 (Black/White/Red). The purchase date is later than April 2020 is the V2 version, the current shipping version has the V2 logo on the back;
epd_1in54c_test.py: Example for 1.54inch e-paper C(Black/White/Red).

1.64inch(168 × 168)

epd_1in64g_test.py: Example for 1.64inch e-paper G (Black/White/Red/Yellow)

2.7inch(264×176):

epd_2in7_test.py: Example for 2.7inch e-paper(Black/White);
epd_2in7b_test.py: Example for 2.7inch e-paper B(Black/White/Red);
epd_2in7b_V2_test.py: Example for 2.7inch e-paper B V2 (Black/White/Red). The purchase date is later than February 2021 is the V2 version, the current shipping version has the V2 logo on the back;

2.9inch(296×128):

epd_2in9_test.py: Example for 2.9inch e-paper(Black/White); It is currently out of production.
epd_2in9_V2_test.py: Example for 2.9inch e-paper V2(Black/White); The purchase date is later than December 2020 is the V2 version, the current shipping version, with the V2 logo on the back.
epd_2in9bc_test.py: Example for 2.9inch e-paper B(Balck/White/Red) and 2.9inch e-paper C(Black/White/Yellow);
epd_2in9b_V3_test.py: Example for 2.9inch e-paper B V3(Balck/White/Red; The purchase date later than July 2020 is the V3 version, the current shipping version has the V3 logo on the back;
epd_2in9d_test.py: Example for 2.9inch e-paper D(Black/White);

2.13inch(2.13inch e-Paper:250×122,others:212×104):

epd_2in13_test.py: Example for 2.13inch e-paper V1(Black/White), this version is stopped production and it can be bought before 019-05-15;
epd_2in13_V2_test.py: Example for 2.13inch e-paper V2(Black/White) This is the current version with sticker V2 on the backside (2020-07-29);
epd_2in13_V3_test.py: Example for 2.13inch e-paper V3(Black/White), The purchase date later than February 2022 is the V3 version, the current shipping version, with the V3 logo on the back.
epd_2in13bc_test.py: Example for 2.13inch e-paper B(Black/White/Red)and 2.13inch e-paper C(Black/White/Yellow);
epd_2in13b_V3_test.py: Example for 2.13inch e-paper B V3(Black/White/Red
epd_2in13d_test.py: Example for 2.13inch e-paper D(Black/White);

2.66inch (152 x 296)

epd_2in66_test.py: Example for 2.66inch e-Paper (Black/White);
epd_2in66b_test.py: Example for 2.66inch e-Paoer (Black/White/Red);

3inch (400 × 168)

EPD_3in0g_test.py: Example for 3inch e-Paper G(Black/White/Red/Yellow);

3.52inch (360 × 240)

EPD_3in52_test.py: Example for 3.52inch e-Paper (Black/White);

3.7inch (280 x 480)

epd_3in7_test.py: Example for 3.7inch e-Paper (Black/White);

4.01inch (640x400)

epd_4in01f_test.py: Example for 4.01inch e-Paper (Seven-color);

4.2inch(400×300)

epd_4in2_test.py: Example for 4.2inch e-paper(Black/White);
epd_4in2bc_test.py: Example for 4.2inch e-paper B(Black/White/Red);
epd_4in2b_V2_test.py: Example for 4.2inch e-paper B V2(Black/White/Red). The purchase date is later than November 2020, it is the V2 version, and the current shipping version has the V2 logo on the back;

5.65inch (600x558)

epd_5in65f_test.py: Example for 5.65inch e-Paper F (Seven-color);

5.83inch(600×448):

epd_5in83_test.py: Example for 5.83inch e-paper(Black/White). It is currently out of production.
epd_5in83_V2_test.py: Example for 5.83inch e-paper V2(Black/White); The purchase date is later than December 2020 is the V2 version, the current shipping version has the V2 logo on the back;
epd_5in83bc_test.py: Example for 5.83inch e-paper B(Black/White/Red)and 5.83inch e-paper C(Black/White/Yellow);
epd_5in83b_V2_test.py: Example for 5.83inch e-paper B V2(Black/White/Red). The purchase date is later than August 2020 is the V2 version, the current shipping version has the V2 logo on the back;

7.3inch (400 × 168)

epd_7in3g_test.py: Example for 7inch3 e-paper G (Black/White/Red/Yellow).

7.5inch(V1:640×384, V2:800×480):

epd_7in5_test.py: Example for 7.5inch e-paper(Black/White), this version is stopped production and it can be bought before 2019-12-07;
epd_7in5_V2_test.py: Example for 7.5inch e-paper V2(Black/White), This is the current version with V2 sticker on the backside (2020-07-29)
epd_7in5bc_test.py: Example for 7.5inch e-paper B(Black/White/Red)and 7.5inch e-paper C(Black/White/Yellow), 7.5inch e-paper B V1 version is stopped production and it can be bought before 2019-12-07;
epd_7in5b_V2_test.py: Example for 7.5inch e-paper B V2(Black/White/Red). The purchase date later than 2019-12-07 is the V2 version, with the V2 logo on the back; the purchase date later than March 2021 is the V3 version, the current 7.5inch e-paper B shipping version, with the V3 logo on the back, the same use this program.

7.5inch (HD 880 x 528)

epd_7in5_HD_test.py: Example for 7.5inch e-Paper HD (Black/White);
epd_7in5b_HD_test.py: Example for 7.5inch e-Paper B HD (Black/White/Red);

Note: The above time is for reference only, please refer to the screen logo for the specific version.
Just run the program corresponding to the screen, the program supports python2/3, take 1.54 V2 as an example.

# python2
sudo python2.7 epd_1in54_V2_test.py
# python3
sudo python3 epd_1in54_V2_test.py

Codes Description(API)

The libraries for Raspberry Pi and Jetson Nano are same. Examples contain three parts, hardware interface, EPD driver and the GUI functions.

C

Hardware interface

E-paper Driver HAT RPI Makefile.png

We have carried out the underlying package. As the hardware platform is different, the internal is various. If you need to know the internal, you can go to the corresponding directory.
You can see many definitions in DEV_Config.c(.h), in the directory: RaspberryPi_JetsonNano\c\lib\Config.
C language uses two ways to drive: BCM2835 library, and WiringPi library. The BCM2835 library is used by default. If you need to use the WiringPi library to drive, you can open RaspberryPi_JetsonNano\c\Makefile and modify lines 13-14.

  • Data type
#define UBYTE   uint8_t
#define UWORD   uint16_t
#define UDOUBLE uint32_t
  • Init and Exit
void DEV_Module_Init(void);
void DEV_Module_Exit(void);

Note: The Init() and Exit() functions are used to configure GPIOs. EPD enters sleep mode after Exit() function is used, and the consumption of e-Paper should be 0 in sleep mode if the PCB is Rev2.1 version.

  • GPIO Read/Write
void DEV_Digital_Write(UWORD Pin, UBYTE Value);
UBYTE DEV_Digital_Read(UWORD Pin);
  • SPI transmits data.
void DEV_SPI_WriteByte(UBYTE Value);

EPD Driver

The driver file is saved under RaspberryPi&JetsonNano\c\lib\e-Paper.
E-paper Driver HAT RPI epd.png

Open .h to see the following functions

  • EPD initialization: please use it when the EPD starts to work or exits the sleep mode.
//1.54inch e-Paper, 1.54inch e-Paper V2, 2.13inch e-Paper, 2.13inch e-Paper V2, 2.13inch e-Paper (D), 2.9inch e-Paper, 2.9inch e-Paper (D )
void EPD_xxx_Init(UBYTE Mode); // Mode = 0 full refresh initialization, Mode = 1 partial refresh initialization
//other models
void EPD_xxx_Init(void);

Where xxx represents the model. If it is 2.13D, the full screen initialization is EPD_2IN13D_Init(0), the partial refresh initialization EPD_2IN13D_Init(1); if it is 1.54 V2, then EPD_1IN54_V2_Init(); if it is 7.5B, it is EPD_7IN5BC_Init(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.

  • Clear the screen, and refresh the ink screen to white.
void EPD_xxx_Clear(void);

Where xxx represents the ink screen model. If it is 2.13D, then it is EPD_2IN9D_Clear(); if it is 7.5B, it is EPD_7IN5_Clear(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.

  • Transfer a frame of picture data and open the display.
//Black and white two-color ink screen
void EPD_xxx_Display(UBYTE *Image);
//Black and white red or black and white yellow ink screen
void EPD_xxx_Display(const UBYTE *blackimage, const UBYTE *ryimage);

Note that the following are special cases:

//For 2.13inch e-paper (D), 2.9inch e-paper (D) two flexible screens, partial refresh
void EPD_2IN13D_DisplayPart(UBYTE *Image);
void EPD_2IN9D_DisplayPart(UBYTE *Image);

//For 1.54inch e-paper V2 and 2.13inch e-paper V2, due to the upgrade of the control chip, for a partial refresh, it is necessary to call EPD_xxx_DisplayPartBaseImage to display the static background image, that is, to perform partial refresh based on this image, and then call the dynamic EPD_xxx_DisplayPart ()

void EPD_1IN54_V2_DisplayPartBaseImage(UBYTE *Image);
void EPD_1IN54_V2_DisplayPart(UBYTE *Image);
void EPD_2IN13_V2_DisplayPart(UBYTE *Image);
void EPD_2IN13_V2_DisplayPartBaseImage(UBYTE *Image);
  • Enter sleep mode
void EPD_xxx_Sleep(void);

Note that after entering sleep mode, there are only two ways to work again: the first is a hardware reset, and the second is to call the initialization function again.
Where xxx represents the ink screen model. If it is 2.13D, then it is EPD_2IN13D_Sleep(); if it is 7.5B, it is EPD_7IN5BC_Sleep(). Although the display colors are different, the driver code of 7.5B and 7.5C is the same.

GUI functions

GUI files can be found in RaspberryPi&JetsonNano\c\lib\GUI\GUI_Paint.c(.h) directory.

E-paper Driver HAT GUI.png

The fonts can be found in the RaspberryPi&JetsonNano\c\lib\Fonts directory.

E-paper Driver HAT Fonts.png
Create an image buffer
void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color)
  • Image: the Image buffer
  • Width: width of the image
  • Height: Height of the image
  • Rotate: Rotate angle
  • Color: Color of the image
Select image buffer
void Paint_SelectImage(UBYTE *image)
  • The image buffer is a pointer of the image buffer's first address.
Rotate image
This function should be used after Paint_SelectImage().
void Paint_SetRotate(UWORD Rotate)
  • Rotate: The angle rotated. It should be ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270.
  • Note: For different orientations, the position of the first pixel is different, here we take 1.54inch as an example.

SPI-epaper-C-0.pngSPI-epaper-C-90.pngSPI-epaper-C-180.pngSPI-epaper-C-270.png

Mirroring
void Paint_SetMirroring(UBYTE mirror)
  • mirror: The type of mirroring. (MIRROR_NONE, MIRROR_HORIZONTAL、MIRROR_VERTICAL、MIRROR_ORIGIN)
Set Pixel
This function is used to set the position and types of the pixel
void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color)
  • Xpoint: The x-axis coordination of pixel
  • Ypoint: The y-axis coordination of pixel
  • Color: The color of the pixel
Clear
This function is used to clear the e-Paper
void Paint_Clear(UWORD Color)
  • Color: The color of the display
Clear window
This function is used to clear a partial area
void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color)
  • Xstart: The x-axis coordination of the start point
  • Ystart: The y-axis coordination of the start point
  • Xend: The x-axis coordination of the end point
  • Yend: The y-axis coordination of the end point
  • Color: The color of the windows
Draw point

This function is used to draw point.

void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style)
  • Xpoint: The x-axis coordination of point
  • Ypoint: The y-axis coordination of point
  • Dot_Pixel: The size of the point
 	 	 typedef enum {
 	 	 	 DOT_PIXEL_1X1  = 1,	// 1 x 1
 	 	 	 DOT_PIXEL_2X2  , 		// 2 X 2
 	 	 	 DOT_PIXEL_3X3  , 	 	// 3 X 3
 	 	 	 DOT_PIXEL_4X4  , 	 	// 4 X 4
 	 	 	 DOT_PIXEL_5X5  , 		// 5 X 5
 	 	 	 DOT_PIXEL_6X6  , 		// 6 X 6
 	 	 	 DOT_PIXEL_7X7  , 		// 7 X 7
 	 	 	 DOT_PIXEL_8X8  , 		// 8 X 8
 	 	} DOT_PIXEL;
  • Dot_Style: The style of the point
 	 	typedef enum {
 	 	   DOT_FILL_AROUND  = 1,		
 	 	   DOT_FILL_RIGHTUP,
 	 	} DOT_STYLE;
Draw Line
void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, LINE_STYLE Line_Style , LINE_STYLE Line_Style)

This function is used to draw a line

  • Xstart: The start x-axis coordination of the line
  • Ystart: The start y-axis coordination of the line
  • Xend: The end x-axis coordination of the line
  • Yend: The end y-axis coordination of the line
  • Line_width: The width of the line
 	 	typedef enum {
 	 	 	 DOT_PIXEL_1X1  = 1,	// 1 x 1
 	 	 	 DOT_PIXEL_2X2  , 		// 2 X 2
 	 	 	 DOT_PIXEL_3X3  ,		// 3 X 3
 	 	 	 DOT_PIXEL_4X4  ,		// 4 X 4
 	 	 	 DOT_PIXEL_5X5  , 		// 5 X 5
 	 	 	 DOT_PIXEL_6X6  , 		// 6 X 6
 	 	 	 DOT_PIXEL_7X7  , 		// 7 X 7
 	 	 	 DOT_PIXEL_8X8  , 		// 8 X 8
 	 	} DOT_PIXEL;
  • Line_style: The style of the line
 	 	typedef enum {
 	 	 	 LINE_STYLE_SOLID = 0,
 	 	 	 LINE_STYLE_DOTTED,
 	 	} LINE_STYLE;
Draw rectangle

Draw a rectangle from (Xstart, Ystart) to (Xend, Yend).

void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
  • Xstart: Start coordinate of X-axes of the rectangle
  • Ystart: Start coordinate of Y-axes of the rectangle
  • Xend: End coordinate of X-end of the rectangle
  • Yend: End coordinate of Y-end of the rectangle
  • Color: color of the rectangle
  • Line_width: The width of edges, 8 sides are available;
 	 	typedef enum {
 	 	 	 DOT_PIXEL_1X1  = 1,	// 1 x 1
 	 	 	 DOT_PIXEL_2X2  , 		// 2 X 2
 	 	 	 DOT_PIXEL_3X3  ,		// 3 X 3
 	 	 	 DOT_PIXEL_4X4  ,		// 4 X 4
 	 	 	 DOT_PIXEL_5X5  , 		// 5 X 5
 	 	 	 DOT_PIXEL_6X6  , 		// 6 X 6
 	 	 	 DOT_PIXEL_7X7  , 		// 7 X 7
 	 	 	 DOT_PIXEL_8X8  , 		// 8 X 8
 	 	} DOT_PIXEL;
 	

  • Draw_Fill: set the rectangle as full or empty.
typedef enum {
 	DRAW_FILL_EMPTY = 0,
 	DRAW_FILL_FULL,
} DRAW_FILL;
Draw circle
Draw a circle: In the image cache, with (X_Center Y_Center) as the center, draw a circle with a radius of Radius, you can choose the color, the width of the line, and whether to fill the inside of the circle
void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
parameter:
 X_Center: X coordinate of the center of the circle
 Y_Center: Y coordinate of the center of the circle
 Radius: the radius of the circle
 Color: fill color
 Line_width: the width of the arc, providing 8 default widths
 typedef enum {
                 DOT_PIXEL_1X1 = 1, // 1 x 1
                 DOT_PIXEL_2X2 , // 2 X 2
                 DOT_PIXEL_3X3 , // 3 X 3
                 DOT_PIXEL_4X4 , // 4 X 4
                 DOT_PIXEL_5X5 , // 5 X 5
                 DOT_PIXEL_6X6 , // 6 X 6
                 DOT_PIXEL_7X7 , // 7 X 7
                 DOT_PIXEL_8X8 , // 8 X 8
 } DOT_PIXEL;
 Draw_Fill: Fill, whether to fill the inside of the circle
          typedef enum {
                        DRAW_FILL_EMPTY = 0,
                        DRAW_FILL_FULL,
 } DRAW_FILL;
Draw character (ASCII)

Set(Xstart Ystart) as the left-top point, and draw an ASCII character.

void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Ascii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)

Parameter:

  • Xstart: X coordinate of the left-top pixel of character;
  • Ystart: Y coordinate of the left-top pixel of character;
  • Ascii_Char:Ascii character;
  • Font: 5 fonts are available;
    font12:7*12
    font16:11*16
    font20:14*20
    font24:17*24
  • Color_Foreground: color of character;
  • Color_Background: color of background;
Draw String

Set point (Xstart Ystart) as the left-top pixel, draw a string.

void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)

Parameters:

  • Xstart: X coordinate of left-top pixel of characters;
  • Ystart: Y coordinate of left-top pixel of characters;
  • pString:Pointer of string
  • Font: 5 fonts are available:
    font8:5*8
    font12:7*12
    font16:11*16
    font20:14*20
    font24:17*24
  • Color_Foreground: color of string
  • Color_Background: color of the background
Draw Chinese characters

this function is used to draw Chinese fonts based ON GB2312 fonts.

void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, UWORD Color_Foreground, UWORD Color_Background)

Parameters:

  • Xstart: Coordinate of left-top pixel of characters;
  • Ystart: Coordinate of left-top pixel of characters;
  • pString:Pointer of string;
  • Font: GB2312 fonts:
    font12CN:11*21(ascii),16*21 (Chinese)
    font24CN:24*41(ascii),32*41 (Chinese)
  • Color_Foreground: color of string
  • Color_Background: color of the background
Draw number

Draw a string of numbers, (Xstart, Ystart) is the left-top pixel.

void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Number, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)

Parameter:

  • Xstart: X coordinate of left-top pixel;
  • Ystart: Y coordicate of left-to pixel;
  • Nummber: the numbers displayed. the numbers are saved in int format, the maximum is 2147483647;
  • Font: 5 fonts are available:
    font8:5*8
    font12:7*12
    font16:11*16
    font20:14*20
    font24:17*24
  • Color_Foreground: the color of the font;
  • Color_Background: the color of background;
Draw image

Send image data of BMP file to buffer

void Paint_DrawBitMap(const unsigned char* image_buffer)

Parameters:

  • image_buffer: address of image data in the buffer.
Read local bmp picture and write it to buffer.

Linux platforms like Jetson Nano and Raspberry Pi support directly operate bmp pictures. Raspberry Pi & Jetson Nano:RaspberryPi&JetsonNano\c\lib\GUI\GUI_BMPfile.c(.h).

UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart)

Parameters:

  • path:The path of BMP pictures
  • Xstart: X coordination of left-top of picture, default 0;
  • Ystart: Y coordination of left-top of picture, default 0;

Testing Code

Test code.png

The first three chapters introduce the classic Linux three-layer code structure, here is a little explanation of the user test code.
For Raspberry Pi and Jetson Nano, in the directory: RaspberryPi_JetsonNano\c\examples, for all test codes, multiple shields can be made in main.c in this directory;
If you need to run the 7.5inch e-paper test program, you need to remove the 42-line shield.

//EPD_5in65f_test();

to

EPD_5in65f_test();

Then compile it again and run.

make clean
make
sudo ./epd

Python

Epd.png

For Jetson Nano\Raspberry Pi, based on python2.7 and python3.
For python, its calls are not as complicated as C.
Raspberry Pi and Jetson Nano: RaspberryPi_JetsonNano\python\lib\

Bottom Interface

The epdconfig.py file package the underlying interface.

  • Initialize module and exit handle:
def module_init()
def module_exit()

Note:
1. The functions are used to set GPIP before and after driving e-Paper.
2. If the board you have is printed with Rev2.1, the module enters low-ultra mode after Module_Exit(). (as we test, the current is about 0 in this mode);

  • GPIO Read/Write:
def  digital_write(pin, value)
def  digital_read(pin)
  • SPI Write data:
def spi_writebyte(data)

Driver Interface

epdxxx.py (xxx means size, if it is 2.13inch e-paper, it is epd2in13.py, and so on)

  • Initialize e-paper: this function should be used at the beginning. It can also be used to wake up e-Paper from Sleep mode.
#For 2.13inch e-Paper、2.9inch e-Paper
def init(self, update) #  Choose lut_full_update or lut_partial_update
# Other types
def init(self)
  • Clear e-paper: This function is used to clear e-Paper to white;
def Clear(self)
def Clear(self, color) # Some types of e-Paper should use this function to clear screen
  • Convert image to arrays
def getbuffer(self, image)
  • Transmit one frame of image data and display
#For two-color e-paper
def display(self, image)

#Because that controllers of 2.13inch e-paper are updated, when partial refresh, they should first use displayPartBaseImage() to display static background, then use displayPart() to dynamaticlly display.
def displayPartBaseImage(self, image)
def displayPart(self, image)
  • Enter sleep mode
def sleep(self)

Testing Function

epd_xxx_test.py (xxx means dimension)python examples are saved in the directory:
Raspberry Pi and Jetson Nano:RaspberryPi&JetsonNano\python\examples\
Testing function.png

If the python installed in your OS is python2, you should run examples like the below:

sudo python epd_2in13_V2_test.py

If it is python3, the commands should be:

sudo python3 epd_2in13-V2_test.py

Orientation

To rotate the display, you can use transpose function like blackimage = blackimage.transpose(Image.ROTATE_270):

blackimage = blackimage.transpose(Image.ROTATE_270) 
redimage = redimage.transpose(Image.ROTATE_270)
#Support ROTATE_90, ROTATE_180, ROTATE_270

The rotation effect, taking 1.54B as an example, is 0°, 90°, 180°, 270° in sequence
Orientation.png

GUI

Python has a powerful PIL library, which can be used directly to drawing figures. Here we use it for drawing.

  • Install the library firstly.
sudo apt-get install python3-pil 

Import the library.

from PIL import Image,ImageDraw,ImageFont

Image: library; ImageDraw: drawing function; ImageFont: fonts

  • Set image buffer for drawing.
image = Image.new('1', (epd.width, epd.height), 255)  # 255: clear the frame

The first parameter is the depth of color, 1 means 2 grayscale. The second parameter is a tuple of image size. The third parameter is the color of the image, 0 is black and 255 is white.

  • Create an image object.
draw = ImageDraw.Draw(image)
  • Draw rectangle
draw.rectangle((0, 10, 200, 34), fill = 0)

The first parameter is a tuple of coordination. 0, 10 is the top-left point of the rectangle, and 200, 34) is the right-bottom point. fille = 0 set the fill color to black.

  • Draw line
draw.line((16, 60, 56, 60), fill = 0)

The first parameter is a type of coordination, 16, 60 is the beginning point, and 200, 34 is the endpoint. fill=0 set the line to black.

  • Draw circle
draw.arc((90, 60, 150, 120), 0, 360, fill = 0)

This function is used to draw a encircle of a square. The first parameter is a tuple of coordination of the square. the degree of the circle is 0 to 360 °, fille=0 set the circle to black.
If the figure is not square according to the coordination, you will get an ellipse.

Besides the arc function, you can also use the chord function for drawing a solid circle.

draw.chord((90, 130, 150, 190), 0, 360, fill = 0)

The first parameter is the coordination of the enclosing rectangle. The second and third parameters are the beginning and end degrees of the circle. The fourth parameter is the fill color of the circle.

  • Character

You can directly import the ImageFont model for drawing characters:

font = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24)

You can use the fonts of Windows or other fonts which is in ttc format.

To draw English character, you can directly use the fonts; for Chinese characters, you need to add a symbol u:

draw.text((8, 12), 'hello world', font = font, fill = 255)
draw.text((8, 36), u'微雪电子', font = font, fill = 0)

The first parameter is a tuple of coordination of character, the second parameter is the font and las one is set the color.

  • Read local picture
image = Image.open(os.path.join(picdir, 'lin54.bmp'))

The parameter is the path of picture.

  • Other functions.

For more information about the PIL library, you can search online.