基于ESP32做低功耗墨水屏时钟
基于ESP32做低功耗墨水屏时钟
- 电子墨水屏
- 概述
- 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引脚 ,刷新打印日期、星期、时间后,进入睡眠,不刷新时基本不耗电,实现超低功耗的时钟。下面是实际演示。