本高级原型教程将探讨如何将 Arduino 作为中间桥梁,利用运行在 MQTT 上的平台的真实数据,让 ProtoPie 原型动起来。
该方案使非企业团队无需 Socket.io 也能实现 MQTT 通信,尽管在他们准备好升级到企业计划之前,这种方式会更繁琐一些。
概览
我们要构建什么
什么是 MQTT?
收集你的主题和消息
创建 Arduino 桥接器
下载文件
编辑 ProtoPie 原型
使用 ProtoPie Connect 运行原型
结论
使用 ProtoPie 控制家中的智能设备
我们要构建什么
完成本教程后,你将能够实现类似下方视频中的效果。

免责声明
我们的示例使用了 Futurehome 网关,我们理解这可能具有很强的受众特定性。我们相信你可以将此方法复用到任何其他使用开放 MQTT 的服务上,例如 Home Assistant。如需进一步支持,请联系 partheniadis.k@gmail.com。
什么是 MQTT?
MQTT 是一种常见协议,用于以 json 格式在客户端与网关之间发送和接收消息。你可以简单把它理解为群聊,许多参与者都可以发送和读取与某个主题相关的消息。
在我们的示例中,网关是 Futurehome Smarthub II,它对所有智能家居消息交换都使用开放 MQTT。Futurehome 用户通常使用移动应用来打开家中的灯。点击灯后,应用会向相关主题“床头灯”发布一条“state: on”消息。
消息发布到 MQTT 后,网关会获取该消息并打开灯。如果成功打开,网关会在 MQTT 的同一主题“卧室灯”下发布一个事件,该事件在“state: on”基础上附带更多详细属性,例如能耗“power: 5 watts”。
应用可以获取这些信息,因为它已订阅该特定主题并监听其所有更新。

可以把 MQTT 想成一个群聊,许多参与者都可以发送和读取消息。

当灯成功打开时接收到的 MQTT 事件示例。
请观看视频教程,了解如何为 Futurehome 开启 MQTT API,以便你可以在各个主题下进行订阅和发布。在继续之前,请参考下面的检查清单:
在 Futurehome 应用中设置 Local API
设置用户名和密码以提高安全性
在 Playground 中开启 ThingsPlex 以探索主题和消息
收集你的主题和消息
使用 Futurehome 应用控制你的设备,并在 ThingsPlex Message stream 中监控交换的消息。

Thingsplex Message stream 环境,可查看你在 Arduino 中可用的所有事件。
打开一个文本文件,粘贴你希望从 ProtoPie 原型发送的消息。例如,打开灯:
再打开另一个文本文件,粘贴你希望在 ProtoPie 原型中监控并显示的事件。例如,灯的功耗(10.5W):
创建 Arduino 桥接器
当我们的 MQTT 可访问且主题与消息已收集后,就可以制作 Arduino 桥接器。Arduino 本质上会在 MQTT 与 ProtoPie Connect 之间,以及 ProtoPie 与 ProtoPie Connect 之间转发 MQTT 消息。

Arduino 只是一个中间层,帮助你在 MQTT 应用与 ProtoPie 之间转换并格式化消息。
简化步骤如下所示,但你可以在视频教程和 Arduino 代码模板中找到更详细说明:
准备一块支持 WiFi 或 LAN 的开发板。我们使用的是 Adafruit Feather。任何 ESP8266 都可以。
引入 ESP 库:ESP8266WiFi.h
引入 MQTT 发布/订阅库:PubSubClient.h
引入 ArduinoJson.h 以更轻松地处理 JSON
创建你要发布命令所用主题的数组(如文本文件中所保存)
创建你要订阅以接收事件所用主题的数组(如文本文件中所保存)
将通过 ProtoPie Connect 发送到 MQTT 的 JSON 消息进行格式化与简化
简化并串口打印为 ProtoPie Connect 接收到的消息,例如“STATE_LAMP || 1”,以便原型可以显示它们。
下载文件
在这里下载代码模板和 ProtoPie 原型。
编辑 ProtoPie 原型
我们希望原型能够“开灯”或“关灯”,并实时显示其功耗。除此之外,我们还会创建一个事件时间线,将最新接收的事件连同时间戳置顶显示。
根据你的需求设置变量:
“state_lamp” 数值变量,用于存储接收到的灯状态(0:关,1:开)
“power_lamp” 文本变量,用于存储瓦特功耗。我们会在公式中将其转换为数字,以便进行所需计算或单位换算,例如转换为 kW。
“events_text” 文本变量,用于存储我们的事件时间线。
创建点击事件以发布新事件。

如果灯是关闭状态,则发送开灯命令
如果灯是开启状态,则发送关灯命令
从 ProtoPie Connect 接收传入事件。

传入消息为“STATE_LAMP”,并将其内容按 Arduino 传来的值存入“state_lamp”变量。
使用 ProtoPie Connect 运行原型
最后,将你的 ProtoPie 原型添加到 ProtoPie Connect 中,并在 Arduino 端口以 115200 波特率运行 Arduino 插件。
结论
在本高级原型教程中,我们将智能家居 ProtoPie 原型连接到了从 Futurehome MQTT broker 获取的真实数据。这使我们能够控制家中的智能设备,并接收可用于应用内即时可视化的事件。
最终,这种方法将帮助我们以更高效、更有创意的方式原型化实体与数字产品之间的创新交互。它还将减轻开发团队压力,并让利益相关者在设计流程早期就参与梳理不可预见的复杂性。
使用 ProtoPie 控制家中的智能设备
准备好革新你的智能家居概念了吗?立即深入体验 ProtoPie,将你的想法与现实功能无缝集成。迈出智能家居创新的下一步




