所以,我有了一个天气播报员,它还能告诉我新闻。
摘要
一位开发者详细介绍了使用ESP32和Claude Code构建定制电子墨水屏显示器,用于个人监控天气、新闻和其他信息。
暂无内容
查看缓存全文
缓存时间: 2026/09/20 18:38
# 所以我做了一个天气预报员,它还能给我播报新闻(上篇)| Yogiraj H
来源:https://dexteroot.net/posts/2026/07/so-i-have-a-weatherman-which-also-tells-me-the-news-part-1/
成品天气播报器照片:一块面包板上装有 LILYGO T5 电子墨水显示屏,显示天气、待办事项、市场行情、空气质量和 Hacker News 模块,旁边连接着一个 DHT22 传感器我们这儿的夏天相当干燥、炎热,而且相当难熬。因此,为了从这一切中寻得一些解脱,我想尝试一些不同的措施来有效降低我家的温度。我认为一个好的起点是建立一个基准并找出标准差。为此,我意识到需要在一段时间内持续观察我家的温度和湿度。
Grafana 面板显示了一周的室内温度读数(最低 26.1°C,最高 29.4°C,平均 27.8°C),带有一个时间序列图表,下方是湿度统计的开始部分与此同时,我一直在尝试减少社交媒体(尤其是 YouTube、Instagram 和 Reddit)上算法推荐给我的内容量。Hacker News 拥有相当透明的算法和我喜欢的作者的 RSS 订阅源,这似乎是一个掌控我所消费内容的良好开端,这也是我设置 miniflux 的原因,而且效果一直不错。只是我倾向于错过 HN 上经常出现的一些前沿内容,特别是 AI/LLM 相关的东西。
Miniflux 订阅源列表,显示了 22 个已订阅的源及未读数量,包括:Hacker News: Active、Hacker News: Best、Simon Willison's Weblog、LWN.net 和 The Cloudflare Blog此外,我对天文事件感兴趣,比如月球掩星或日食等,以便决定是否能用我的望远镜尝试观测。这也与我想了解家周围空气质量的兴趣相关。
想到这里,我突然意识到我有一个电子墨水显示器,它一直放在房间角落的电子产品篮里积灰。某天,我决定用 Claude Code 为它最终构建点东西,将其用作一个静态显示屏,展示我上面提到的这些信息。
我几年前从 hubtronics.in (https://hubtronics.in/) 购买了它,当时我正在做一个涉及 STM32/MC60 嵌入式编程的项目。这是 LILYGO 的 T5 电子墨水模块。它集成了 ESP32 芯片,支持 WiFi 和蓝牙。
| 组件 | LILYGO T5 4.7" 电子墨水 |
| :--- | :--- |
| **主控芯片** | ESP32,双核 Xtensa LX6 @ 240 MHz |
| **无线连接** | Wi-Fi 2.4 GHz (802.11 b/g/n),蓝牙 4.2 + BLE |
| **内存** | 520 KB SRAM · 8 MB PSRAM · 16 MB 闪存 |
| **显示屏** | 4.7" 电子墨水 · 960 × 540 · 16级灰度 (ED047TC1) |
| **其他** | USB-C、锂电池接口、RTC、睡眠电流约 170 μA |
## 用户界面
那么,接下来的问题是如何将这些数据投射到显示屏上。内容的结构、形式,以及哪些部分最需要吸引我的注意。
### 第一次尝试
我开始时太缺乏条理,很快就措手不及了。我没有花心思考虑布局,结果把所有内容打印成了一个左对齐的文本块。
这相当丑陋,我甚至没拍张照。
早期单段落布局的复原图,尚未应用网格或层级结构
### 第二次尝试
我决定从一个简单的设计开始。它包含一个 HTTP 服务器,该服务器从外部 API 收集所有订阅源,并通过 HTTP 以 JSON 格式提供服务。这个具有固定模式/契约的 JSON 将由 ESP32 渲染。ESP32 在成功调用服务器 API 后,会定期刷新屏幕。
然后我提示 Claude 设计一个 2x3(高 x 宽)的网格,它很快就生成了一个足够好的渲染方案。
接着我让它处理那些需要吸引注意力的部分,将最相关的信息制作得更大、更简洁、更容易吸引注意。
顶部一行显示天气、待办和空气质量指数 + 统计数据。底部一行显示 HN、阅读状态和日期时间。
效果不错,只是用于显示 HN 的 320px 单元格对于新闻标题来说太拥挤了。而且,日期时间 & 阅读状态单元格太窄,不值得单独占用一个完整单元格。因此,我决定将右下角两个单元格合并,创建一个双倍宽度的 HN 区域。我还把待办事项 + 阅读列表合并到了顶部中间的单元格中。市场行情放在右上角,空气质量指数 + 月相放在左下角。日期时间 & 日出日落时间放在宽幅 HN 区域的底部。我还调整了字体,起初用 OpenSans,后来换成 Montserrat,并使用了不同大小以适应布局。我还从使用图片资源改成了全部使用基本图形,并添加了一些习惯用法,比如标题使用大写加下划线。
## 网络架构
在迭代 UI 的同时,我已经将带有静态 JSON 的固件刷入 ESP32,用于渲染 UI。现在我需要通过 WiFi/蓝牙将 ESP32 连接起来,以便它能从服务器无线获取数据。
我很快就发布了固件,其中包含一个由服务器内网 IP 地址组成的 HTTP URL。我让 Claude 用 Clojure 实现了一个提供静态 JSON 服务的服务器。
系统架构:ESP32 显示屏从 HTTP 服务器获取 JSON 数据流,该服务器聚合了天气/空气质量指数、Hacker News 和市场数据
接着我决定尝试使用 mDNS,试用了 ESPmDNS 进行解析。但我始终无法让它工作起来,即使使用 Claude 多次调试为什么 ESP 无法解析 mDNS 主机名。最终,我放弃了——此时其他功能仍然正常工作,ESP32 可以获取并渲染来自服务器的 JSON。
不过还是有一些问题:
- 当我配置 ESP32 在渲染完成后休眠,并在 10 分钟后唤醒以获取更新的订阅源时,它就是醒不过来。
- 如果服务器端获取失败,它会停止提供服务,而不是提供上一次的有效数据。
另外,我还想引入更多功能:
- 使用传感器监测室内空气质量。
- 集成待办事项/阅读清单。
- 添加变更检测功能,在数据未变化时跳过电子墨水屏刷新。
这些内容我将在后续的博客文章中介绍。
显示屏最终看起来是这样的:
在 LILYGO T5 电子墨水显示屏上渲染完成的仪表盘感谢阅读!
相似文章
这款 48 美元的电子墨水屏,想让它显示什么都行
Ars Technica 评测了 Seeed Studio 与 TRMNL 联合推出的一款 48 美元 DIY 电子墨水屏套件,它可以被动显示日历、天气、新闻等自定义信息,支持在两套官方生态系统或自托管服务器上运行,且无需订阅。
Weathergotchi – 开源气候Tamagotchi
一款开源的、电池供电的温湿度数据记录器,配备常亮电子纸显示屏,基于ESP32-S3构建。该项目包括定制PCB、3D打印外壳和用于低功耗运行的固件。
@adafruit: 智能电子纸桌面仪表板 – ESP32-C6 SuperMini + 7.5″ Display #3DThursday #3DPrinting https://blog.adafruit.com/2026…
这是一个使用ESP32-C6 SuperMini和一个7.5英寸显示器的智能电子纸桌面仪表板项目展示,是Adafruit的3D打印系列的一部分。
@cnxsoft: 基于ESP32-S3的4.2英寸E Ink显示屏可用作便签,并接受用户的语音输入 https://cnx-software.com…
ZecTrix Lab的Note 4是一款4.2英寸ESP32-S3电子纸显示屏,可用作支持语音输入的AI便签,具备Wi-Fi、蓝牙、NFC,并支持开源固件。
@poetengineer__: 打造Claude代码的袖珍ASCII花园每周仪表板 🌿
一位开发者正在构建一个用于Claude AI代码的袖珍ASCII花园仪表板,该消息在一条推文中分享,并附有项目链接。