您现在的位置是:首页 >技术杂谈 >ses价签墨水屏折腾-01网站首页技术杂谈

ses价签墨水屏折腾-01

NULL_1969 2024-07-22 00:01:02
简介ses价签墨水屏折腾-01

前言

一直想玩玩墨水屏,这次咸鱼找了全新的ses价签,而且价格还很便宜,于是买了一个2.66寸三色,和一个4.2寸三色的墨水屏幕,经过几天的折腾终于能正常显示了。
显示效果如下:
在这里插入图片描述
在这里插入图片描述
折腾来折腾去,发现这个墨水屏还是显示这种黑白的头像表情包效果比较好,显示彩色图片效果太差了。
再来看看显示黑白漫画
在这里插入图片描述
显示这些色调简单的漫画效果也可以。要想做一个实时的时钟的话,这个屏幕也不太行,主要是刷新太慢了。刷新一次需要15s左右。而且不能局部刷新,一刷新就是整体刷新。

价签型号介绍

这次一共是两个价签,其图片及特性如下:

2.66寸价签

  • 型号:2.6 BWR GL340
  • 主控型号:cc2510
  • 屏幕型号:SE2266FS092
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4.2寸价签

  • 型号:2.6 BWR CU140
  • 主控型号:AX8052F143
  • 屏幕型号:SE2417FS051
    在这里插入图片描述
    在这里插入图片描述
    两块屏幕用的都是24pin FPC 0.5mm的接口。通过搜索找到了屏幕的官网
    https://www.pervasivedisplays.com/products/
    在官网没有找相同的型号,但有类似的型号,看封装是一样的。引脚定义应该也一样。

方案

原本打算无损改造,直接利用自带的板子进行开发,但无奈这两个单片机都没有蓝牙或者wifi。无法实现通过手机推送图片到屏幕上显示。所以干脆进一步改造,只要屏幕。采用ESP32作为主控。ESP32有蓝牙和wifi,未来的拓展性更强。

要用esp32来驱动屏幕,就需要用到屏幕接口板,网上找了一下,只有微雪的板子,且价格较贵。咸鱼上有一个卖的,也要30多一片,比价签本身都贵多了。既然如此,干脆自己做一个屏幕驱动板。
验证方案就是。

ESP32模块+屏幕驱动板+屏幕。

验证通过后,再做一块板子,把esp32和屏幕驱动板集成在一块板子上。

打板

这个板子比较简单,对比了微雪的原理图以及上述官网上找到推荐电路图基本移植。这次直接用立创的在线eda画板子。工程已经开源了,地址如下:
https://oshwhub.com/jackdesign/e-eink-driver

在这里插入图片描述
在这里插入图片描述
经过几天的等待,板子到了一共5片。
在这里插入图片描述
焊接之后如下:
在这里插入图片描述
上面的料基本都是从价签本身的板子上面拆下来的。最难焊接的FPC座子,手工焊接很容易焊短路。要特别注意,焊完之后要测下fpc引脚是否短路。

代码

最终连线效果如下:
在这里插入图片描述
引脚接口:

#define PIN_NUM_MOSI 23   //tft sda
#define PIN_NUM_CLK  18   //tft clk
#define PIN_NUM_CS   5   //tft cs

#define PIN_NUM_DC   22  //tft dc
#define PIN_NUM_RST  19  //tft rst  
#define PIN_NUM_BUSY 21   //ftf busy

用到的开发环境是ESP32IDF。其配置方法见https://blog.csdn.net/sinat_36568888/article/details/121424739。

这里没有用到arduino环境是因为一直做的是嵌入式开发。arduino这种对于初学者非常友好,几行代码就可以运行了。作为开发者,就不太适合进行自定义开发了。目前微雪以及网上找到的历程基本都是基于arduino的开发。所以整个过程只能自己重头来了。
注意这个屏幕直接用微雪的2.66寸屏幕例程是不能运行,这两块屏幕的寄存器与例程中的定义不一样。

首先搞定两大块。蓝牙和spi屏幕驱动。
蓝牙直接使用例程bt_spp_acceptor进行开发。spi屏幕驱动之前搞过,就直接现成拿来用了。这里就重点说明下屏幕的寄存器操作流程。

第一步:硬件初始化。

void EPD_2IN66B_Init(uint8_t type)
{
    EPD_2IN66B_Reset();
    EPD_2IN66B_ReadBusy();
    soft_reset();   //

    EPD_2IN66B_SendCommand(0xe5);//input_temp 25C
    EPD_2IN66B_SendData(0x19);
    EPD_2IN66B_SendCommand(0xe0);//active temperature
    EPD_2IN66B_SendData(0x02);
    EPD_2IN66B_SendCommand(0x00);//psr
    if(type == 35) //0x23   2.66 b  epaper
    {
        EPD_2IN66B_SendData(0xcf);
    }
    else if(type == 13) //0x0d   4.2 b  epaper
    {
        EPD_2IN66B_SendData(0xcf);
    }
}

void soft_reset(void)
{
    EPD_2IN66B_SendCommand(0x00);
    EPD_2IN66B_SendData(0x0E);
    EPD_2IN66B_ReadBusy();

}

软件reset的寄存器是0x00,写入的数值是0x0e。这是与微雪例程不一样的。

第二步,将突图片数据写入屏幕ram

void EPD_2IN66B_Display(UBYTE *ImageBlack, UBYTE*ImageRed)
{
    UWORD Width, Height,psx;
    Width = (EPD_2IN66B_WIDTH % 8 == 0)? (EPD_2IN66B_WIDTH / 8 ): (EPD_2IN66B_WIDTH / 8 + 1);
    Height = EPD_2IN66B_HEIGHT;
    
    psx = Width*Height;

    EPD_2IN66B_SendCommand(0x10);
        for (UWORD i = 0; i < psx; i++) {
            EPD_2IN66B_SendData(ImageBlack[i]);
        }
	
    EPD_2IN66B_SendCommand(0x13);
        for (UWORD i = 0; i < psx; i++) {
            EPD_2IN66B_SendData(~ImageRed[i]);
        }
}

先想0x10寄存器写入黑白图像。然后再向0x13寄存器写入红黑图像。

第三步,屏幕整体刷新

    power_on();
    display_refresh();
    power_off();
    void power_on(void)
{
    EPD_2IN66B_SendCommand(0x04);//power on
    EPD_2IN66B_SendData(0x00);
    EPD_2IN66B_ReadBusy();

}
void display_refresh(void)
{
    EPD_2IN66B_SendCommand(0x12);//power on
    EPD_2IN66B_SendData(0x0E);
    EPD_2IN66B_ReadBusy();
}
void power_off(void)
{
    EPD_2IN66B_SendCommand(0x02);//power on
    EPD_2IN66B_SendData(0x00);
    EPD_2IN66B_ReadBusy();

}

注意由于墨水屏的特性,在刷新完成后,最好将墨水屏幕关掉。以延长其寿命。最好是直接外部断掉供电,由于当前设计的驱动板电源不受控,所以没哟硬件断电的代码。

简单来说,要在屏幕上显示需要上述三步操作。

下面来说下busy检测。由于墨水屏刷新很慢,所以每步操作后要等到墨水屏是非busy状态,才能进行下一步操作。

static void EPD_2IN66B_ReadBusy(void)
{
    Debug("e-Paper busy
");
    // vTaskDelay(50);
    while(gpio_get_level(PIN_NUM_BUSY) == 0) {      //LOW: idle, HIGH: busy
        vTaskDelay(10);
        // DEV_Delay_ms(10);
    }
    // vTaskDelay(50);
    // DEV_Delay_ms(50);
    Debug("e-Paper busy release
");
}

判断忙的函数一定要注意,大部分的屏幕是高电平是忙。而很不幸上述两块屏幕都是第电平是忙。这里一开始没注意,一直卡在这个判断忙的函数了。排查了好久才发现是这里配置错误了。

使用说明

安装APP(见文末的代码及app下载路径)。这里直接用到了微雪官方的app,没有进行任何修改。
在这里插入图片描述

打开app,选择esp32的蓝牙,第一次连接需要配对,按照操作配对就行了。屏幕的型号后缀b代表的屏幕是黑白红三色。最后点击上传图像,等到上传100%后。屏幕将会刷新。
在这里插入图片描述

文中用到的代码以及app如下:
https://download.csdn.net/download/sinat_36568888/87855755?spm=1001.2014.3001.5503

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。