分类
LCD/LED/显示屏系列

KE2052 keyes brick IIC 1602 蓝屏(5V) 防反插白色端子

 

KE2052-1-1

1.概述

这是一个可以显示2行,每行16个字符的液晶屏模块。液晶屏显示蓝底白字,自带I2C通信模块,使用时只需连接单片机I2C通信接口,大大节约了单片机资源。I2C通信模块上带有1个电位器,可用于调节显示屏背光,通信地址默认为0x27。

为了方面接线,我们还配送1根4pin线,线的一端为白色防反插接口(和模块上防反插白色端子匹配),另一端为4pin杜邦线母头接口。

模块兼容各种单片机控制板,如arduino系列单片机。使用时,我们可以在单片机上堆叠一个传感器扩展板。模块和自带导线连接,然后连接在传感器扩展板上,简单方便。同时,模块自带4个直径为3mm的定位孔,方便你将模块固定在其他设备。

2.规格参数

导线长度:200mm

工作电压:DC 5V

接口:间距为2.54mm 4pin防反接口

定位孔大小:直径为3mm

通讯方式:I2C通讯

I2C通信地址: 0x27

显示屏颜色:蓝底白字

尺寸:80*37*18mm

重量:34.7g

3.连接图

KE2052-3

4.测试代码

特别注意:在烧录程序前,要把Wire文件夹和LiquidCrystal_I2C文件夹放到 编译器安装目录下的\Arduino\libraries里。不然编译不过。例如我的:C:\Program Files\Arduino\libraries

#include<Wire.h>

#include<LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()

{

lcd.init();

lcd.init();

lcd.backlight();

lcd.setCursor(0,0);

lcd.print(“ABCDEFGHIJKLMNOP”);

lcd.setCursor(0,1);

lcd.print(“0123456789101112”);

}

void loop()

{

}

5.测试结果

烧录好测试代码,按照接线图连接好线;上电后,显示屏两行分别显示”ABCDEFGHIJKLMNOP”和”0123456789101112″字符。

特别注意:按照接线图接好线,上传好代码,上电后,显示屏没有字符显示时,可以调节LCD后面的电

位器,调节背光,使LCD显示对应字符。

6.库文件链接

https://pan.baidu.com/s/1q9nwlCdLAA6yUSoXNnkaOg

提取码:v7vh

分类
LCD/LED/显示屏系列

KE0160 keyes 圆形TFT LCD智能手表液晶屏模块 红色环保

KE0160-1

1.说明

keyes 圆形TFT LCD智能手表液晶屏模块是一款2.2寸 TFT液晶显示模块。它的输入电压为3.3V~-5.5V,能显示彩色的图案以及文字。模块上LCD刷屏最快约为256MS,可实现多个图案循环显示,可实现动态显示效果。目前库中定义了19种常用颜色,用户也可自定义16位颜色代码。实验时,我们设定坐标以显示屏中心为坐标原点,正负半轴最大绝对值为64。

为了方面将模块固定在其他设备上,模块自带2个直径为3mm的定位孔。

特别说明:

参数“2.2英寸”是按照屏幕供应商提供的屏幕规格书标注,实际显示区域的尺寸约为1.26英寸(直径32MM)。

2.技术参数

工作电压:DC 3.3V-5.5V

工作电流:50MA

最大功率:0.5W

分辨率:128*RGB*128

工作温度范围: -25~+60℃

尺寸:49*46*8m

接口:8pin排针接口(间距为2.54mm)

定位孔:直径为3mm

重量: 13.2g

3.TFT LCD尺寸图

300px-Size-03

4.引脚说明

名称 功能描述
GND 电源负极
VCC 电源正极
LCK 液晶屏内部寄存器时钟线
RS 液晶屏内部寄存器选择
CS 片选信号
WR 液晶屏数据输入
SPI-SCL 时钟信号
SPI-MOSI 主器件数据输出

5.接线方法

KE0160

6.测试代码

代码1:

#include “DFRobot_ST7687S_Latch.h”

#ifdef __AVR__

uint8_t pin_cs = 3, pin_rs = 5, pin_wr = 6, pin_lck = 7;

#else

uint8_t pin_cs = D3, pin_rs = D5, pin_wr = D6, pin_lck = D7;

#endif

DFRobot_ST7687S_Latch tft(pin_cs, pin_rs, pin_wr, pin_lck);

void setup(void)

{

Serial.begin(115200);

tft.begin();

tft.fillScreen(DISPLAY_WHITE);

}

void loop(void)

{

tft.drawTriangle(-20, -50, 0, 0, 50, 20, DISPLAY_ORANGE); //draw triangle

delay(1000);

tft.fillTriangle(-20, -50, 0, 0, 50, 20, DISPLAY_ORANGE); //fill triangle with color

delay(1000);

tft.fillScreen(DISPLAY_WHITE);

}

代码2:

#include “DFRobot_ST7687S_Latch.h”

#ifdef __AVR__

uint8_t pin_cs = 3, pin_rs = 5, pin_wr = 6, pin_lck = 7;

#else

uint8_t pin_cs = D3, pin_rs = D5, pin_wr = D6, pin_lck = D7;

#endif

DFRobot_ST7687S_Latch tft(pin_cs, pin_rs, pin_wr, pin_lck);

void setup(void)

{

Serial.begin(115200);

tft.begin();

tft.fillScreen(DISPLAY_BLACK);

}

void loop(void)

{

tft.setCursor(64, 64);

tft.setTextBackground(DISPLAY_RED); //set text background to black

tft.setTextColor(DISPLAY_WHITE); //set text color to white

tft.setTextSize(2); //2 * text size, default text size: 6 * 8

tft.print(“keyes”);

delay(1000);

}

注意:上传代码之前,必须将对应的库文件放置到安装Arduino IDE的库文件 文件夹中。

上传代码时,使用的是1.8.7版本的Arduino IDE测试,其他版本IDE不确定是否兼容。

调试方法:

  1. 颜色调节,目前库中定义了19种常用颜色,设置时直接更改为常用的颜色名称,如

tft.drawTriangle(-20, -50, 0, 0, 50, 20, DISPLAY_ORANGE); 改成

tft.drawTriangle(-20, -50, 0, 0, 50, 20, DISPLAY_GREEN); 即把橙色改成绿色。

我们也可以自定义4位16进制或十进制(0~65535)颜色代码,更改屏的背景颜色。

备注:参考颜色十六进制表, 并非所有颜色都可以显示出。

可更改为 tft.drawTriangle(-20, -50, 0, 0, 50, 20, 0x000099FF);

tft.drawTriangle(-20, -50, 0, 0, 50, 20, 39423);

把十六进制的数转化成十进制的数, 范围为0~65535, 即可显示对应颜色。

  1. 图案设置,坐标以显示屏中心为坐标原点,正负半轴最大绝对值为64。

tft.drawTriangle(-20, -50, 0, 0, 50, 20, DISPLAY_ORANGE);

代码中画一个顶点分别为(-20,-50)、(0,0)、(50,20)的三角形。

7. 测试结果

按照接线图接线,上传代码1,上电后,模块上TFT LCD会显示对应的图案。代码中画一个顶点分别为(-20,-50)、(0,0)、(50,20),边框颜色为橙色的三角形,并将其用橙色填充。

上传代码2,以2.2寸屏的屏心(64,64)为起始位置,在屏上显示一个文字背景为红色,字体为白色、字体倍数为2的字符串“keyes”,字体倍数设置函数tft.setTextSize(uint8_t size)的形参size应大于0,且字体超过屏幕的部分不会显示。

8.相关资料链接

https://pan.baidu.com/s/1OU5UXr3bX4iP-tfuCi5FXw

提取码:gsac

分类
LCD/LED/显示屏系列

KE0159keyes 电子墨水屏 2.13寸 250*122分辨率 红色环保

1.说明

当我们在DIY实验时,经常需要用到显示屏。keyes 电子墨水屏模块上带有一个2.13寸的显示屏,显示颜色为黑白色,分辨率为250*122。模块通过SPI通讯,可动态显示图案。模块上带有2个拨码开关,P1拨码开关用于调节显示亮度,拨打到“0.47”时,显示更亮;拨打到“3”时,显示更暗。P2拨码开关用于调节供电电压,拨打到“5VIN”时,供电电压为5V;拨打到“3.3VIN”时,供电电压为3.3V。

为了方便你使用,我们还提供显示屏模块和arduino单片机、树莓派搭配使用的详细方法。同时,为了方便将模块固定在其他设备上,模块自带2个直径为3mm的定位孔。

特别注意:测试时,我们使用的是1.8.9版本的IDE软件测试,如果使用其他版本IDE,

代码可能出现不兼容现象。

2.技术参数

工作电压: DC 3.3或5V(拨码开关控制)

工作电流:100mA

最大功率:0.8W

显示屏颜色:黑白色

显示屏大小:2.13寸

显示屏分辨率:250*122

接口类型:间距为2.54mm的8pin排针

工作温度范围:-20℃到+60℃

定位孔大小:直径3mm

尺寸:79*40*7mm

重量:9.6g

环保属性:ROHS

3.接线方法

UNO板连接方法

KE0159

树莓派连接方法

KE0159-2

4.测试代码

Arduino代码

#include”Ap_29demo.h”

//IO settings

int BUSY_Pin = 8;

int RES_Pin = 9;

int DC_Pin = 10;

int CS_Pin = 11;

int SCK_Pin = 12;

int SDI_Pin = 13;

#define EPD_W21_MOSI_0 digitalWrite(SDI_Pin,LOW)

#define EPD_W21_MOSI_1 digitalWrite(SDI_Pin,HIGH)

#define EPD_W21_CLK_0 digitalWrite(SCK_Pin,LOW)

#define EPD_W21_CLK_1 digitalWrite(SCK_Pin,HIGH)

#define EPD_W21_CS_0 digitalWrite(CS_Pin,LOW)

#define EPD_W21_CS_1 digitalWrite(CS_Pin,HIGH)

#define EPD_W21_DC_0 digitalWrite(DC_Pin,LOW)

#define EPD_W21_DC_1 digitalWrite(DC_Pin,HIGH)

#define EPD_W21_RST_0 digitalWrite(RES_Pin,LOW)

#define EPD_W21_RST_1 digitalWrite(RES_Pin,HIGH)

#define isEPD_W21_BUSY digitalRead(BUSY_Pin)

//250*122///////////////////////////////////////

#define MONOMSB_MODE 1

#define MONOLSB_MODE 2

#define RED_MODE 3

#define MAX_LINE_BYTES 16// =128/8

#define MAX_COLUMN_BYTES 250

#define ALLSCREEN_GRAGHBYTES 4000

////////FUNCTION//////

void driver_delay_us(unsigned int xus);

void driver_delay_xms(unsigned long xms);

void DELAY_S(unsigned int delaytime);

void SPI_Delay(unsigned char xrate);

void SPI_Write(unsigned char value);

void Epaper_Write_Command(unsigned char command);

void Epaper_Write_Data(unsigned char command);

//EPD

void Epaper_READBUSY(void);

void SPI_Write(u8 TxData);

void Epaper_Write_Command(u8 cmd);

void Epaper_Write_Data(u8 data);

void EPD_HW_Init(void); //Electronic paper initialization

void EPD_Part_Init(void); //Local refresh initialization

void EPD_Part_Update(void);

void EPD_Update(void);

void EPD_WhiteScreen_Black(void);

void EPD_WhiteScreen_White(void);

void EPD_DeepSleep(void);

//Display

void EPD_WhiteScreen_ALL(const unsigned char * datas);

void EPD_SetRAMValue_BaseMap(const unsigned char * datas);

void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE);

void setup() {

pinMode(BUSY_Pin, INPUT);

pinMode(RES_Pin, OUTPUT);

pinMode(DC_Pin, OUTPUT);

pinMode(CS_Pin, OUTPUT);

pinMode(SCK_Pin, OUTPUT);

pinMode(SDI_Pin, OUTPUT);

}

void loop() {

unsigned char fen_L,fen_H,miao_L,miao_H;

//////////////////////Partial refresh digital presentation//////////////////////////////////////

EPD_HW_Init(); //Electronic paper initialization

EPD_WhiteScreen_ALL(gImage_1); //Refresh the picture in full screen

delay(100);

EPD_SetRAMValue_BaseMap(gImage_basemap); //Partial refresh background color,Brush map is a must, please do not delete

delay(100);

////////////////////////////////////////////////////////////////////////

}

///////////////////EXTERNAL FUNCTION////////////////////////////////////////////////////////////////////////

/////////////////////delay//////////////////////////////////////

void driver_delay_us(unsigned int xus) //1us

{

for(;xus>1;xus–);

}

void driver_delay_xms(unsigned long xms) //1ms

{

unsigned long i = 0 , j=0;

for(j=0;j<xms;j++)

{

for(i=0; i<256; i++);

}

}

void DELAY_S(unsigned int delaytime)

{

int i,j,k;

for(i=0;i<delaytime;i++)

{

for(j=0;j<4000;j++)

{

for(k=0;k<222;k++);

 

}

}

}

//////////////////////SPI///////////////////////////////////

void SPI_Delay(unsigned char xrate)

{

unsigned char i;

while(xrate)

{

for(i=0;i<2;i++);

xrate–;

}

}

void SPI_Write(unsigned char value)

{

unsigned char i;

SPI_Delay(1);

for(i=0; i<8; i++)

{

EPD_W21_CLK_0;

SPI_Delay(1);

if(value & 0x80)

EPD_W21_MOSI_1;

else

EPD_W21_MOSI_0;

value = (value << 1);

SPI_Delay(1);

driver_delay_us(1);

EPD_W21_CLK_1;

SPI_Delay(1);

}

}

void Epaper_Write_Command(unsigned char command)

{

SPI_Delay(1);

EPD_W21_CS_0;

EPD_W21_DC_0; // command write

SPI_Write(command);

EPD_W21_CS_1;

}

void Epaper_Write_Data(unsigned char command)

{

SPI_Delay(1);

EPD_W21_CS_0;

EPD_W21_DC_1; // command write

SPI_Write(command);

EPD_W21_CS_1;

}

/////////////////EPD settings Functions/////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////

void EPD_HW_Init(void)

{

EPD_W21_RST_0;

delay(1);

EPD_W21_RST_1; //hard reset

delay(1);

Epaper_READBUSY();

Epaper_Write_Command(0x12); //SWRESET

Epaper_READBUSY();

 

Epaper_Write_Command(0x01); //Driver output control

Epaper_Write_Data(0xF9);

Epaper_Write_Data(0x00);

Epaper_Write_Data(0x00);

Epaper_Write_Command(0x11); //data entry mode

Epaper_Write_Data(0x01);

Epaper_Write_Command(0x44); //set Ram-X address start/end position

Epaper_Write_Data(0x00);

Epaper_Write_Data(0x0F); //0x0F–>(15+1)*8=128

Epaper_Write_Command(0x45); //set Ram-Y address start/end position

Epaper_Write_Data(0xF9); //0xF9–>(249+1)=250

Epaper_Write_Data(0x00);

Epaper_Write_Data(0x00);

Epaper_Write_Data(0x00);

Epaper_Write_Command(0x3C); //BorderWavefrom

Epaper_Write_Data(0x01);

 

Epaper_Write_Command(0x18);

Epaper_Write_Data(0x80);

Epaper_Write_Command(0x4E); // set RAM x address count to 0;

Epaper_Write_Data(0x00);

Epaper_Write_Command(0x4F); // set RAM y address count to 0X199;

Epaper_Write_Data(0xF9);

Epaper_Write_Data(0x00);

Epaper_READBUSY();

 

}

//////////////////////////////All screen update////////////////////////////////////////////

void EPD_WhiteScreen_ALL(const unsigned char * datas)

{

unsigned int i;

Epaper_Write_Command(0x24); //write RAM for black(0)/white (1)

for(i=0;i<ALLSCREEN_GRAGHBYTES;i++)

{

Epaper_Write_Data(pgm_read_byte(&datas[i]));

}

EPD_Update();

}

/////////////////////////////////////////////////////////////////////////////////////////

void EPD_Update(void)

{

Epaper_Write_Command(0x22);

Epaper_Write_Data(0xF7);

Epaper_Write_Command(0x20);

Epaper_READBUSY();

}

void EPD_Part_Update(void)

{

Epaper_Write_Command(0x22);

Epaper_Write_Data(0xFF);

Epaper_Write_Command(0x20);

Epaper_READBUSY();

}

void EPD_DeepSleep(void)

{

Epaper_Write_Command(0x10); //enter deep sleep

Epaper_Write_Data(0x01);

delay(100);

}

void Epaper_READBUSY(void)

{

while(1)

{ //=1 BUSY

if(isEPD_W21_BUSY==0) break;

}

}

///////////////////////////Part update//////////////////////////////////////////////

void EPD_SetRAMValue_BaseMap( const unsigned char * datas)

{

unsigned int i;

const unsigned char *datas_flag;

datas_flag=datas;

Epaper_Write_Command(0x24); //Write Black and White image to RAM

for(i=0;i<ALLSCREEN_GRAGHBYTES;i++)

{

Epaper_Write_Data(pgm_read_byte(&datas[i]));

}

datas=datas_flag;

Epaper_Write_Command(0x26); //Write Black and White image to RAM

for(i=0;i<ALLSCREEN_GRAGHBYTES;i++)

{

Epaper_Write_Data(pgm_read_byte(&datas[i]));

}

EPD_Update();

}

void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE)

{

unsigned int i;

unsigned int x_end,y_start1,y_start2,y_end1,y_end2;

x_start=x_start/8;//

x_end=x_start+PART_LINE/8-1;

 

y_start1=0;

y_start2=y_start;

if(y_start>=256)

{

y_start1=y_start2/256;

y_start2=y_start2%256;

}

y_end1=0;

y_end2=y_start+PART_COLUMN-1;

if(y_end2>=256)

{

y_end1=y_end2/256;

y_end2=y_end2%256;

}

 

Epaper_Write_Command(0x44); // set RAM x address start/end, in page 35

Epaper_Write_Data(x_start); // RAM x address start at 00h;

Epaper_Write_Data(x_end); // RAM x address end at 0fh(15+1)*8->128

Epaper_Write_Command(0x45); // set RAM y address start/end, in page 35

Epaper_Write_Data(y_start2); // RAM y address start at 0127h;

Epaper_Write_Data(y_start1); // RAM y address start at 0127h;

Epaper_Write_Data(y_end2); // RAM y address end at 00h;

Epaper_Write_Data(y_end1); // ????=0

Epaper_Write_Command(0x4E); // set RAM x address count to 0;

Epaper_Write_Data(x_start);

Epaper_Write_Command(0x4F); // set RAM y address count to 0X127;

Epaper_Write_Data(y_start2);

Epaper_Write_Data(y_start1);

 

 

Epaper_Write_Command(0x24); //Write Black and White image to RAM

for(i=0;i<PART_COLUMN*PART_LINE/8;i++)

{

Epaper_Write_Data(pgm_read_byte(&datas[i]));

}

EPD_Part_Update();

}

/////////////////////////////////Single display////////////////////////////////////////////////

void EPD_WhiteScreen_Black(void)

{

unsigned int i,k;

Epaper_Write_Command(0x24); //write RAM for black(0)/white (1)

for(k=0;k<250;k++)

{

for(i=0;i<16;i++)

{

Epaper_Write_Data(0x00);

}

}

EPD_Update();

}

void EPD_WhiteScreen_White(void)

{

unsigned int i,k;

Epaper_Write_Command(0x24); //write RAM for black(0)/white (1)

for(k=0;k<250;k++)

{

for(i=0;i<16;i++)

{

Epaper_Write_Data(0xff);

}

}

EPD_Update();

}

树莓派代码(main.c)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include “epd1in54.h”

#include “epdpaint.h”

#include “imagedata.h”

#define COLORED 0

#define UNCOLORED 1

//Tips//

/*When the electronic paper is refreshed in full screen, the picture flicker is a normal phenomenon, and the main function is to clear the display afterimage in the previous picture.

When the local refresh is performed, the screen does not flash.*/

/*When you need to transplant the driver, you only need to change the corresponding IO. The BUSY pin is the input mode and the others are the output mode. */

int main(void)

{

time_t now;

struct tm* timenow;

Epd epd;

if (epd.Init(lut_full_update) != 0) {

printf(“e-Paper init failed\n”);

return -1;

}

//Full screen refresh

epd.EPD_HW_Init(); //Electronic paper initialization

epd.EPD_WhiteScreen_ALL(gImage_1); //Refresh the picture in full screen

//epd.DelayMs(500);

//////////////////////Partial refresh digital presentation//////////////////////////////////////

epd.EPD_HW_Init(); //Electronic paper initialization

epd.EPD_SetRAMValue_BaseMap(gImage_2); //Partial refresh background color

epd.EPD_HW_Init(); //Electronic paper initialization

epd.EPD_SetRAMValue_BaseMap(gImage_3); //Partial refresh background color

epd.EPD_HW_Init(); //Electronic paper initialization

epd.EPD_Dis_Part(0,32,gImage_num1,32,32); //x,y,DATA,Resolution 32*32

epd.EPD_Dis_Part(0,32,gImage_num2,32,32); //x,y,DATA,Resolution 32*32

epd.EPD_Dis_Part(0,32,gImage_num3,32,32); //x,y,DATA,Resolution 32*32

//epd.DelayMs(500);

//all white

epd.EPD_HW_Init(); //Electronic paper initialization

epd.EPD_WhiteScreen_ALL(gImage_white); //Refresh the picture in full screen

epd.Sleep(); //EPD_sleep,Sleep instruction is necessary, please do not delete!!!

while(1);

}

5.arduino代码设置方法

  1. 设置时,我们需要安装Image2Lcd取模软件,安装后,利用注册码注册。
  2. 利用画图软件,画出你需要的图案,导出设置为黑白色,像素设置为250*122。
  3. 打开取模软件,设置如下图。

       4.点击打开,选择你导出的图案,如下图。

       正显(白底黑字),则“颜色反转”打钩;负显(黑底白字)则不需要打钩。

        5.点击 ,即可生成对应的C语言代码,如下图。

        6.将生成的C语言代码,复制到代码中的const unsigned char                                    gImage_basemap[4000] PROGMEM或者const unsigned char                              gImage_1[4000] PROGMEM位置,如下图。

6.树莓派设置方法

  1. 按照树莓派接线方法,将模块接到树莓派上(我的是树莓派4B)
  2. 打开树莓派终端,输入以下指令进入配置界面,开启SPI接口功能。

sudo raspi-config

Interfacing Options -> SPI -> Yes

然后重启树莓派。

sudo reboot

         3.在树莓派系统中建立KE0159文件夹,并将树莓派代码全部复制到KE0159文件夹中。

D、进入树莓派终端,执行以下指令,显示屏上回显示对应图片。

cd KE0159

make clean
make
ls
sudo ./epd

按Ctrl+C退出测试程序。

      4.我们可以在main.c文件中设置显示内容。

     5.当在main.c设置显示内容后,在imagedata.cpp中设置图像代码

设置方法和前面介绍的方法一样。

      6.在imagedata.h中要特别注明设置图片名称。

 

7.测试结果

按照接线图接线,上传测试代码成功,上电后,显示屏会循环显示各种图案。

(此时拨码开关1拨打到“0.47”,拨码开关2拨打到“5VIN”)

8.相关资料链接

https://pan.baidu.com/s/1M4lVwg85N2IRPdVrWIhfmg

提取码:hlop

分类
LCD/LED/显示屏系列

KE0158 keyes 电子墨水屏 1.54寸 200*200分辨率 红色环保

1.说明

当我们在DIY实验时,经常需要用到显示屏。keyes 电子墨水屏模块上带有一个1.54寸的显示屏,显示颜色为黑白色,分辨率为200*200。模块通过SPI通讯,可动态显示图案。

为了方便你使用,我们还提供显示屏模块和arduino单片机、树莓派搭配使用的详细方法。同时,为了方便将模块固定在其他设备上,模块自带4个直径为3mm的定位孔。

特别注意:测试时,我们使用的是1.8.9版本的IDE软件测试,如果使用其他版本IDE,

代码可能出现不兼容现象。

2.技术参数

工作电压: DC 5V

工作电流:150mA

最大功率:0.75W

显示屏颜色:黑白色

显示屏大小:1.54寸

显示屏分辨率:200*200

接口类型:间距为2.54mm的8pin排针

工作温度范围:-20℃到+60℃

定位孔大小:直径3mm

尺寸:56*45*7mm

重量:15.2g

3.接线方法

UNO板连接方法

KE0158

树莓派连接方法

KE0158

4.测试代码

Arduino代码

#include <SPI.h>

#include “epd1in54_V2.h”

#include “imagedata.h”

Epd epd;

void setup()

{

// put your setup code here, to run once:

Serial.begin(9600);

if (epd.Init() != 0) {

Serial.println(“e-Paper init failed”);

return;

}

/*

Serial.println(“e-Paper clear”);

epd.Clear();

Serial.println(“e-Paper show pic”);

epd.Display(IMAGE_DATA);

Serial.println(“e-Paper clear and sleep”);

epd.Clear();

epd.Sleep();

*/

}

void loop()

{

epd.Display(IMAGE_DATA);

delay(1000);

epd.Display(IMAGE_DATA1);

delay(1000);

}

树莓派代码(python)

#!/usr/bin/python

# -*- coding:utf-8 -*-

import sys

import os

picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), ‘pic’)

libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), ‘lib’)

if os.path.exists(libdir):

sys.path.append(libdir)

import logging

from waveshare_epd import epd1in54_V2

import time

from PIL import Image,ImageDraw,ImageFont

import traceback

logging.basicConfig(level=logging.DEBUG)

try:

logging.info(“epd1in54_V2 Demo”)

 

epd = epd1in54_V2.EPD()

logging.info(“init and Clear”)

epd.init()

epd.Clear(0xFF)

time.sleep(1)

 

# Drawing on the image

logging.info(“1.Drawing on the image…”)

image = Image.new(‘1’, (epd.width, epd.height), 255) # 255: clear the frame

 

draw = ImageDraw.Draw(image)

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

draw.rectangle((0, 10, 200, 34), fill = 0)

draw.text((8, 12), ‘hello world’, font = font, fill = 255)

draw.text((8, 36), u’keyestudio’, font = font, fill = 0)

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

draw.line((56, 60, 56, 110), fill = 0)

draw.line((16, 110, 56, 110), fill = 0)

draw.line((16, 110, 16, 60), fill = 0)

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

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

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

draw.rectangle((16, 130, 56, 180), fill = 0)

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

epd.display(epd.getbuffer(image.rotate(90)))

time.sleep(2)

 

# read bmp file

logging.info(“2.read bmp file…”)

image = Image.open(os.path.join(picdir, ‘1in54.bmp’))

epd.display(epd.getbuffer(image))

time.sleep(2)

 

# read bmp file on window

# logging.info(“3.read bmp file on window…”)

# epd.Clear(0xFF)

# image1 = Image.new(‘1’, (epd.width, epd.height), 255) # 255: clear the frame

# bmp = Image.open(os.path.join(picdir, ‘100×100.bmp’))

# image1.paste(bmp, (50,50))

# epd.display(epd.getbuffer(image1))

# time.sleep(2)

 

# partial update

logging.info(“4.show time…”)

time_image = Image.new(‘1’, (epd.width, epd.height), 255)

epd.displayPartBaseImage(epd.getbuffer(time_image))

 

time_draw = ImageDraw.Draw(time_image)

num = 0

while (True):

time_draw.rectangle((10, 10, 120, 50), fill = 255)

time_draw.text((10, 10), time.strftime(‘%H:%M:%S’), font = font, fill = 0)

newimage = time_image.crop([10, 10, 120, 50])

time_image.paste(newimage, (10,10))

epd.displayPart(epd.getbuffer(time_image))

num = num + 1

if(num == 10):

break

 

logging.info(“Clear…”)

epd.init()

epd.Clear(0xFF)

 

logging.info(“Goto Sleep…”)

epd.sleep()

 

except IOError as e:

logging.info(e)

 

except KeyboardInterrupt:

logging.info(“ctrl + c:”)

epd1in54_V2.epdconfig.module_exit()

exit()

5.Arduino代码设置方法

  1. 设置时,我们需要安装Image2Lcd取模软件,安装后,利用注册码注册。
  2. 利用画图软件,画出你需要的图案,导出设置为黑白色,像素设置为200*200。
  3. 打开取模软件,设置如下图。

     4.点击打开,选择你导出的图案,如下图。正显(白底黑字),则“颜色反转”打      钩;负显(黑底白字)则不需要打钩。

     5.点击 ,即可生成对应的C语言代码,如下图。

     6.将生成的C语言代码,复制到代码中的const unsigned char IMAGE_DATA[]        PROGMEM位置,如下图。

6.树莓派设置方法

  1. 按照树莓派接线方法,将模块接到树莓派上(我的是树莓派4B)
  2. 打开树莓派终端,输入以下指令进入配置界面,开启SPI接口功能。

sudo raspi-config

Interfacing Options -> SPI -> Yes

然后重启树莓派。

sudo reboot

      3.在树莓派终端,并运行以下指令,安装BCM2835库文件。

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz

tar zxvf bcm2835-1.60.tar.gz

cd bcm2835-1.60/

sudo ./configure

sudo make

sudo make check

sudo make install

      4.安装完驱动后,在pi文件夹内可以看到bcm2835-1.60文件夹。

      5.将keyestudio-e-Paper压缩包,复制到bcm2835-1.60文件夹。并解压到bcm2835-1.60文件夹。生成的keyestudio-e-Paper文件夹带有测试代码和相关设置文件。

      6.通过以下指令,控制水墨屏显示不同图案。

cd bcm2835-1.60/keyestudio-e-Paper/python/examples/

ls

Sudo python epd_1in54_V2_test.py

      7.特别注意,在实验中,设置代码时,我们需要调用显示图案。显示图案的路径为/home/pi/bcm2835-1.60/keyestudio-e-Paper/python/pic

图案的像素是200*200。

7.测试结果

按照接线图接线,上传测试代码成功,上电后,显示屏会循环显示各种图案。

8.相关资料链接

https://pan.baidu.com/s/1dSinjzt0MrR2xqqAbb_xkQ

提取码:3d67