这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【M5PaperESP32E-Ink】ESPHOME适配M5Paper(IT89

共1条 1/1 1 跳转至

【M5PaperESP32E-Ink】ESPHOME适配M5Paper(IT8951E)电子墨水屏驱动

菜鸟
2026-03-29 14:36:09     打赏

M5Paper 是基于 ESP32 的低功耗电子墨水屏开发板,搭载 960×540 分辨率的 IT8951E 控制器墨水屏,非常适合作为 Home Assistant 智能消息可视化终端,用于展示天气、通知、设备状态等信息。

1、硬件驱动兼容性

结合 M5Paper 官方文档与 ESPHome 官方文档,确认各硬件模块的支持情况如下:

  • 墨水屏控制器(IT8951E):ESPHome 无原生驱动,需手动适配

2、IT8951E墨水屏驱动适配

在GitHub上找了一圈,好消息是GitHub 已有相关仓库(razqqm/m5paper_esphome),坏消息是已停更2年了,不兼容最新版ESPHOME,无法直接使用。

于是,我基于 M5Stack 官方驱动库(m5stack/M5GFX)中的 IT8951 驱动源码,对旧版驱动进行修改重构:

  • 下载旧版仓库代码,保留 m5paper 、 it8951e 核心驱动文件夹,删除无用文件;

  • 参照 M5GFX 官方 IT8951 驱动,修改适配最新版 ESPHome。

此处不展开介绍了,完整修改后的驱动代码可直接查看我的个人仓库(https://github.com/pysn2012/m5paper_esphome)。

3、编写ESPHOME配置文件

编写基础ESPHome配置文件,用于测试墨水屏的基础显示功能,配置分为以下几个部分:

① 基础配置:

# ESPHome 核心配置
esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}
  min_version: 2025.5.0               # 要求的最低 ESPHome 版本
  name_add_mac_suffix: true           # 在设备名后附加 MAC 地址
  on_boot:
    - priority: -100                  # 低优先级
      then:
        - it8951e.clear:
            id: m5paper_display       # 清屏
        - delay: 100ms                # 等待 100 毫秒确保清屏完成
        - component.update: m5paper_display  # 手动触发屏幕刷新
esp32:
  board: m5stack_paper
  flash_size: 16MB
  framework:
    type: esp-idf
    advanced:
      minimum_chip_revision: '3.1'

② 添加外部自定义组件(IT8951E):

# 外部自定义组件(本地路径)
external_components:
  - source:
      type: local
      path: components/

③ 使用开源的思源黑体,支持简体中文,配置2种字号:

font:
  - file:
      type: gfonts                  # 字体来源:谷歌字体
      family: "Noto Sans SC"        # 字体家族:思源黑体(简体中文)
      weight: 400                   # 字重:常规(Regular,400)
      italic: false                 # 非斜体
    id: cn_font                     # 字体唯一ID
    size: 36                        # 字号:36
    glyphs: ${allowed_characters}   # 只加载指定字符
    ignore_missing_glyphs: true     # 忽略字体中缺失的字符,不报错
  - file:
      type: gfonts
      family: "Noto Sans SC"
      weight: 400
      italic: false
    id: big_font
    size: 72
    glyphs: ${allowed_characters}
    ignore_missing_glyphs: true

④ 调用外部IT8951E组件,配置引脚、刷新逻辑及显示内容:

# SPI 总线
spi:
  clk_pin: GPIO14                 # SPI 时钟引脚
  mosi_pin: GPIO12                # MOSI
  miso_pin: GPIO13                # MISO
# 显示屏:M5Paper ePaper(基于 IT8951 驱动芯片)
display:
  - platform: it8951e
    id: m5paper_display
    model: M5EPD
    cs_pin: GPIO15                # 片选引脚
    reset_pin: GPIO23             # 复位引脚
    busy_pin: GPIO27              # 忙信号引脚
    rotation: 0                   # 屏幕旋转角度,0是横向
    reversed: False               # 不反转颜色
    update_interval: never        # 不自动刷新,仅手动更新
    # 在屏幕上绘制内容
    lambda: |-
      // 屏幕边缘画边框
      it.rectangle(10, 10, it.get_width() - 20, it.get_height() - 20);
      // 标题:顶部居中 —— 你好M5Paper
      it.print(it.get_width()/2, 30, id(cn_font), TextAlign::TOP_CENTER, "你好EEPW");
      it.print(it.get_width()/2, 100, id(big_font), TextAlign::TOP_CENTER, "M5paper 屏幕测试");

4、云端编译固件

由于国内网络环境限制,本地编译可能会遇到依赖包下载失败的问题,推荐使用 GitHub Actions workflows 进行云端编译,高效且稳定。

① 启用工作流:进入仓库页面,点击上方「Actions」选项卡,启用工作流功能;

② 编写workflows配置文件:

# 工作流名称
name: screen_test
# 触发条件
on:
  workflow_dispatch:  # 手动触发(推荐)
jobs:
  compile-esphome:
    runs-on: ubuntu-latest
    steps:
      # 步骤1:拉取仓库代码
      - name: 拉取仓库代码
        uses: actions/checkout@v4
      # 步骤2:配置 Python 环境
      - name: 配置 Python 环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      # 步骤3:安装 ESPHome
      - name: 安装 ESPHome
        run: |
          python -m pip install --upgrade pip
          pip install esphome
      # 步骤4:动态生成 secrets.yaml
      - name: Generate secrets.yaml
        run: |
          cat > secrets.yaml <<EOF
          wifi_ssid: "${{ secrets.WIFI_SSID }}"
          wifi_password: "${{ secrets.WIFI_PASSWORD }}"
          EOF
      # 步骤5:编译m5paper_esphome固件
      - name: 编译固件
        run: esphome compile screen_test.yaml
      # 步骤6:动态查找编译产物
      - name: 动态查找 firmware.bin
        id: find_fw
        run: |
          SEARCH_ROOT=".esphome/build"   # 与编译目录对应
          FIRMWARE=$(find "$SEARCH_ROOT" -name "firmware.bin" | head -n 1)
          OTA=$(find "$SEARCH_ROOT" -name "firmware.ota.bin" | head -n 1)
          FACTORY=$(find "$SEARCH_ROOT" -name "firmware.factory.bin" | head -n 1)
          if [[ -z "$FIRMWARE" ]]; then
            echo "::error::未找到 firmware.bin,请检查编译是否成功"
            exit 1
          fi
          echo "FIRMWARE=$FIRMWARE" >> $GITHUB_OUTPUT
          echo "OTA=$OTA" >> $GITHUB_OUTPUT
          echo "FACTORY=$FACTORY" >> $GITHUB_OUTPUT
      # 步骤7:上传固件
      - name: 上传固件到 Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: m5paper_esphome-${{ github.sha }}
          path: |
            ${{ steps.find_fw.outputs.FIRMWARE }}
            ${{ steps.find_fw.outputs.OTA }}
            ${{ steps.find_fw.outputs.FACTORY }}
            screen_test.yaml
          retention-days: 30

③ 配置 WIFI 加密参数:进入仓库「Settings > Actions」,添加两个仓库密钥(WIFI_SSID、WIFI_PASSWORD),编译时将自动注入 WIFI 信息;

action设置WIFI.JPG

④ 触发编译:选择「Build」工作流,点击「Run workflow」手动触发编译;

ACTION编译.png

⑤ 下载固件:编译完成后,在工作流运行结果的「Artifacts」板块,下载生成的固件压缩包。

固件下载.JPG

⑥ 固件选择:下载的压缩包包含3个bin文件,选择「firmware.factory.bin」(完整固件)用于烧录。

固件压缩包.JPG

5、烧录固件

测试阶段推荐使用ESPConnect在线工具烧录,支持查看串口日志,便于调试:

① 用 USB 数据线将 M5Paper 开发板连接至电脑;

② 访问ESPConnect在线工具:https://thelastoutpostworkshop.github.io/ESPConnect/

③ 点击「连接」,在设备列表中选择对应的设备;

连接设备.png

④ 左侧选择「闪存工具」,上传编译好的固件,勾选「写入前擦除整个闪存」;

烧录固件.JPG

⑤ 点击「烧录固件」,等待烧录完成。

烧录固件2.JPG

烧录完成后,可打开串口监视器查看设备运行日志。

串口信息.JPG

6、墨水屏效果

screen test.jpg

烧录成功后,屏幕即可正常显示内容。本项目使用开源思源黑体,完美支持中文显示,展示效果清晰。

Home Assistant上也会自动发现一个设备,不过目前这个设备没有实体。

homeassistant添加.JPG





关键词: M5Paper     ESP32     E-Ink     ESPHO    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]