SH1107 OLED 驱动 for MicroPython
SH1107 OLED 驱动 for MicroPython
目录
简介
本项目是基于 MicroPython v1.23.0 开发的 SH1107 128x64 OLED 显示屏驱动,支持 I2C 与 SPI 两种硬件接口,提供完整的文本显示、图形绘制、显示控制等功能,可快速在 MicroPython 设备上实现 OLED 界面开发。
驱动参考自 peter-l5/SH1107,并针对 128x64 分辨率进行了适配与优化。
主要功能
- 基础显示:文本显示、像素绘制、直线/矩形/椭圆/多边形等图形绘制
- 显示控制:对比度调整、显示反转、屏幕翻转/旋转(0/90/180/270°)
- 交互效果:软件水平/垂直滚动、开关机/睡眠模式控制
- 接口支持:同时兼容 I2C 与 SPI 硬件接口,适配不同硬件平台
- 性能优化:页面级更新机制,仅刷新修改区域,降低功耗与传输耗时
- 扩展能力:支持大字体文本、圆形、三角形绘制(需扩展版 framebuf2 库)
硬件要求
文件说明
软件设计核心思想
- FrameBuffer 继承:继承 MicroPython 原生
framebuf.``FrameBuffer,复用成熟的绘图算法,保证兼容性与稳定性。 - 页面更新机制:将屏幕按 8 行高度划分为多个“页”,仅更新发生修改的页,大幅减少 I2C/SPI 数据传输量,提升刷新效率。
- 旋转适配:支持 0/90/180/270° 旋转,旋转后自动交换宽高坐标,适配不同安装方向的屏幕布局。
- 参数强校验:对所有输入参数(坐标、颜色、地址等)进行类型与范围校验,避免非法输入导致硬件异常。
- 接口解耦:将 I2C 与 SPI 实现拆分为独立子类(
SH1107_I2C/SH1107_SPI),核心逻辑复用,便于扩展新的硬件接口。
使用说明
1. 环境准备
- 确保开发板已烧录 MicroPython v1.23.0 及以上版本固件。
- 将
sh1107.py上传至开发板的文件系统中。
2. 硬件连接(I2C 示例)
OLED VCC → 3.3V
OLED GND → GND
OLED SCL → GPIO5 (代码中 I2C_SCL_PIN)
OLED SDA → GPIO4 (代码中 I2C_SDA_PIN)
3. 基础初始化
import sh1107
from machine import I2C, Pin
# 初始化 I2C 总线
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
# 初始化 OLED(128x64 分辨率,I2C 地址 0x3C/0x3D,0° 旋转)
oled = sh1107.SH1107_I2C(128, 64, i2c, address=0x3C, rotate=0)
4. 核心 API 调用
# 清屏
oled.fill(0)
# 绘制文本
oled.text("Hello SH1107", 10, 10, 1)
# 绘制直线
oled.line(0, 0, 127, 63, 1)
# 刷新到屏幕
oled.show()
# 调整对比度(0-255)
oled.contrast(127)
# 反转显示
oled.invert(True)
# 软件滚动
oled.scroll(0, 1)
oled.show()
# 关机
oled.poweroff()
示例程序
main.py 完整演示了所有核心功能,执行流程如下:
- I2C 扫描:自动扫描并识别 SH1107 设备地址(0x3C/0x3D)
- 清屏初始化:清空屏幕并等待稳定
- 文本显示:显示设备信息与版本
- 图形绘制:绘制像素点、对角线、矩形与填充矩形
- 对比度调节:演示 255 → 32 → 127 的对比度变化
- 显示反转:切换正常/反色显示模式
- 屏幕旋转:演示 0° → 90° → 0° 的旋转效果
- 软件滚动:实现上下滚动动画
- 开关机演示:关机 → 等待 → 开机 的完整流程
- 结束清屏:恢复空白状态
注意事项
- I2C 地址:若扫描不到设备,请检查 OLED 地址是否为 0x3C/0x3D,或修改
TARGET_OLED_ADDRS列表。 - 分辨率适配:本驱动针对 128×64 优化,若使用 128×128 分辨率,需修改初始化参数。
- 供电稳定:OLED 对电源噪声敏感,建议在 VCC 与 GND 之间并联 10µF 电容滤波。
- 旋转坐标:旋转 90°/270° 后,屏幕宽高会互换,绘制时需注意坐标范围。
- framebuf 版本:大字体、圆形、三角形绘制依赖
framebuf2扩展库,若未安装则无法使用对应方法。 - 硬件复位:若屏幕显示异常,可通过复位引脚(
res参数)执行硬件复位。
联系方式
如有任何问题或需要帮助,请通过以下方式联系开发者:
📧 邮箱:liqinghsui@freakstudio.cn
💻 GitHub:https://github.com/FreakStudioCN