当前位置: 首页 > article >正文

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

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

  • 电子墨水屏
    • 概述
  • ESP32
  • 实验
    • 低功耗电子时钟功能描述
    • 接线
    • 开发
    • 实验结果

电子墨水屏

在这里插入图片描述

概述

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

ESP32

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

实验

低功耗电子时钟功能描述

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

接线

ESP32墨水屏
3V3VCC
GNDGND
IO17DC
IO23SDI
IO18CS
IO5CLK
IO22BUSY
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引脚 ,刷新打印日期、星期、时间后,进入睡眠,不刷新时基本不耗电,实现超低功耗的时钟。下面是实际演示。


http://www.kler.cn/a/2397.html

相关文章:

  • 探索 Python编程 调试案例:计算小程序中修复偶数的bug
  • 【TF-IDF】Hugging Face Model Recommendation System
  • SQL语句练习
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之5(腾讯云AI代码助手 之3)
  • CPU性能优化--函数分组
  • 二叉搜索树Ⅲ【东北大学oj数据结构8-3】C++
  • 基于深度学习的瓶子检测软件(UI界面+YOLOv5+训练数据集)
  • Mongodb 常用基本语法与操作
  • 【STL三】序列容器——array容器
  • 【面试题】大厂面试官:你做过什么有亮点的项目吗?
  • WEB安全基础知识
  • 【JDBC】JDBC 简介 ( JDBC 概念 | JDBC 本质 | 使用 JDBC 操作数据库的好处 | JDBC 提供的 API 组件 )
  • 正则表达式简介
  • 【LINUX】初识文件系统
  • 基于Spring Cloud集成OpenFeign应用feign客户端调用微服务
  • 【3.22】操作系统内存管理(整理)、Java并发
  • 程序员增加收入实战 让小伙伴们都加个鸡腿
  • 一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。
  • 计算机组成原理——作业四
  • 网络编程套接字( TCP )
  • Prometheus监控实战之Blackbox_exporter黑盒监测
  • CMSIS-RTOS2 RTX5移植到GD32L233
  • 【练习题】python函数进阶练习
  • 【MySQL】1 MySQL的下载、安装与配置|提供安装包
  • EtherNet/IP网络模型
  • 【SpringBoot】Spring data JPA的多数据源实现