基于Micropython利用ESP32-C3墨水屏电子时钟方法

本篇笔记介绍一下我们设计制作的墨水屏时钟。

1、所需硬件

1)合宙的ESP32-C3:

图片

2)电子价签拆出来的2.9寸墨水屏:

图片

——电子价签型号为:Stellar-L,墨水屏型号为:E029A01。

3)自己设计的一块墨水屏驱动板:

图片

——这块PCB比较复杂了,贴片电容、电阻、二极管有20多个,再加上贴片AHT20和24P的FPC,焊接难度有点大,建议上加热台和焊锡膏。

4)402030锂电池3.7V

图片

——立创商城上买的小体积锂电池(402030),刚好可以藏在墨水屏时钟后面。

5)墨水屏时钟背面

图片

2、原理图

图片

——墨水屏使用SPI协议,8个引脚分别与ESP32-C3连接:

mosi = Pin(3)sck = Pin(2)cs = Pin(7)dc = Pin(4)rst = Pin(5)busy = Pin(6)

——电源方案使用ETA6093充放电芯片,这块芯片只要加一个开关、两个led指示灯,就可以利用ESP32-C3的USB口实现充电、放电,非常方便。但是,也有个明显的缺点——功耗较高,基本上150mA的锂电池半天就没电了。所以,这个墨水屏时钟基本上要一直接着电源。

3、所需驱动

1)墨水屏驱动

Github上有墨水屏驱动,选择2.9寸的epaper2in9.py。

2)framebuf

驱动墨水屏需要使用Micropython自带的framebuf模块,但是Micropython自带的framebuf模块只能显示固定大小的文字,而且无法旋转方向。我们找到了提取自CircuitPython的framebuf模块,这个模块支持旋转方向和字体大小,但还是不支持中文。我们把这个模块命名为cframebuf.py。

3)ahtx0

驱动板上集成了AHT20,从Github找了个驱动。

三个模块的下载地址:

​    笔记提供了我们整理的官方资料、固件、驱动、PCB设计图、相关软件等资料下载。

NO.1

图片

官方资料整理

Micropython官方资料:

#Micropython官方网站:https://www.micropython.org/#Micropython官方github地址:https://github.com/micropython/micropython#Micropython官方文档:https://docs.micropython.org/#Micropython官方固件下载:https://www.micropython.org/download/

合宙开发板官方文档:

#合宙ESP32-C3官方文档:https://wiki.luatos.com/chips/esp32c3#合宙ESP32-S3官方文档:https://wiki.luatos.com/chips/esp32s3

树莓派Pico官方文档:

https://pico.org.cn/

NO.2

图片

Micropython固件下载

我们编译或收集的固件,包括ESP32-C3、ESP32-S3、RP2040等开发板,下载地址:

https://gitee.com/py2012/firmware

下载之余,不要忘了给原创文章收藏、点在看、点赞,支持原创哦。 

NO.3

图片

模块驱动下载

我们收集的模块驱动,包括aht10、bmp280、st7735、ssd1306、tm1638等,持续更新。下载地址:

https://gitee.com/py2012/esp32c3

下载之余,不要忘了给原创文章收藏、点在看、点赞,支持原创哦。

NO.4

图片

PCB设计图下载

我们设计的PCB设计图,目前只开源两个:

#ESP32-C3温湿度计:https://oshwhub.com/cnas2023/esp32-c3-lcd#ESP32-C3蓝牙小车:https://diy.szlcsc.com/p/py-learning-notes/ESP32-C3-BLEcar

需要其他的也可以搜一搜 立创开源广场:

https://oshwhub.com/explore

下载之余,不要忘了给原创文章收藏、点在看、点赞,支持原创哦。

NO.5

图片

相关软件和工具

我们收集的相关软件,包括Image2Lcd、TS4等,持续更新。下载地址:

https://gitee.com/py2012/software

乐鑫的官方工具:

#烧录工具https://www.espressif.com.cn/zh-hans/support/download/other-tools#ESP-IDFhttps://github.com/espressif/esp-idfhttps://gitee.com/EspressifSystems/esp-idf#ESP-IDF-TOOLShttps://gitee.com/EspressifSystems/esp-gitee-tools

Thonny官方网站:

https://thonny.org/

phyphox编辑器:

https://phyphox.org/editor/

嘉立创EDA编辑器:

https://lceda.cn/

4、测试代码

墨水屏时钟需要显示的内容有日期、星期、时间、温度和湿度,日期、星期、时间需要联网获取或校准,温度和湿度通过驱动板上的AHT20获取。

1)联网

ESP32联网的代码网上很多,官方也有提供示例:

def do_connect():#联网    import network    wlan = network.WLAN(network.STA_IF)    wlan.active(True)    if not wlan.isconnected():        print('connecting to network...')        wlan.connect('XXX', 'XXX')#填写你的WIFI名和密码        while not wlan.isconnected():            pass    print('network config:', wlan.ifconfig())

2)获取或校准时间

通过NTP服务器获取或校准时间,这里用的NTP服务器是阿里云的:

def sync_ntp():#校时    print("开始同步网络时间")    import ntptime    try:        ntptime.NTP_DELTA = 3155644800  # 可选 UTC+8偏移时间(秒),不设置就是UTC0        ntptime.host = 'time1.aliyun.com'  # 可选,ntp服务器,默认是"pool.ntp.org"         ntptime.settime()  # 修改设备时间,到这就已经设置好了    except Exception as e:        print("同步ntp时间错误",repr(e))

3)墨水屏引脚和驱动定义

参考《ESP32-C3驱动墨水屏并显示图片(基于Micropython)》:

# 定义对应的引脚mosi = Pin(3)sck = Pin(2)cs = Pin(7)dc = Pin(8)rst = Pin(10)busy = Pin(6)spi = SPI(1, baudrate=2000000, polarity=0, phase=0, sck=sck, mosi=mosi)i2c = I2C(scl=Pin(5), sda=Pin(4))# 创建墨水屏驱动对象e = epaper2in9.EPD(spi, cs, dc, rst, busy)e.init()# 定义要显示的内容宽度高度w = 128h = 296x = 0y = 0black = 0white = 1# 创建framebuf对象buf = bytearray(w * h // 8)  # 296 * 128 // 8 = 4736fb = cframebuf.FrameBuffer(buf, w, h, cframebuf.MHMSB)fb.rotation = 1  # 调整显示的方向,可以在0/1右转90度/2右转180/3右转270之间选择    # 联网,校准时间,初始化温湿度do_connect()sync_ntp()sensor = ahtx0.AHT10(i2c)    # 将星期转换为英文显示weekday_dict = {    0: "Monday",    1: "Tuesday",    2: "Wednesday",    3: "Thursday",    4: "Friday",    5: "Saturday",    6: "Sunday"}

4)使用while True循环显示时间、温湿度

    while True:        fb.fill(white)        localtime_now=time.localtime()        year = localtime_now[0]        month = localtime_now[1]        day = localtime_now[2]        hour = localtime_now[3]        minute = localtime_now[4]        weekday = localtime_now[6]        showdate="%.2d-%.2d-%.2d" % (year, month, day)        showtime="%.2d:%.2d" % (hour, minute)               fb.text(showdate, 10, 10, black, size=2)        fb.text(weekday_dict[weekday], 200, 10, black, size=2)        fb.hline(0, 30, 296, black)#画一个水平线        fb.text(showtime, 70, 40, black, size=5)        fb.hline(0, 90, 296, black)#画一个水平线        fb.text("Tem:%0.1fC" % (sensor.temperature-2), 20, 100, black, size=2)        fb.text("Hum:%0.1f%%" % (sensor.relative_humidity+10), 170, 100, black, size=2)        e.set_frame_memory(buf, x, y, w, h)        e.display_frame()        time.sleep(19)

——墨水屏官方文档建议刷新频率不要太高,至少要超过15秒,因此我们设定为19秒。

最终显示效果:

图片

我们只设计了一个简单的界面,有需要可以再美化一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux-ROS学习之旅(一)

##本人使用的是双系统,noetic版本,学习ROS初衷是学习控制机械臂,具体下载方法见B站,观看的教程是古月居早年的教学视频,和ROS_wiki:ROS/Tutorials - ROS Wiki ##下一篇文章有具体的实例,但是所用…

OJ_阶乘的和

题干 c语言实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<set> using namespace std;int main() {vector<int> factorialArr;//把0&#xff01;放入数组factorialArr.push_back(1);int curFactorial 1;for (in…

《合成孔径雷达成像算法与实现》Figure5.16

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果&#xff1a; 这个是当点着按钮的时候没有松开按钮的效果&#xff08;没有阴影&#xff09; 这个是当松开按钮的效果&#xff08;有阴影&#xff09; 原理讲解&#xff1a; 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说&#xff0c;它通…

系统架构17 - 软件工程(5)

软件工程 软件测试测试原则测试方法静态测试动态测试黑盒测试白盒测试灰盒测试自动化测试 测试阶段单元测试集成测试系统测试性能测试验收测试其它测试AB测试Web测试链接测试表单测试 测试用例设计黑盒测试用例白盒测试用例 系统维护遗留系统系统转换转换方式数据转换与迁移 评…

C++力扣题目416--分割等和子集 1049--最后一块石头的重量II

416. 分割等和子集 力扣题目链接(opens new window) 题目难易&#xff1a;中等 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: […

openssl3.2 - 测试程序的学习 - test\aesgcmtest.c

文章目录 openssl3.2 - 测试程序的学习 - test\aesgcmtest.c概述笔记能学到的流程性内容END openssl3.2 - 测试程序的学习 - test\aesgcmtest.c 概述 openssl3.2 - 测试程序的学习 aesgcmtest.c 工程搭建时, 发现没有提供 test_get_options(), cleanup_tests(), 需要自己补上…

数据结构与算法:复杂度

友友们大家好啊&#xff0c;今天开始正式学习数据结构与算法有关内容&#xff0c;后续不断更新数据结构有关知识内容&#xff0c;希望多多支持&#xff01; 数据结构&#xff1a; 数据结构是用于存储和组织数据的方式&#xff0c;以便可以有效地访问和修改数据。不同的数据结构…

翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级Streamlit四

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三 当您需要从不可复制或不可下载的表中提取数据时&#x…

Java+Spring Cloud +Vue+UniApp微服务智慧工地云平台源码

目录 智慧工地云平台功能 【劳务工种】所属工种有哪些&#xff1f; 1.管理人员 2.信息采集 3.证件管理 4.考勤管理 5.考勤明细 6.工资管理 7.现场统计 8.WIFI教育 9.课程库管理 10.工种管理 11.分包商管理 12.班组管理 13.项目管理 智慧工地管理平台是以物联网、…

C++进阶(七)AVL树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、AVL树的概念二、AVL树的旋转1、左单旋2、右单旋3、左右双旋4、右左双旋 三、AVL树的基本实…

跨平台框架Flutter工作原理初探

前言 Flutter是开发跨平台应用的框架&#xff0c;支持将应用打包到几乎市面所有平台&#xff0c;本文较浅层次探究flutter框架的工作原理 参考来源为flutter中文社区官方文档 Flutter 开发文档 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter flutter的布局 组合…

防御保护--第一次实验

目录 一&#xff0c;vlan的划分及在防火墙上创建单臂路由 二&#xff0c;创建安全区域 三&#xff0c;配置安全策略 四&#xff0c;配置认证策略 五&#xff0c;配置NAT策略 1.将内网中各个接口能够ping通自己的网关 2..生产区在工作时间内可以访问服务器区&#xff0c;仅…

vivado 2018.3 烧写固化FPGA verilog代码以及出现的问题解决

vivado一般是与SDK同时使用的,像zynq系列,通过SDK烧写固化代码很方便,但是有的时候比如本人目前使用的是XC7K325T FPGA进行的开发,不会用到SDK软件,所以烧写固化代码想通过vivado直接操作。 1、按照网上百度的方法进行设置,如下 遇到的第一个问题就是在vivado2018.3的fl…

Blender教程(基础)-物体添加-03

1、打开的界面如下图会存在3个物体、英文状态下按键盘字母A全选、然后按键盘delete删除。 删除后一片空白 2、新增物体 方式1&#xff1a;在英文状态下按键盘shiftA组合键弹出如下添加物体弹窗 方式2&#xff1a;在菜单下找到添加点击弹出添加选项 3、举例新增物体 采用上述…

【数字通信】数字带通传输

数字调制和数字带通传输系统 数字调制解调 数字调制 用数字基带信号控制载波&#xff0c;把数字基带信号变换为数字带通信号的过程 目的&#xff1a;数字基带信号含大量低频分量&#xff0c;无法通过具有带通特性的信道传输。需对数字基带信号进行数字调制使信号与信道的特…

log4j2 java api 入门介绍

概述 Log4j 2 API 提供了应用程序应该编码的接口&#xff0c;并提供了实现者创建日志实现所需的适配器组件。 虽然 Log4j 2 在 API 和实现之间被分解&#xff0c;但这样做的主要目的不是允许多个实现&#xff0c;尽管这当然是可能的&#xff0c;而是明确定义在“正常”应用程…

YOLOv8融合改进 更换检测头同时改进C2f模块

一、Detect_DyHead检测头和C2f-EMSC,C2f-EMSCP模块 详细介绍和代码在往期的博客里: Detect_DyHead: (YOLOv8改进检测头Detect为Detect_Dyhead-CSDN博客) C2f-EMSC和C2f-EMSCP: (YOLOv8改进之多尺度转换模块C2f-EMSC和C2f-EMSCP-CSDN博客) 二、算法实现 1、将检测…

github连不上

github连不上 错误提示解决方案 错误提示 fatal: unable to access ‘https://github.com/Ada-design/qianduan.git/’: Failed to connect to github.com port 443 after 21073 ms: Couldn’t connect to server 解决方案 下载steam https://steampp.net/ 安装成功之后&am…

Linux系统明明还有足够的物理内存,调用fork却返回ENOMEM

使用systemtab hook fork&#xff0c;定位到报错调用路径SYSCALL_DEFINE0(fork)-》kernel_clone-》copy_process-》copy_mm-》dup_mm-》dup_mmap-》security_vm_enough_memory_mm-》__vm_enough_memory __vm_enough_memory返回了 -ENOMEM。其源码如下&#xff1a; 从代码可知f…