教程

8

阅读时间

智能家居原型设计:Arduino MQTT桥接方案

以 Arduino 为中介桥接器,让原型设计更上一层楼

康斯坦蒂诺斯·帕尔塞尼亚迪斯, Futurehome 的产品设计原型师

本高级原型教程将探讨如何将 Arduino 作为中间桥梁,利用运行在 MQTT 上的平台的真实数据,让 ProtoPie 原型动起来。

该方案使非企业团队无需 Socket.io 也能实现 MQTT 通信,尽管在他们准备好升级到企业计划之前,这种方式会更繁琐一些。

视频

概览

  • 我们要构建什么

  • 什么是 MQTT?

  • 收集你的主题和消息

  • 创建 Arduino 桥接器

  • 下载文件

  • 编辑 ProtoPie 原型

  • 使用 ProtoPie Connect 运行原型

  • 结论

  • 使用 ProtoPie 控制家中的智能设备

我们要构建什么

完成本教程后,你将能够实现类似下方视频中的效果。


Lamp prototype

免责声明

我们的示例使用了 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”。

应用可以获取这些信息,因为它已订阅该特定主题并监听其所有更新。


Think of MQTT as a group chat where many participants can send and read messages.


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


Example of an MQTT event as received when the light turned on successfully.


当灯成功打开时接收到的 MQTT 事件示例。

请观看视频教程,了解如何为 Futurehome 开启 MQTT API,以便你可以在各个主题下进行订阅和发布。在继续之前,请参考下面的检查清单:

  • 在 Futurehome 应用中设置 Local API

  • 设置用户名和密码以提高安全性

  • 在 Playground 中开启 ThingsPlex 以探索主题和消息

收集你的主题和消息

  1. 使用 Futurehome 应用控制你的设备,并在 ThingsPlex Message stream 中监控交换的消息。


Thingsplex Message stream environment with visibility to all events you can use in your Arduino.


Thingsplex Message stream 环境,可查看你在 Arduino 中可用的所有事件。

  1. 打开一个文本文件,粘贴你希望从 ProtoPie 原型发送的消息。例如,打开灯:

  1. 再打开另一个文本文件,粘贴你希望在 ProtoPie 原型中监控并显示的事件。例如,灯的功耗(10.5W):

创建 Arduino 桥接器

当我们的 MQTT 可访问且主题与消息已收集后,就可以制作 Arduino 桥接器。Arduino 本质上会在 MQTT 与 ProtoPie Connect 之间,以及 ProtoPie 与 ProtoPie Connect 之间转发 MQTT 消息。


Arduino is just an intermediary for you to translate and format the messages between your MQTT app and ProtoPie.


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” 文本变量,用于存储我们的事件时间线。

  • 创建点击事件以发布新事件。


tap events
  • 如果灯是关闭状态,则发送开灯命令

  • 如果灯是开启状态,则发送关灯命令

  • 从 ProtoPie Connect 接收传入事件。


incoming events
  • 传入消息为“STATE_LAMP”,并将其内容按 Arduino 传来的值存入“state_lamp”变量。

使用 ProtoPie Connect 运行原型

最后,将你的 ProtoPie 原型添加到 ProtoPie Connect 中,并在 Arduino 端口以 115200 波特率运行 Arduino 插件。

结论

在本高级原型教程中,我们将智能家居 ProtoPie 原型连接到了从 Futurehome MQTT broker 获取的真实数据。这使我们能够控制家中的智能设备,并接收可用于应用内即时可视化的事件。

最终,这种方法将帮助我们以更高效、更有创意的方式原型化实体与数字产品之间的创新交互。它还将减轻开发团队压力,并让利益相关者在设计流程早期就参与梳理不可预见的复杂性。

使用 ProtoPie 控制家中的智能设备

准备好革新你的智能家居概念了吗?立即深入体验 ProtoPie,将你的想法与现实功能无缝集成。迈出智能家居创新的下一步