ses价签墨水屏折腾-01

news/2024/9/22 17:06:26/

前言

一直想玩玩墨水屏,这次咸鱼找了全新的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 25CEPD_2IN66B_SendData(0x19);EPD_2IN66B_SendCommand(0xe0);//active temperatureEPD_2IN66B_SendData(0x02);EPD_2IN66B_SendCommand(0x00);//psrif(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 onEPD_2IN66B_SendData(0x00);EPD_2IN66B_ReadBusy();}
void display_refresh(void)
{EPD_2IN66B_SendCommand(0x12);//power onEPD_2IN66B_SendData(0x0E);EPD_2IN66B_ReadBusy();
}
void power_off(void)
{EPD_2IN66B_SendCommand(0x02);//power onEPD_2IN66B_SendData(0x00);EPD_2IN66B_ReadBusy();}

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

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

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

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

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

使用说明

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

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

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


http://www.ppmy.cn/news/167837.html

相关文章

dnf电脑服务器不稳定怎么办,电脑玩DNF经常卡顿是怎么回事?5步让你从此告别卡顿...

原标题:电脑玩DNF经常卡顿是怎么回事?5步让你从此告别卡顿 游戏卡顿、闪退、跳帧、行动迟缓、网络中断,这些DNF的尴尬问题,相信大多说的DNF勇士都遇到过,这大大影响了游戏的体验感。 随着DNF版本的一次次更新,与游戏世界观的日渐庞大,自从大转移的版本之后,游戏的内存越…

dnf登录不了服务器未响应,win7dnf辅助登陆没反应的三种解决方法

都说win7dnf辅助登陆没反应的三种解决方法,一些用户在登录dnf的时候,发现wegame或者其他的登录工具都没有作用,也不知道是哪里出现了问题,就来求助小编,希望小编能给小伙伴带来解决方法,针对这一问题,小编立马出动,找到了解决教程,并给予小伙伴们参考。 win7dnf辅助登…

python写dnf游戏脚本辅助_HMM-维特比算法明白与实现(python)_dnf辅助,r6辅助

基于ELK搭建MySQL日志平台的要点和常见错误绝地求生卡盟 解码问题 给定观察序列 (O=O_1O_2...O_T),模子 (lambda (A,B,pi)),找到最可能的状态序列 (I^∗={i^∗_1,i^∗_2,...i^∗_T}) 近似算法 在每个时刻 (t) 选择最可能的状态,获得对应的状态序列 凭据HMM-前向后向算法…

c语言中控辅助DNF,DNF2019最新稳定代码辅助

DNF CE修改器是一款针对《地下城与勇士》所推出的辅助软件。这款DNF2019最新稳定代码辅助功能强大,支持在游戏中修改搬砖、材料、技能、道具等,可以说你想要的都能修改,就是这么简单粗暴。 【使用材料】 游戏客户端(这里用DNF,毕竟想要修改一个游戏,就需要先对这个游戏有一…

JavaFX 树视图TreeView

JavaFX 树视图TreeView 1、TreeView基础查看2、显示案例 1、TreeView基础查看 javafx.scene.control.TreeView<T> javafx.scene.control.TreeItem<T> w3cschool&#xff1a;JavaFX 树视图 DOC-03-14 树视图(Tree View) JavaFX视频教程第101课&#xff0c;TreeView…

Android Cannot resolve symbol 找不到资源解决方案

一、介绍 在android开发中&#xff0c;我们经常会发现依赖了系统提供的库&#xff0c;但是无法引用&#xff0c;或者找不到&#xff0c; Cannot resolve symbol style/Theme.AppCompat.NoActionBar &#xff0c;报红。这些最经典的无法加载。 出现这个原因并不是你项目的原因&…

有限状态机器测试(过渡游览法)

有限状态机器测试(过渡游览法) 测试相关概念—故障类型 行为由转换定义。 故障分为三种类型&#xff1a; 输出错误Output faults&#xff1a;错误的输出是由转换产生的。 状态转移错误State transfer faults&#xff1a;转移到错误的状态。 额外的状态Extra states&#xff08…

网络安全合规-数据出境安全评估

&#xff08;一&#xff09;数据出境安全评估的适用范围为&#xff1a; 数据处理者向境外提供重要数据&#xff1b; 关键信息基础设施运营者和处理100万人以上个人信息的数据处理者向境外提供个人信息&#xff1b;自上年1月1日起累计向境外提供10万人个人信息或者1万人敏感个…