ESP32开发板的RTC时钟,利用0.91寸oled显示(ssd1306),MicroPython编写

本文记录了使用ESP32开发板结合0.91寸OLED显示屏(SSD1306)显示RTC时钟的过程。通过MicroPython编程,实现了时钟的显示,虽然项目实用性有限,但作为学习过程的记录,有助于理解单片机和Python在硬件交互中的应用。

又入手了一个ESP32的开发板,主要是便宜,四舍五入约等于不要钱,哈哈,再配上一个0.91寸的OLED,马上就能看见程序输出的内容,十分激动!赶紧copy一个代码过来学习下,毕竟自己是肯定研究不出来的,哈哈哈,但是并不是无脑copy,每次都会根据自己的实际情况修改下,消化吸收后自己以后也能照猫画虎的用一用了。

在这记录一下,总算是能显示出来了,做的这些东西都十分鸡肋,主要就是学习过程,哈哈哈!

import machine
from machine import Pin, I2C, RTC,Timer
from ssd1306 import SSD1306_I2C

week = ['Monday', 'Tuesday', 'Wednesay', 'Thursday', 'Friday', 'Saturday', 'Sunday']
time_list = ['', '', '']
i2c = machine.SoftI2C(sda=Pin(23), scl=Pin(19)) 
oled = SSD1306_I2C(128, 32, i2c, addr=0x3c)
rtc = RTC()
if rtc.datetime()[0] != 2022:
    rtc.datetime()

def RTC_Run(tim):
    datetime = rtc.datetime() # 获取当前时间
    oled.fill(0) # 清屏显示黑色背景
    oled.text('CLOCK!',0,0)
    
    oled.text(str(datetime[0]) + '-' + str(datetime[1]) + '-' + 
    str(datetime[2]) + '' + week[datetime[3]], 0, 12)
    # 显示时间需要判断时、分、秒的值否小于 10,如果小于 10,则在显示前面补“0”以
    # 达到较佳的显示效果
    for i in range(4, 7):
        if datetime[i] < 10:
            time_list[i - 4] 
<think>根据用户查询和提供的引用,用户需要在ESP32上使用MicroPython驱动SSD1306 OLED显示显示中文。引用中提到了一个专门支持中文显示的库:ssd1306-MicroPython-ESP32-Chinese。以下将基于引用内容整理实现步骤。 ### 步骤1: 准备工作 - 硬件准备:ESP32开发板SSD1306 OLED显示屏(通常为128x64像素,I2C接口) - 软件准备: - 使用Thonny IDE或其他支持MicroPython的工具 - 将ESP32刷入MicroPython固件(建议使用最新版本) ### 步骤2: 安装中文显示库 根据引用[2],项目地址为:https://gitcode.com/gh_mirrors/ssd1306-MicroPython-ESP32-Chinese 可以通过以下方式获取库文件: 1. 访问项目地址,下载整个项目(包含`ssd1306.py`和`fonts`目录) 2. 将以下文件上传到ESP32的文件系统中: - `ssd1306.py`:OLED驱动库(修改版,支持中文) - `fonts`目录:包含中文字库文件(如`gb2312_kai_16x16.fon`) ### 步骤3: 连接硬件 - 将SSD1306的SDA引脚连接到ESP32的SDA引脚(例如GPIO21) - 将SSD1306的SCL引脚连接到ESP32的SCL引脚(例如GPIO22) - 确保供电正确(3.3V或5V,根据OLED屏要求) ### 步骤4: 编写示例代码 以下是一个基础示例代码,显示中英文字符: ```python from machine import Pin, SoftI2C import ssd1306 # 导入库 # 初始化I2C i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000) # 创建OLED对象,参数:宽度(128), 高度(64), I2C对象 oled = ssd1306.SSD1306_I2C(128, 64, i2c) # 清屏 oled.fill(0) # 设置字体(引用库中自带的中文字体) oled.font_load('gb2312_kai_16x16.fon') # 加载16x16楷体中文字库 # 显示中文(坐标x, y, 字符串) oled.text("你好,世界!", 0, 0, 16) # 最后一个参数为字体高度,需匹配字库 # 显示英文(使用内置英文字体) oled.text("Hello, World!", 0, 20) # 更新显示 oled.show() ``` ### 步骤5: 运行与调试 - 将代码保存到ESP32(如`main.py`),重启后自动运行 - 若显示异常,检查: - 硬件连接是否正确 - 字库文件是否已正确上传 - 字体高度参数是否与字库文件匹配 ### 注意事项 - 中文字库文件较大(约750KB),确保ESP32有足够存储空间 - 显示中文时需使用`font_load()`加载字库,且坐标需按16x16像素对齐 - 该库支持GB2312编码,确保字符串为GB2312编码格式 §§相关问题§§ 1. 如何减少中文字库占用的存储空间? 2. 如何动态切换不同大小的中文字体? 3. 除了楷体,还有哪些中文字体可用? 4. 如何实现中文与图形的混合显示? </think> ### ESP32使用MicroPython实现SSD1306 OLED中文显示的方法 根据提供的引用资料,以下是实现中文显示的具体步骤: #### 1. **安装中文显示库** 使用专为ESP32优化的`ssd1306-MicroPython-ESP32-Chinese`库(引用[1][2]): ```python # 通过mip安装(需连接网络) import mip mip.install("github:gh-mirrors/ssd1306-MicroPython-ESP32-Chinese") ``` #### 2. **硬件连接** ```markdown SSD1306 -> ESP32 ------------------- VCC -> 3.3V GND -> GND SCL -> GPIO22 (默认I2C时钟) SDA -> GPIO21 (默认I2C数据) ``` #### 3. **基础代码实现** ```python from machine import Pin, SoftI2C import ssd1306 import gb2312 # 中文字库支持 # 初始化I2C和OLED i2c = SoftI2C(scl=Pin(22), sda=Pin(21)) oled = ssd1306.SSD1306_I2C(128, 64, i2c) # 加载中文字库 oled.font_load("gb2312_kai_24x24.fon") # 可选字体:16x16/24x24/32x32 # 显示中文 oled.text("温度:25℃", 0, 0, 24) # 参数:(文本, x坐标, y坐标, 字体高度) oled.text("湿度:60%", 0, 30, 24) oled.show() ``` #### 4. **关键特性说明** 1. **免手动取模**:使用预编译的GB2312字库(引用[2][4]) 2. **字体支持**:提供楷体16x16/24x24/32x32三种尺 3. **优化性能**:专为ESP32MicroPython优化,减少内存占用 #### 5. **高级用法** ```python # 中英文混合显示 oled.text("Hello 世界!", 0, 0, 16) # 清屏后刷新显示 oled.fill(0) oled.text("新内容", 10, 20, 24) oled.show() # 绘制图形+中文 oled.rect(0, 40, 128, 20, 1) oled.text("状态:正常", 5, 45, 16) ``` #### 6. **常见问题解决** - **显示乱码**:确保使用`font_load()`加载字库文件 - **内存不足**:使用16x16字体(占用约220KB) - **I2C错误**:检查引脚定义和上拉电阻 - **字库缺失**:从项目地址下载完整字体文件(引用[2]) > 项目地址:https://gitcode.com/gh_mirrors/ssd1306-MicroPython-ESP32-Chinese > 完整示例:https://gitcode.com/gh_mirrors/ssd1306-MicroPython-ESP32-Chinese/-/blob/master/example/ssd1306_test.py
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值