0
点赞
收藏
分享

微信扫一扫

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

TiaNa_na 03-10 16:00 阅读 1


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

1、所需硬件

1)合宙的ESP32-C3:

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

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

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

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

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

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

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

4)402030锂电池3.7V

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

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

5)墨水屏时钟背面

基于Micropython利用ESP32-C3墨水屏电子时钟方法_驱动开发_05

2、原理图

基于Micropython利用ESP32-C3墨水屏电子时钟方法_驱动开发_06

——墨水屏使用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利用ESP32-C3墨水屏电子时钟方法_python_07

官方资料整理

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墨水屏电子时钟方法_驱动开发_08

Micropython固件下载

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

https://gitee.com/py2012/firmware

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

NO.3

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

模块驱动下载

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

https://gitee.com/py2012/esp32c3

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

NO.4

基于Micropython利用ESP32-C3墨水屏电子时钟方法_驱动开发_10

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

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

相关软件和工具

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

https://gitee.com/py2012/software

乐鑫的官方工具:

#烧录工具
https://www.espressif.com.cn/zh-hans/support/download/other-tools

#ESP-IDF
https://github.com/espressif/esp-idf
https://gitee.com/EspressifSystems/esp-idf

#ESP-IDF-TOOLS
https://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 = 128
h = 296
x = 0
y = 0
black = 0
white = 1

# 创建framebuf对象
buf = bytearray(w * h // 8)  # 296 * 128 // 8 = 4736
fb = 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秒。

最终显示效果:

基于Micropython利用ESP32-C3墨水屏电子时钟方法_驱动开发_12

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

举报

相关推荐

0 条评论