sh1107_driver

A MicroPython library to control sh1107_driver

1.0.1 hogeiha 更新时间: 2026-03-30
安装包
本地安装
mpremote mip install https://upypi.net/pkgs/sh1107_driver/1.0.1
远程安装
mip.install("https://upypi.net/pkgs/sh1107_driver/1.0.1")
版本选择
README

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 库)

硬件要求

文件说明

软件设计核心思想

  1. FrameBuffer 继承:继承 MicroPython 原生 framebuf.``FrameBuffer,复用成熟的绘图算法,保证兼容性与稳定性。
  2. 页面更新机制:将屏幕按 8 行高度划分为多个“页”,仅更新发生修改的页,大幅减少 I2C/SPI 数据传输量,提升刷新效率。
  3. 旋转适配:支持 0/90/180/270° 旋转,旋转后自动交换宽高坐标,适配不同安装方向的屏幕布局。
  4. 参数强校验:对所有输入参数(坐标、颜色、地址等)进行类型与范围校验,避免非法输入导致硬件异常。
  5. 接口解耦:将 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 完整演示了所有核心功能,执行流程如下:

  1. I2C 扫描:自动扫描并识别 SH1107 设备地址(0x3C/0x3D)
  2. 清屏初始化:清空屏幕并等待稳定
  3. 文本显示:显示设备信息与版本
  4. 图形绘制:绘制像素点、对角线、矩形与填充矩形
  5. 对比度调节:演示 255 → 32 → 127 的对比度变化
  6. 显示反转:切换正常/反色显示模式
  7. 屏幕旋转:演示 0° → 90° → 0° 的旋转效果
  8. 软件滚动:实现上下滚动动画
  9. 开关机演示:关机 → 等待 → 开机 的完整流程
  10. 结束清屏:恢复空白状态

注意事项

  1. I2C 地址:若扫描不到设备,请检查 OLED 地址是否为 0x3C/0x3D,或修改 TARGET_OLED_ADDRS 列表。
  2. 分辨率适配:本驱动针对 128×64 优化,若使用 128×128 分辨率,需修改初始化参数。
  3. 供电稳定:OLED 对电源噪声敏感,建议在 VCC 与 GND 之间并联 10µF 电容滤波。
  4. 旋转坐标:旋转 90°/270° 后,屏幕宽高会互换,绘制时需注意坐标范围。
  5. framebuf 版本:大字体、圆形、三角形绘制依赖 framebuf2 扩展库,若未安装则无法使用对应方法。
  6. 硬件复位:若屏幕显示异常,可通过复位引脚(res 参数)执行硬件复位。

联系方式

如有任何问题或需要帮助,请通过以下方式联系开发者:

📧 邮箱:liqinghsui@freakstudio.cn

💻 GitHubhttps://github.com/FreakStudioCN

文件列表
Name Size Type
LICENSE 1.0KB File
README.md 5.0KB Doc
code/main.py 4.4KB Main
code/sh1107.py 53.7KB Python
package.json 448B Conf