基于ESP32做低功耗墨水屏时钟

电子墨水屏

在这里插入图片描述

概述

电子墨水是一种革新信息显示的新方法和技术。和传统纸差异是电子墨水在通电时改变颜色,并且可以显示变化的图象,像计算器或手机那样的显示。电子墨水屏表面附着很多体积很小的“微胶囊”,封装了带有颜色的颗粒,通过改变电荷使不同颜色的颗粒有序排列,从而呈现出字体、画面。电子墨水屏仅在刷新时间内需要电源,显示内容可以在没有任何电源的情况下,在显示器中显示180天以上。显示的内容与写在纸上的内容相同。适用于无法供电、显示内容更改不频繁的场景,比如货架标签、广告牌。
本文将会以用ESP32和电子墨水屏来制作一个低功耗的时钟展开

ESP32

在这里插入图片描述
实验中选用ESP32可省掉项目中需要的时间来源并且准确可靠,与可控制低功耗。

实验

低功耗电子时钟功能描述

在这里插入图片描述
实验中ESP32休眠后,唤醒型号的来源是ESP32本身自带的触摸功能引脚TOUCH3,即IO15。

接线

ESP32 墨水屏
3V3 VCC
GND GND
IO17 DC
IO23 SDI
IO18 CS
IO5 CLK
IO22 BUSY
IO15(TOUCH3唤醒信号)

可通过更改以下语句里参数更改因引脚定义

QYEG0213RWS800_BWR   display( 16 , 17 , 18 , 22 , 5 , 23 , 19 , 6000000 );//rst,dc,cs,busy,sck,mosi,miso,frequency

在这里插入图片描述

开发

ESP32连接wifi用到了Ardino IDE里的WIFI库,通过判断WiFi.status()的返回值来确定是否连上WIFI。

while ( WiFi.status() != WL_CONNECTED ) {
    
    
    delay ( 500 );
    Serial.print ( "." );
  }

通过NTPClient库实现网络授时,无需外接时钟模块且更加准确,实验中授时用到的是腾讯的NTP服务器

NTPClient timeClient(ntpUDP, "time1.cloud.tencent.com");

通过编写getT()函数,获取具体的月、日、时、分、秒,然后强制转换成适合墨水屏打印输出的字符串类型

void getT()
{
    
    
  
  timeClient.update();
  //获取纪元年
//  unsigned long epochTime = timeClient.getEpochTime();
//  Serial.print("epochTime: ");
//  Serial.println(epochTime);

  //获取周    
  int weekDay = timeClient.getDay();
  String WEEK=getWeek(weekDay);
  Serial.println("");
  Serial.print("Week Day: ");
  Serial.println(WEEK);           
  
  //获取日期
  struct tm *ptm = gmtime ((time_t *)&epochTime);
  int monthDay = ptm->tm_mday;
  Serial.print("Month day: ");
  Serial.println(monthDay);
  String MonthDay=String(monthDay);

  //获取月份
  int currentMonth = ptm->tm_mon + 1;
  Serial.print("Month: ");
  Serial.println(currentMonth);
  delay(1000);
  String MonTh=String(currentMonth);

  //获取时间
  Serial.println(timeClient.getFormattedTime());
}

睡眠与唤醒
设置触发阈值为40

#define Threshold 40

当触摸TOUCH3引脚后TOUCH3的读数会小于40,触发中断,唤醒ESP32

  //设置中断TOUCH3为触发源
  touchAttachInterrupt(T3, callback, Threshold);
  //设置唤醒源为触摸唤醒
  esp_sleep_enable_touchpad_wakeup();
  //睡眠提醒
  Serial.println("Going to sleep now");
  //进入深度睡眠
  esp_deep_sleep_start();

电子墨水屏打印部分代码

  display.clear();    //清除本地像素缓冲区
  display.setTextAlignment(TEXT_ALIGN_LEFT);    //设置文本左对齐
  display.setFont(ArialMT_Plain_24);    //字体设置
  display.drawString(0, 10, "DATE:");
  display.drawString(0, 35, "TIME:");
  display.drawString(0, 60, "WEEK:");
  display.update(BLACK_BUFFER);

  display.clear();
  display.setFont(ArialMT_Plain_24);
  display.drawString(100, 10, MonTh);
  display.drawString(125, 10, "/");
  display.drawString(140, 10, MonthDay);
  display.drawString(100, 35, timeClient.getFormattedTime());
  display.drawString(100, 60, WEEK);

  display.update(COLOR_BUFFER);
  display.display();

实验结果

先上功耗
电子墨水屏刷新时功耗:
在这里插入图片描述

休眠后功耗:
在这里插入图片描述

进入深度睡眠后,测得电流为0,应该是这个usb测试仪测试精度不够了。
在这里插入图片描述
需要查看时间的时候,触摸一下IO15引脚 ,刷新打印日期、星期、时间后,进入睡眠,不刷新时基本不耗电,实现超低功耗的时钟。下面是实际演示。

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/129705312