ses价签墨水屏折腾-01

2023-11-06 05:51
文章标签 01 折腾 ses 墨水 价签

本文主要是介绍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 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

这篇关于ses价签墨水屏折腾-01的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354817

相关文章

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

滚雪球学MyBatis(01):教程导读

MyBatis简介 前言 欢迎回到我们的MyBatis系列教程。在上期的内容中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架(如Hibernate)的对比。我们还探讨了MyBatis在数据访问层中的优势,并解释了为什么选择MyBatis作为我们的持久化框架。在阅读了上期的内容后,相信大家对MyBatis有了初步的了解。 在本期内容中,我们将深入探讨MyBatis的基本配

python+selenium2轻量级框架设计-01框架结构

接下来会介绍一个比较简单的框架结构,先看一下分类 config文件夹里放的是配置文件 framework文件夹里面放的是公共类,常用类,还有读配置文件类、日志类、截图类、发送邮件、生成测试报告、操作读取数据库、读取Excel等,后面几篇会一一介绍 logs文件夹存放生成的日志文件 pageobject存放页面类包括元素的定位等 screenshots文件放的是生成的截图 test_

python+selenium2学习笔记POM设计模式-01模式简介

Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通过调用页面类来获取页面元素,这样巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。 当页面元素id变化时,只需要更改测试页Class中页面的属性即可。 Page Object模式是

数据库学习01——mysql怎么创建数据库和表

第一步:创建数据库 使用 create database 语句,后跟要创建的数据库名称: CREATE DATABASE dbname; 例如,要创建名为 my_db 的数据库,请输入: CREATE DATABASE my_db ; 使用 show databases; 语句检查数据库是否已创建: 第二步:创建表 使用 create table 语句,后跟要创建的表名和列定

【DL--01】深度学习 揭开DL的神秘面纱

什么是深度学习 深度学习=深度神经网络+机器学习 人工智能 > 机器学习 > 表示学习 > 深度学习 神经元模型 输入信号、加权求和、加偏置、激活函数、输出 全连接层 输入信号、输入层、隐层(多个神经元)、输出层(多个输出,每个对应一个分类)、目标函数(交叉熵) 待求的参数:连接矩阵W、偏置b 训练方法:随机梯度下降,BP算法(后向传播) Python中深度学习实现:Ke

三文带你轻松上手鸿蒙的AI语音01-实时语音识别

三文带你轻松上手鸿蒙的AI语音01-实时语音识别 前言 HarmonyOSNext中集成了强大的AI功能。Core Speech Kit(基础语音服务)是它提供的众多AI功能中的一种。 Core Speech Kit(基础语音服务)集成了语音类基础AI能力,包括文本转语音(TextToSpeech)及语音识别(SpeechRecognizer)能 力,便于用户与设备进行互动,实现将实时输入

NYOJ 252 01串

OJ题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=252 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。 输入 第一行有一个整数n(0<n<=100),表示有n组测试数据; 随后有n行