基于 Arduino、Yaler 与 IFTTT 构建 Web 化 IoT 仪表盘
组件与物料
| Arduino Yun | × | 1 |
| 舵机 (Tower Pro MG996R) | × | 1 |
| M3 螺母与螺栓 | × | 3 |
| 4mm 胶合板 | × | 1 |
所需工具
| 激光切割机 |
| 热熔胶枪 |
| Android 或 iOS 手机 |
应用与在线服务
| IFTTT Maker 服务 |
项目简介
(源自 Instructables)
本项目演示如何构建一个基于 Arduino 的 Web 化 IoT 仪表盘,通过 REST API 与 IFTTT 平台联动,借助 Yaler.net 中继服务实现远程访问。
亮点在于: IFTTT 的 Maker Channel 支持自定义 Webhook,让 DIY 物联网项目能无缝接入云端自动化流程——这是自 2011 年以来期待已久的特性。
灵感来源于经典 DIY 物联网项目 WhereDial,该仪表盘可显示主人的当前位置,有点像《哈利·波特》中的韦斯莱家族时钟。设计与代码具有通用性,亦可用于显示天气等其他信息——逻辑在云端,仪表盘本质只是一个带 API 的舵机。
下载资源(针对 Uno)
- Yaler Arduino 库:
YalerEthernetServer.zip - Arduino Uno 代码:
IoTGaugeWebService.ino
注:作者为 Yaler 创始人之一。 Zapier 等平台早已支持自定义 Webhook。
步骤 1:激光切割与组装 IoT 仪表盘
零件制作
- 下载 IoT Gauge 设计文件
- 用 4mm 胶合板激光切割
- 刻蚀位置名称(或手写标注)
组装步骤
- 将以太网扩展板安装到 Arduino(Uno 方案)
- 将 Arduino 固定到底板(注意方向)
- 将大面板安装到舵机,再安装小面板
- 将底板插入两块面板,确保对齐
- 用热熔胶固定指示牌,确保朝向正确
- 用杜邦线将舵机连接到 Arduino 引脚 9、5V 和 GND(或扩展板)
- 安装指针(稍后校准)
步骤 2:上传 IoT 仪表盘 Web 服务代码
简易 Web 服务
控制 IoT 仪表盘非常简单:一个 Web 服务(REST API)监听请求并设置舵机位置。仪表盘只是一个“哑”舵机,将逻辑放在云端,未来可随时切换“大脑”(如改为显示天气)。
实现 Arduino 远程访问
为让 IFTTT 云服务访问仪表盘,Arduino REST API 必须可从公网寻址。专家可配置防火墙/路由器端口映射,但较麻烦,本项目采用中继服务。
Arduino Uno 部署(Yun 方案见下)
- 按 指引 安装
YalerEthernetServer.zip库 - 下载
IoTGaugeWebService.ino代码 - 确保使用唯一 MAC 地址
- 将
RELAY_DOMAIN替换为你的中继域名(在 Yaler.net 免费试用获取) - 上传代码至 Arduino Uno
Arduino Yun 部署(Uno 方案见上)
- 按 指引 安装 YalerTunnel 并启用 Web 访问
- 下载
IoTGaugeMailboxApi.ino代码 - 上传代码至 Arduino Yun
为何 Yun 代码与 Uno 不同?
Yun 内置名为 Mailbox 的 REST API。为使其可从公网访问,我们使用 YalerTunnel Linux 守护进程(支持 SSL 加密,Uno 不支持)。复用现有基础设施可简化代码,节省宝贵的 Arduino 端内存。Yun 的 Mailbox API 并不完美(不完全符合 REST,允许 GET 修改状态),但基于 Linux 侧脚本运行,优势明显。请对比两份代码自行抉择。
若不愿用中继服务,可移除并(针对 Uno)取消注释本地服务器代码。
步骤 3:用 Curl 测试 Arduino Web 服务
安装 Curl
- 从 curl.haxx.se 下载安装
- 打开终端测试:
$ curl -v https://google.com/
启用 Arduino Yun API(Uno 跳过)
- 给 Yun 供电,稍等片刻,访问
https://arduino.local/ - 登录并点击 Configure
- 下拉将 REST API 访问设为 Open
- 点击 Configure & Restart
用 Curl 测试仪表盘
- 确保 Arduino 已上电并联网
- 发送指令将舵机转到位置 3(1-5 任选):
$ curl -vX POST https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3
(将RELAY_DOMAIN替换为你的中继域名) - 确认舵机指针转到目标位置(必要时微调指针)
- 确认收到
< HTTP/1.1 200 OK响应 - 若收到
504说明 Arduino 离线或域名拼写错误
为何用 Curl 测试?
Curl 是标准 HTTP 客户端。浏览器适合测试 GET,在线工具可测 POST/PUT,但浏览器可能自动跟随重定向等“魔法”行为。若要确保 IFTTT 等第三方 Webhook 能正常调用你的 API,Curl 最可靠。
注:Uno 代码对请求解析较宽容,POST /mailbox/pos/3 与 PUT /servo?pos=3 均有效。
步骤 4:接入 IFTTT Maker Channel
创建新 IFTTT 配方
IFTTT 通过“配方”连接触发器与动作。
- 访问 创建页面(需先注册)
- 搜索触发器频道,如 "Android Device" 或 "iOS Location" 并选择
- 选择触发器,如 Connects to a specific WiFi network(Android)
- 输入网络名称或位置
- 动作频道搜索 Maker 并选择
- 选择动作 Make a web request
- URL 填入:
https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3(替换域名) - Method 选 POST
- Content Type 选 application/x-www-form-urlencoded
- Body 留空
添加现成配方
IFTTT 允许发布配方,以下两个可直接用于控制 IoT Gauge:
- 搜索 "IoT Gauge" 配方
- 点击 Add 添加实例
- 输入 WiFi 名称或位置
- 将 URL 中的
RELAY_DOMAIN替换为你的域名 - 根据位置调整 URL 中的
pos参数(1-5) - 每个位置添加一个配方实例
注:IFTTT 搜索似乎暂未收录 Maker Channel 配方。
步骤 5:创建 IFTTT Do Button 控制仪表盘
IFTTT Do 应用
IFTTT 提供 iOS/Android 版 Do 应用,可手动触发动作,适合测试其他配方。Do 应用配方暂不支持分享/公开,需自行创建。
创建 Do Button
- 从 官网 获取 Do Button 应用
- 完成引导页
- 点击右下图标调出配方列表
- 点击 + → Channels 搜索 Maker
- 选择动作 Make a web request
- URL、Method、Content Type 同步骤 4
- Body 留空,点击 Add 创建按钮
- 创建后可在 网页端 编辑
大功告成!感谢阅读,欢迎提问或建议。
代码仓库
Bitbucket 托管完整代码。
自定义零件与外壳
IoT_Gauge.zip 包含激光切割设计文件。
原理图
制造工艺
- 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- 物联网 + AI 守护水生态:多参数水质监测系统
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- 自制高精度测距轮:Arduino Nano + 旋转编码器 + 1602 LCD
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- 高性能 Arduino 气象气球数据记录器
- ArduFarmBot 第二部分:构建远程 IoT 控制站
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- 进阶微控制器实验平台:ESP32、Arduino、PIC 与多传感器模块集成
- Arduino Nano 手持盖革计数器:DIY 核辐射检测仪
- Arduino Nano 与 WS2812 灯带打造 1D 乒乓球游戏——分步 DIY 教程