//
🇨🇳 中文
🇺🇸 English
🇯🇵 日本語
🇰🇷 한국어
🇫🇷 Français
🇩🇪 Deutsch
🇪🇸 Español
🇷🇺 Русский

这是一个基于树莓派和 2.9 寸电子墨水屏(E-Ink)打造的智能桌面仪表盘项目。该项目旨在为耐力运动爱好者提供一个低功耗、全天候的信息展示窗口。核心采用 Python 编写驱动,利用 Flask 在局域网内构建 Webhook 服务,实现了与 n8n 自动化工作流及 DeepSeek 大模型的深度集成。

系统包含五大功能视图:实时天气与 AQI 监测、由 DeepSeek 生成的个性化户外运动建议、Strava 近期运动数据同步、支持农历显示的公历月历,以及集成实时天气图标的极简时钟。在交互设计上,项目利用 GPIO 连接物理按键,实现了“单击循环翻页”与“双击主动触发数据刷新”的便捷操作。这是一个融合了 IoT 硬件控制、API 数据聚合与 AI 内容生成的极客 DIY 解决方案,完美兼顾了实用性与桌面美学。


E-Ink Smart Dashboard

这是一个基于 Raspberry Pi 和 E-Ink(电子墨水屏)的智能桌面仪表盘项目。它通过 Python 控制屏幕显示,并通过 Flask 运行一个本地 Web Server 接收来自 n8n 的数据推送。

该项目专为 2.9寸 E-Ink 屏幕 设计,集成了天气、AI 建议、运动数据(Strava)、时钟和农历日历功能。

✨ 主要功能

系统包含 5 个主要页面,通过物理按键循环切换:

  1. P1 - 天气概览:
  • 显示当前位置、AQI 指数、本机 IP 地址。
  • 未来 5 天天气预报(图标、中文描述、高低温)。

F4ADA483-C2CB-4851-92E2-51C6AF98E0FC_4_5005_c.jpeg

  1. P2 - AI 建议 (DeepSeek):
  • 显示由 n8n 集成 DeepSeek 生成的户外运动/生活建议。
  • 支持中文自动换行排版。

10C4A6D0-CB8A-449D-8D4D-9E420DCCFD30_4_5005_c.jpeg

  1. P3 - 运动记录 (Strava):
  • 显示最近 5 条 Strava 运动记录。
  • 包含日期、运动类型(跑/骑)、距离和时长。

3B0040A7-5608-4B85-930B-073AF5650CC7_4_5005_c.jpeg

  1. P4 - 极简时钟:
  • 大字体时间显示。
  • 完整日期(公历)、实时天气图标、气温及 AQI。
  • 逻辑优化:每分钟自动刷新,且会对齐到下一分钟的第 01 秒唤醒。

7BB07853-CC51-41FA-9959-37CD3D94BEFE_4_5005_c.jpeg

  1. P5 - 日历 (公农历):
  • 当月公历日历。
  • 集成农历(初一、十五、节气等)显示。
  • 高亮显示“今天”。

CA9D20A3-0DF3-4A45-9787-D6603DB85A21_4_5005_c.jpeg

🛠️ 硬件与环境要求

  • 硬件:
  • Raspberry Pi (Zero W / 3B / 4B)
  • E-Ink Display (需支持 epd_driver)
  • 物理按键 (连接至 GPIO 21)

  • 软件:
  • Python 3.x
  • Raspberry Pi OS


📦 安装与依赖

  1. 安装 Python 库:

    pip install flask pillow gpiozero requests zhdate
    


  2. 驱动程序:
    确保项目目录下包含微雪屏幕驱动文件:
  3. epd_driver.py (或对应的型号驱动模块)
  4. epdconfig.py

  5. 字体文件:
    项目严重依赖特定字体,请确保以下路径存在字体文件,或在代码 配置区 修改路径:
  6. DejaVuSansMono-Bold.ttf: 通用西文/数字
  7. weather.ttf: 天气图标字体 (映射关系见代码 WEATHER_ICONS)
  8. wqy.ttc: 文泉驿微米黑 (支持中文显示)
  9. digital.ttf: 电子表风格字体 (用于时钟页)


⚙️ 配置说明

main.py 的头部配置区修改以下变量:

# 字体路径
FONT_PATH = '/path/to/your/font.ttf'
CN_FONT_PATH = '/path/to/wqy.ttc' 
# ... 其他字体

# 硬件引脚
BUTTON_PIN = 21 

# n8n Webhook 地址 (用于双击主动刷新)
N8N_WEBHOOK_URL = "https://yoursite.com/webhook/refresh_weather"


🎮 操作说明

  • 单击 (Single Click): 切换到下一页 (P1 -> P2 -> ... -> P5 -> P1)。
  • 双击 (Double Click):
  • 屏幕跳转至 AI 页 并显示 "正在呼叫 n8n..."。
  • 后台向 N8N_WEBHOOK_URL 发送请求。
  • n8n 处理完毕后,通过 API 将最新数据推回树莓派,屏幕自动刷新。


🔌 API 接口 (供 n8n 调用)

树莓派会在端口 5000 启动 Flask 服务,接收数据推送。

1. 更新天气与数据 (POST /weather)

这是核心数据接口,n8n 流程跑完后应调用此接口。

Endpoint: http://<RPI_IP>:5000/weather

Payload (JSON):

{
  "location": "Shanghai",
  "aqi": {
    "val": "45",
    "level": "优"
  },
  "forecast": [
    {
      "day": "Mon",
      "date": "10/21",
      "icon": "01d",       // OpenWeatherMap icon code
      "high": 24,
      "low": 18,
      "desc": "晴"
    },
    // ... 更多天数 (共5天)
  ],
  "strava": [
    {
      "day": "Sun",
      "date": "10/20",
      "type": "跑",
      "dist": "15.0",
      "time": "1h20m"
    }
    // ... 更多记录
  ],
  "ai_msg": "今天天气适合LSD训练,建议心率控制在140以下。" // DeepSeek 生成的内容
}

2. 简单消息推送 (POST /webhook)

用于简单的调试或状态通知。

Endpoint: http://<RPI_IP>:5000/webhook

Payload:

{
  "msg": "Hello World"
}

📂 目录结构建议

/home/zack/eink-monitor/
├── main.py              # 主程序
├── epd_driver.py        # 屏幕驱动
├── epdconfig.py         # 底层引脚配置
├── digital.ttf          # 字体资源
├── weather.ttf
├── wqy.ttc
└── assets/              # 其他资源

🚀 运行

推荐使用 systemdsupervisor 守护进程运行,确保开机自启。

手动运行:

python3 main.py

若要在无屏幕硬件的环境下测试逻辑(Simulation Mode),脚本会自动检测导入错误并进入模拟模式(需自行修改代码中的 sys.exit() 逻辑以允许模拟运行)。


Author: Zack
Last Updated: 2026-01-23

标签: DeepSeek, strava, Python, n8n, Webhook, Raspberry Pi, E-Ink, Flask, IoT, Smart Dashboard, Weather Station, GPIO, Pillow, Digital Clock, Lunar Calendar

添加新评论