匿名
未登录
登录
丢石头百科
搜索
查看“模板:E-Paper-codes-description”的源代码
来自丢石头百科
名字空间
模板
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
模板:E-Paper-codes-description
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
我们提供了基于4个硬件平台的示例程序,分别是Arduino UNO, Jetson Nano, Raspberry Pi以及STM32。您可以根据自己的需求查看。(这里是SPI墨水屏通用模板,所以会有些函数不适用于您手上的屏幕,具体以示例程序为准)<br /> 程序分为底层硬件接口、中间层墨水屏驱动、上层应用;<br /> 实际上使用的语言为C\C++\python:<br /> *Arduino UNO:提供C++他是兼容C的 *Jetson Nano:提供了C语言、python *Raspberry Pi:提供了C语言、python *STM32:提供了C语言 其中:<br /> Jetson Nano、Raspberry Pi、STM32的C语言:EPD库互相兼容,他们只有底层硬件接口不一样,其他都是一样的;<br /> Jetson Nano、Raspberry Pi的python:EPD库互相兼容,他们只有底层硬件接口不一样,其他都是一样的;<br /> 因此以下分开讲解C\C++\python,每小章节依次讲解底层硬件接口、中间层墨水屏驱动、上层应用<br /> ==C(适用于Jetson Nano、Raspberry Pi、STM32)== ===底层硬件接口=== 我们进行了底层的封装,由于硬件平台不一样,内部的实现是不一样的,如果需要了解内部实现可以去对应的目录中查看<br /> 在DEV_Config.c(.h)可以看到很多定义,包括:<br /> 对于Raspberry Pi,在目录:RaspberryPi&JetsonNano\c\lib\Config<br /> C语言使用了2种方式进行驱动:分别是BCM2835库、WiringPi库 默认使用WiringPi库进行操作,如果你需要使用BCM2835来驱动的话,可以打开RaspberryPi&JetsonNano\c\Makefile,修改13-14行,如下: [[file:e-paper_Driver_HAT_RPI_Makefile.png|700px]] 对于Jetson Nano,在目录:RaspberryPi&JetsonNano\c\lib\Config<br /> 对于STM32,在目录:STM32\STM32-F103ZET6\User\Config<br /> *数据类型: #define UBYTE uint8_t #define UWORD uint16_t #define UDOUBLE uint32_t *模块初始化与退出的处理: void DEV_Module_Init(void); void DEV_Module_Exit(void); 注意: 1.这里是处理使用墨水屏前与使用完之后一些GPIO的处理。 2.对于PCB带有Rev2.1的,DEV_Module_Exit()之后整个模块会进入低功耗,经过测试这个功耗基本为0; *GPIO读写: void DEV_Digital_Write(UWORD Pin, UBYTE Value); UBYTE DEV_Digital_Read(UWORD Pin); *SPI写数据 void DEV_SPI_WriteByte(UBYTE Value); ===中间层墨水屏驱动=== e-paper驱动代码文件,在如下的目录中可以找到<br /> 对于Raspberry Pi和Jetson Nano,在目录:RaspberryPi&JetsonNano\c\lib\e-Paper<br /> 对于STM32,在目录:STM32\STM32-F103ZET6\User\e-Paper<br /> 如下图:<br /> [[file:e-paper_Driver_HAT_RPI_epd.png|700px]]<br /> 打开.h可以看到如下的函数<br /> *墨水屏初始化,再屏幕开始工作时和退出睡眠模式之后调用 '''//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 全局刷新初始化、Mode = 1 局部刷新初始化 '''//其他型号 void EPD_xxx_Init(void); 其中xxx表示,墨水屏型号。如是是2.13D,全屏初始化那么是EPD_2IN13D_Init(0),局部刷新初始化EPD_2IN13D_Init(1);如果是1.54 V2,那么EPD_1IN54_V2_Init();如果是7.5B,那就是EPD_7IN5BC_Init(),因为7.5B与7.5C公用驱动代码,只是显示的颜色不一样 *清屏,把墨水屏刷成白色 void EPD_xxx_Clear(void); 其中xxx表示,墨水屏型号。如是是2.13D,那么是EPD_2IN9D_Clear();如果是7.5B,那就是EPD_7IN5_Clear(),因为7.5B与7.5C公用驱动代码,只是显示的颜色不一样<br /> *传输一帧的图片数据并打开显示 '''//黑白双色墨水屏 void EPD_xxx_Display(UBYTE *Image); '''//黑白红或黑白黄墨水屏 void EPD_xxx_Display(const UBYTE *blackimage, const UBYTE *ryimage); '''需要注意以下的几个是特例:<br /> '''//对于2.13inch e-paper (D)、2.9inch e-paper (D)两款柔性屏幕,局部刷新 void EPD_2IN13D_DisplayPart(UBYTE *Image); void EPD_2IN9D_DisplayPart(UBYTE *Image); '''//对于1.54inch e-paper V2、2.13inch e-paper V2由于控制芯片升级,对于局部刷新,需要调用EPD_xxx_DisplayPartBaseImage显示静态的背景图片,也就是以这个图片为基础进行局部刷新,然后调用动态的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); '''//对于STM32103ZET6,无法创建7.5B、7.5C、5.83B、5.83C足够的图像缓存,所以显示的半屏: void EPD_7IN5BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage); void EPD_5IN83BC_DisplayHalfScreen(const UBYTE *blackimage, const UBYTE *ryimage); 其中xxx表示,墨水屏型号。如是是2.13D,那么是EPD_2IN13D_Display();如果是7.5B,那就是EPD_7IN5BC_Display(),因为7.5B与7.5C公用驱动代码,只是显示的颜色不一样<br /> *进入睡眠模式 void EPD_xxx_Sleep(void); 注意进入了睡眠模式,只有两个方式能够重新工作:第一种硬件复位,第二种重新调用初始化函数<br /> 其中xxx表示,墨水屏型号。如是是2.13D,那么是EPD_2IN13D_Sleep();如果是7.5B,那就是EPD_7IN5BC_Sleep(),因为7.5B与7.5C公用驱动代码,只是显示的颜色不一样<br /> ===上层应用=== 对于屏幕而言,如果需要进行画图、显示中英文字符、显示图片等怎么办,这些都是上层应用做的。这有很多小伙伴有问到一些图形的处理,我们这里提供了一些基本的功能 在如下的目录中可以找到GUI<br /> 对于Raspberry Pi和Jetson Nano,在目录:RaspberryPi&JetsonNano\c\lib\GUI\GUI_Paint.c(.h)<br /> 对于STM32,在目录:STM32\STM32-F103ZET6\User\GUI\GUI_Paint.c(.h)<br /> [[file:e-paper_Driver_HAT_GUI.png|700px]]<br /> 在如下目录下是GUI依赖的字符字体:<br /> 对于Raspberry Pi和Jetson Nano,在目录:RaspberryPi&JetsonNano\c\lib\Fonts<br /> 对于STM32,在目录:STM32\STM32-F103ZET6\User\Fonts<br /> [[file:e-paper_Driver_HAT_Fonts.png|700px]]<br /> *新建图像属性:新建一个图像属性,这个属性包括图像缓存的名称、宽度、高度、翻转角度、颜色 <pre> void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color) 参数: image : 图像缓存的名称,实际上是一个指向图像缓存首地址的指针; Width : 图像缓存的宽度; Height: 图像缓存的高度; Rotate:图像的翻转的角度 Color :图像的初始颜色; </pre> *选择图像缓存:选择图像缓存,选择的目的是你可以创建多个图像属性,图像缓存可以存在多个,你可以选择你所创建的每一张图像 <pre>void Paint_SelectImage(UBYTE *image) 参数: image: 图像缓存的名称,实际上是一个指向图像缓存首地址的指针; </pre> *图像旋转:设置选择好的图像的旋转角度,最好使用在Paint_SelectImage()后,可以选择旋转0、90、180、270 <pre>void Paint_SetRotate(UWORD Rotate) 参数: Rotate: 图像选择角度,可以选择ROTATE_0、ROTATE_90、ROTATE_180、ROTATE_270分别对应0、90、180、270度 </pre> :【说明】不同选择角度下,坐标对应起始像素点不同,这里以1.54B为例,四张图,按顺序为0°, 90°, 180°, 270°。仅做为参考 :[[File:SPI-epaper-C-0.png|200px]] [[File:SPI-epaper-C-90.png|200px]] [[File:SPI-epaper-C-180.png|200px]][[File:SPI-epaper-C-270.png|200px]] *图像镜像翻转:设置选择好的图像的镜像翻转,可以选择不镜像、关于水平镜像、关于垂直镜像、关于图像中心镜像。 <pre>void Paint_SetMirroring(UBYTE mirror) 参数: mirror: 图像的镜像方式,可以选择MIRROR_NONE、MIRROR_HORIZONTAL、MIRROR_VERTICAL、MIRROR_ORIGIN分别对应不镜像、关于水平镜像、关于垂直镜像、关于图像中心镜像 </pre> *设置点在缓存中显示位置和颜色:这里是GUI最核心的一个函数、处理点在缓存中显示位置和颜色; <pre> void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color) 参数: Xpoint: 点在图像缓存中X位置 Ypoint: 点在图像缓存中Y位置 Color : 点显示的颜色 </pre> *图像缓存填充颜色:把图像缓存填充为某颜色,一般作为屏幕刷白的作用 <pre> void Paint_Clear(UWORD Color) 参数: Color: 填充的颜色 </pre> *图像缓存部分窗口填充颜色:把图像缓存的某部分窗口填充为某颜色,一般作为窗口刷白的作用,常用于时间的显示,刷白上一秒 <pre> void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color) 参数: Xstart: 窗口的X起点坐标 Ystart: 窗口的Y起点坐标 Xend: 窗口的X终点坐标 Yend: 窗口的Y终点坐标 Color: 填充的颜色 </pre> *画点:在图像缓存中,在(Xpoint, Ypoint)上画点,可以选择颜色,点的大小,点的风格 <pre> void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style) 参数: Xpoint: 点的X坐标 Ypoint: 点的Y坐标 Color: 填充的颜色 Dot_Pixel: 点的大小,提供默认的8种大小点 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: 点的风格,大小扩充方式是以点为中心扩大还是以点为左下角往右上扩大 typedef enum { DOT_FILL_AROUND = 1, DOT_FILL_RIGHTUP, } DOT_STYLE; </pre> *画线:在图像缓存中,从 (Xstart, Ystart) 到 (Xend, Yend) 画线,可以选择颜色,线的宽度,线的风格 <pre> void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, LINE_STYLE Line_Style , LINE_STYLE Line_Style) 参数: Xstart: 线的X起点坐标 Ystart: 线的Y起点坐标 Xend: 线的X终点坐标 Yend: 线的Y终点坐标 Color: 填充的颜色 Line_width: 线的宽度,提供默认的8种宽度 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: 线的风格,选择线是以直线连接还是以虚线的方式连接 typedef enum { LINE_STYLE_SOLID = 0, LINE_STYLE_DOTTED, } LINE_STYLE; </pre> *画矩形:在图像缓存中,从 (Xstart, Ystart) 到 (Xend, Yend) 画一个矩形,可以选择颜色,线的宽度,是否填充矩形内部 <pre> void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) 参数: Xstart: 矩形的X起点坐标 Ystart: 矩形的Y起点坐标 Xend: 矩形的X终点坐标 Yend: 矩形的Y终点坐标 Color: 填充的颜色 Line_width: 矩形四边的宽度,提供默认的8种宽度 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: 填充,是否填充矩形的内部 typedef enum { DRAW_FILL_EMPTY = 0, DRAW_FILL_FULL, } DRAW_FILL; </pre> *画圆:在图像缓存中,以 (X_Center Y_Center) 为圆心,画一个半径为Radius的圆,可以选择颜色,线的宽度,是否填充圆内部 <pre> void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) 参数: X_Center: 圆心的X坐标 Y_Center: 圆心的Y坐标 Radius:圆的半径 Color: 填充的颜色 Line_width: 圆弧的宽度,提供默认的8种宽度 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: 填充,是否填充圆的内部 typedef enum { DRAW_FILL_EMPTY = 0, DRAW_FILL_FULL, } DRAW_FILL; </pre> *写Ascii字符:在图像缓存中,在 (Xstart Ystart) 为左顶点,写一个Ascii字符,可以选择Ascii码可视字符字库、字体前景色、字体背景色 <pre> void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Ascii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) 参数: Xstart: 字符的左顶点X坐标 Ystart: 字体的左顶点Y坐标 Ascii_Char:Ascii字符 Font: Ascii码可视字符字库,在Fonts文件夹中提供了以下字体: font8:5*8的字体 font12:7*12的字体 font16:11*16的字体 font20:14*20的字体 font24:17*24的字体 Color_Foreground: 字体颜色 Color_Background: 背景颜色 </pre> *写英文字符串:在图像缓存中,在 (Xstart Ystart) 为左顶点,写一串英文字符,可以选择Ascii码可视字符字库、字体前景色、字体背景色 <pre> void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) 参数: Xstart: 字符的左顶点X坐标 Ystart: 字体的左顶点Y坐标 pString:字符串,字符串是一个指针 Font: Ascii码可视字符字库,在Fonts文件夹中提供了以下字体: font8:5*8的字体 font12:7*12的字体 font16:11*16的字体 font20:14*20的字体 font24:17*24的字体 Color_Foreground: 字体颜色 Color_Background: 背景颜色 </pre> *写中文字符串:在图像缓存中,在 (Xstart Ystart) 为左顶点,写一串中文字符,可以选择GB2312编码字符字库、字体前景色、字体背景色; <pre> void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, UWORD Color_Foreground, UWORD Color_Background) 参数: Xstart: 字符的左顶点X坐标 Ystart: 字体的左顶点Y坐标 pString:字符串,字符串是一个指针 Font: GB2312编码字符字库,在Fonts文件夹中提供了以下字体: font12CN:ascii字符字体11*21,中文字体16*21 font24CN:ascii字符字体24*41,中文字体32*41 Color_Foreground: 字体颜色 Color_Background: 背景颜色 </pre> *写数字:在图像缓存中,在 (Xstart Ystart) 为左顶点,写一串数字,可以选择Ascii码可视字符字库、字体前景色、字体背景色 <pre> void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) 参数: Xstart: 字符的左顶点X坐标 Ystart: 字体的左顶点Y坐标 Nummber:显示的数字,这里使用的是32位长的int型保存,可以最大显示到2147483647 Font: Ascii码可视字符字库,在Fonts文件夹中提供了以下字体: font8:5*8的字体 font12:7*12的字体 font16:11*16的字体 font20:14*20的字体 font24:17*24的字体 Color_Foreground: 字体颜色 Color_Background: 背景颜色 </pre> *显示时间:在图像缓存中,在 (Xstart Ystart) 为左顶点,显示一段时间,可以选择Ascii码可视字符字库、字体前景色、字体背景色;这里是方便测试局部刷新而写的,因为局部刷新需要的时间为0.3S,整体显示少于1S加上数据的传输,可以做到1S刷新一次 <pre> void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, UWORD Color_Background, UWORD Color_Foreground) 参数: Xstart: 字符的左顶点X坐标 Ystart: 字体的左顶点Y坐标 pTime:显示的时间,这里定义好了一个时间的结构体,只要把时分秒各位数传给参数; Font: Ascii码可视字符字库,在Fonts文件夹中提供了以下字体: font8:5*8的字体 font12:7*12的字体 font16:11*16的字体 font20:14*20的字体 font24:17*24的字体 Color_Foreground: 字体颜色 Color_Background: 背景颜色 </pre> *写图片:把一个位图写入图像缓存中 <pre> void Paint_DrawBitMap(const unsigned char* image_buffer) 参数: image_buffer: 图像数据的缓存中的首地址 </pre> *读取本地的bmp图片并写到缓存中 对于Jetson Nano, Raspberry Pi这些Linux操作系统的,可以读写图片<br /> 对于Raspberry Pi和Jetson Nano,在目录:RaspberryPi&JetsonNano\c\lib\GUI\GUI_BMPfile.c(.h)<br /> <pre> UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart) 参数: path:BMP图片的相对路径 Xstart: 图片的左顶点X坐标,一般默认传0 Ystart: 图片的左顶点Y坐标,一般默认传0 </pre> ===用户测试代码=== 前三个章节介绍了经典的linux三层代码结构,这里稍微讲解一下用户测试代码<br /> 对于Raspberry Pi和Jetson Nano,在目录:RaspberryPi&JetsonNano\c\examples,为全部的测试代码,在本目录下的main.c中可以多个屏蔽;<br /> [[file:e-Paper_Shield_c_test.png|700px]]<br /> 如果需要运行7.5inch e-paper测试程序,你需要把42行的屏蔽去掉<br /> // EPD_7in5_test(); 改成<br /> EPD_7in5_test(); 在linux命令模式下重新执行如下:<br /> <pre> make clean make sudo ./epd </pre> 对于STM32,在目录:STM32\STM32-F103ZET6\User\Examples,为全部的测试代码,可以打开工程后在mai.c中本目录下的main.c中可以多个屏蔽;<br /> 打开工程:STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx<br /> [[file:e-paper_Driver_stm32_main.png|700px]]<br /> 如果需要运行7.5inch e-paper测试程序,你需要把96行的屏蔽去掉<br /> // EPD_7in5_test(); 改成<br /> EPD_7in5_test(); 在Keil中重新编译并选择下载器下载<br /> ==Python(适用于Jetson Nano\Raspberry Pi)== 适用于python2.7和python3<br /> 对于python而言他的调用没有C复杂<br /> Raspberry Pi和Jetson Nano:RaspberryPi&JetsonNano\python\lib\<br /> [[file:e-paper_Driver_python_lib.png|700px]]<br /> ===epdconfig.py=== *模块初始化与退出的处理: <pre> def module_init() def module_exit() 注意: 1.这里是处理使用墨水屏前与使用完之后一些GPIO的处理。 2.对于PCB带有Rev2.1的,module_exit()之后整个模块会进入低功耗,经过测试这个功耗基本为0; </pre> *GPIO读写: <pre> def digital_write(pin, value) def digital_read(pin) </pre> *SPI写数据 <pre> def spi_writebyte(data) </pre> ===epdxxx.py(xxx表示尺寸,若是2.13inch e-paper,则为epd2in13.py,依此类推)=== *墨水屏初始化,再屏幕开始工作时和退出睡眠模式之后调用 <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) def init(self, update) # 选择lut_full_update或lut_partial_update 其他型号 def init(self) </pre> *清屏,把墨水屏刷成白色 <pre> def Clear(self) def Clear(self, color) # 对于某几个屏幕需要调用这个 </pre> *把图片转换成数组 <pre> def getbuffer(self, image) </pre> *传输一帧的图片数据并打开显示 <pre> 黑白双色墨水屏 def display(self, image) 黑白红或黑白黄墨水屏 def display(self, blackimage, redimage) 需要注意以下的几个是特例:<br /> 对于2.13inch e-paper (D)、2.9inch e-paper (D)两款柔性屏幕,局部刷新 def DisplayPartial(self, image) 对于1.54inch e-paper V2、2.13inch e-paper V2由于控制芯片升级,对于局部刷新,需要调用displayPartBaseImage()显示静态的背景图片,也就是以这个图片为基础进行局部刷新,然后调用动态的displayPart() def displayPartBaseImage(self, image) def displayPart(self, image) </pre> *进入睡眠模式 <pre> def sleep(self) </pre> ===epd_xxx_test.py(xxx表示尺寸,若是2.13inch e-paper,则为epd_2in13_test.py,依此类推)=== python在如下目录:<br /> Raspberry Pi和Jetson Nano:RaspberryPi&JetsonNano\python\examples\<br /> [[file:e-paper_Driver_python_examples.png|700px]]<br /> 如果你的python版本是python2,且需要运行7.5inch e-paper测试程序,在linux命令模式下重新执行如下:<br /> <pre> sudo python epd_7in5_test.py </pre> 如果你的python版本是python3,且需要运行7.5inch e-paper测试程序,在linux命令模式下重新执行如下:<br /> <pre> sudo python3 epd_7in5_test.py </pre> ===关于旋转设置=== 如果在python程序中你需要设置屏幕旋转,可以通过语句blackimage = blackimage.transpose(Image.ROTATE_270)设置。 <pre> blackimage = blackimage.transpose(Image.ROTATE_270) redimage = redimage.transpose(Image.ROTATE_270) #支持ROTATE_90, ROTATE_180, ROTATE_270三个参数 </pre> :旋转效果,以1.54B为例, 按顺序分别为0°, 90°,180°, 270° :[[File:SPI-epaper-Python-0.png|200px]][[File:SPI-epaper-Python-90.png|200px]][[File:SPI-epaper-Python-180.png|200px]][[File:SPI-epaper-Python-270.png|200px]] ==Arduino== 对于Arduino,由于Arduino UNO的内存不够,部分例程写了怎么写字符,但是不推荐这样使用,这样复杂化了Arduino的操作,如果需要用[http://www.waveshare.net/wiki/E-Paper_Shield e-paper Sheild]驱动<br />
返回至
模板:E-Paper-codes-description
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志