Skip to content

OLED 显示屏 (SSD1306/SH1106) ​

LCD(type=36)是当前单色 LCD/OLED 管理器,与 LCD1602(52)和图形触摸屏 SCREEN_DISPLAY(56)分别配置。当前实现使用 I2C、地址 0x3C;SPI/并行及其他控制器枚举是预留值,不代表已实现对应驱动。

已实现的面板选择 ​

配置 width / height实际构造的驱动
128 / 64SSD1306 128×64
128 / 32SSD1306 128×32
72 / 40SSD1306 72×40
64 / 128SH1106 128×64;配置值作为旧版选择标记,运行尺寸归一为 128×64

其他尺寸目前回退到 SSD1306 128×64,不能据此宣称支持任意分辨率。当前没有通过配置选择 0x3D、SSD1309、ST7567、ST7920 或 PCD8544 的已实现路径。

配置与身份 ​

只允许保存一个 LCD36 配置,导入同样检查。输出使用外设 ID,对照驱动保留的 ID、SDA/SCL 和显示配置;第二个 ID 不能接管已经保留的单例。旧配置含多个 LCD36 时,应先整理配置,不能依赖“最后初始化者生效”。

pins[0] 为 SDA,pins[1] 为 SCL,必须不同并通过当前板型资源检查。21/22 仅是经典 ESP32 的示例,不是所有芯片和开发板的默认推荐。

json
{
  "peripherals": [
    {
      "id": "oled_01",
      "name": "OLED显示屏",
      "type": 36,
      "enabled": false,
      "pinCount": 2,
      "pins": [21, 22],
      "params": {
        "width": 128,
        "height": 64,
        "interface": 2,
        "contrast": 255
      }
    }
  ]
}

参数直接位于 params 下,没有额外的 params.lcd 层。当前实现将 contrast=0 按默认 255 处理,不能用它表示关闭显示。先核对编译开关、运行时 lcd 功能、内存预算和接线,再明确启用。

规则与脚本 ​

外设执行的 OLED_DISPLAY(actionType=27)接受多行文本:

语法含义
首行 #标题居中标题及分隔线
$传感器缓存模板
$value此次 typed OLED_DISPLAY 的接收值
换行分行显示,最多 6 行,且受屏幕高度和字体限制

动作必须指向已启用的 LCD36 外设 ID。已有命令脚本中的 TEXT/DISPLAY 使用自定义文本,SHOW 使用已登记的传感器缓存页面,CLEAR 清屏。SHOW 可指定 -1 或 0–127 页码;-1 使用当前页面,没有接入一个新的自动轮播任务。没有传感器条目时 SHOW 返回失败。

模板解析、来源有效性、配置版本、普通输出持有和驱动结果共同决定动作结果;脚本显示失败会终止该次脚本,不再只记录 FAIL 后继续。

HTTP 接口 ​

写接口要求登录和开发者模式,目标是唯一启用的 LCD36 配置。服务端从当前认证会话取得控制来源,默认手动持有 30 秒。该组旧接口不接受客户端指定 actor/source/operation,也不提供强制接管流程;争用时返回拒绝及控制结果。

端点方法表单参数作用
/api/lcd/textPOSTtext;可选 x、y、align 或 line坐标或行模式写文本并提交帧
/api/lcd/clearPOST无清屏并提交帧
/api/lcd/infoPOST无显示 IP、Wi-Fi、内存概况、运行时间
/api/lcd/fontPOSTfont=0/1/2更新后续绘制使用的字体
/api/lcd/statusGET无查询软件初始化和显示尺寸信息

text 最多 1024 字节且不能含内嵌 NUL;x/y 取 0–255,align 取 1–3,line 按实际行数检查,255 保留为坐标模式。数字须完整有效,拒绝截断后接受的负数、溢出或混合字符串;重复、未知、文件及 query 写参数也会拒绝。

字体 0 是小 ASCII 字体;1/2 的中文字库须同时具备编译及运行时条件,否则回退到 ASCII。字体接口只更新本地绘制状态,不触发物理传输;其结果为 attempted=false、CONTROL_DISPLAY_STATE_UPDATED。

仲裁、传输与维护 ​

规则、命令脚本和 HTTP 写入共享命名目标的普通输出仲裁。活动持有期间其他来源不能绕过它直接修改缓冲区。驱动低层的 clear/print/refresh 等为内部方法;扩展代码应复用已有来源边界和 PM 提交,不直接调用单例写屏。

前台显示请求会实际提交帧,不把旧的 50ms 节流跳过当作传输成功。一次请求的后续 U8g2 数据块在首个 NACK/短写后停止;结果保留真实 attempted 和失败原因。CONTROL_DISPLAY_TRANSPORT_ACKNOWLEDGED 只表示 I2C 传输确认,不代表画面、位置、字符或亮度已经实物验证。

已有开机重申和长期总线恢复维护经过同一个 PM 入口,只在目标没有活动普通输出持有时运行。前台帧失败后,维护暂停,失败请求的缓存内容清除,避免稍后自动重放;明确提交新的成功请求后恢复维护。动作结束和持有期结束不会自动清屏。

验证与资源 ​

分别记录固定文字、各字体与换行、SHOW 缓存页、清屏、断线/NACK及恢复的现场结果。初始化标志或 I2C 地址 ACK 都不能证明屏幕正确显示;未连接设备时保持待验证。

128×64 单色像素缓冲的数据量为 1024 字节,实际 RAM 还包括 U8g2 对象、文本、传感器缓存和总线状态。Flash、堆内存、碎片和实际帧耗时应在指定环境及功能组合下测量,当前文档不提供未经实测的 CPU 百分比或总资源保证。

相关文档 ​

蜂信物联 | fastbee.cn