借助 Iroh 打造智能风扇:低成本实现远程控制与数据读取!

1. 打开主菜单

提供服务、使用案例、文档、博客、定价、注册等选项。服务包括托管、可观测性、企业版;使用案例涵盖分布式 AI、视频流、实时同步、支付与 POS、物联网与嵌入式。

2. 由 Iroh 驱动的智能风扇

2026 年 7 月 2 日,在北半球遭受热浪侵袭时,借助 Iroh 编写端到端示例,用 ESP32 测量温度并控制风扇,不涉及云组件,通过小型网站可远程访问。可选用 ESP32 - WROVER 开发套件、M5StickC - Plus2 或其他带 PSRAM 的开发套件,若为不带 PSRAM 的 ESP32,需禁用中继连接并调整 QUIC 缓冲区。

3. 基本设置

从 iroh - esp32 - examples 复制回显示例,使用 server - esp32 - psram 作为 ESP32 二进制文件,client 作为客户端。将其分别重命名为 server - smart - fan 和 smart - fan - cli,两个目录是独立的 Rust 项目。

4. 首次烧录

在服务器项目中执行 cargo run 搜索并烧录 ESP32,首次构建耗时久,后续构建因编译结果缓存而更快。烧录速度可通过设置 ESPFLASH_BAUD 环境变量提高,不同芯片情况不同。需设置 WIFI_CONFIG 环境变量让 ESP32 连接 WLAN。从烧录输出可知接近闪存大小限制,但纯 Rust 依赖项增加大小小。

5. 测试运行

在 ESP32 上运行简单回显服务器。如何分配端点 ID 呢?ESP32 在首次启动时在非易失性内存中生成并存储密钥,后续启动重复使用,同一设备将获得相同端点 ID。设备启动时尝试连接 WiFi,失败则挂起。端点启动后会打印本地 IP 地址、长票和短票,使用 QAD 确定位置并设置家庭中继,之后可用短票从世界任何地方访问。使用客户端二进制文件测试连接,客户端有禁用中继和 mDNS 选项。停止 cargo run --release 只是停止与设备连接,设备有电源就会继续运行,可拔掉电源或使用 espflash erase - flash 删除闪存来关闭。

6. 添加传感器

构建智能风扇需温度传感器,使用 DHT22 温湿度传感器。连接简单,三根线分别连接 +3.3V、GND 和数据传输。用 tracing 打印传感器读数进行测试。若连接错误,传感器会发热,可添加 3.3 kΩ 上拉电阻解决超时问题。

7. 添加协议

使用 irpc 实现远程读取传感器数据,在单独的 crate smart - fan - proto 中定义协议。协议包含读取传感器值的 RPC 调用,使用传感器状态结构体。服务器端用结构体保存传感器状态,客户端目前只进行一次读数。也可继续支持回显协议,使用路由器组合协议。

8. 构建合适的 GUI

使用 dioxus 编写 WASM GUI,第一版是远程温度计,粘贴设备票据可实时查看温度和湿度。进入 smart - fan - wasm 目录运行 npm run build; npm run serve 可打开 GUI,博客文章中的 GUI 可直接测试。

9. 添加执行器

添加 5V 台式电脑风扇作为输出设备,也可用电阻连接 LED 或继电器控制家用风扇。执行器通过简单逻辑控制,添加滞后防止风扇频繁开关。

10. 协议演进

开发中可更改协议,新生产部署更改 ALPN。为让旧 GUI 正常工作,只能添加新 RPC 方法,保持现有方法位置和结构体不变。新的兼容模式枚举包含旧的和新的 RPC 调用。

11. 控制风扇阈值

扩展 RPC 协议添加设置阈值的调用和身份验证,使用硬编码密钥。新 GUI 添加滑块显示和更改阈值,粘贴设备票据并输入 FAN_API_SECRET 可解锁。

12. 付诸实践

将 ESP32、风扇和传感器连接到面包板,设计外壳组装成实用小工具。使用 ESP32 - S3 并更改 GPIO 引脚,外壳内外贴二维码,分别打开只读和控制阈值的 Web UI。

13. 动手试试

博客文章完整代码可在 iroh - smart - fan 中找到,3D 可打印外壳可下载。

14. 还能做什么

ESP32 可配合各种输入和输出设备,输入设备包括温度、光线、CO2、VOC 传感器等,还可进行 WiFi 扫描和姿态估计;输出设备包括 LED、显示器等,可驱动 RC 伺服电机、家用电器。连接设备简单,ESP32 容错能力强。

15. 这是本地优先的吗

使用长票和本地局域网是本地优先,使用现有中继有部分云依赖,但中继是开源通用组件。可使用公共中继测试、托管中继生产部署,也可自行托管。有商业项目特殊需求可联系。Iroh 是即插即用的设备联网库,开源且已在数十万台设备上使用,可查看文档、代码或在 Discord 频道交流。

16. 页脚

让网络更轻松。提供 Discord、Twitter、Bluesky、Mastodon、GitHub、YouTube 等交流渠道。还包括构建、学习、交流相关选项。