本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Blues Wireless的断电检测器

发布时间:2022-06-08
分享到:

基于Blues Wireless的断电检测器

发布时间:2022-06-08
分享到:

据估计,全球有近 90% 的家庭用上了电,这意味着当我们停电时,我们中近 90% 的人不可避免地会感到烦恼。

虽然大多数时候这只是一种烦恼,但失去电力(尤其是当我们在离开或睡着时没有意识到它时)可能会导致灾难性的后果。这可能意味着非常多不可估计的意外情况,从恢复供电时由于电流浪涌导致的设备损失,到危重护理环境中的生命线。

在这个项目中,我们将介绍如何构建我认为最简单的全球可用、支持蜂窝的断电检测器,并配备由 Twilio 提供支持的即时 SMS 通知。

这个项目不需要用到以往曾频繁使用的烙铁,但它也并没有因此变得更容易!

我们将使用Blues Wireless Cellular Notecard,将其连接到Blues Wireless Notecarrier-A,并使用新发布的 Notecard 固件功能,该功能允许在没有主机微控制器的情况下自主报告 GPIO 状态更改。

我们还需要一个带 JST 连接器的小型 LiPo 电池(任何容量都可以)和一根微型 USB 电缆(带墙上插座适配器)。

使用蜂窝网络的原因
当发生停电时,我们不能依赖本地网络硬件来启动和运行(例如 Wi-Fi)。在这种情况下,蜂窝网络是唯一可靠的选择。

Blues Wireless Notecard 有Wi-Fi和蜂窝两种版本。蜂窝模型在全球范围内适用于LTE-M、NB-IoT 和 Cat-1 协议,与传统的蜂窝物联网产品不同,因为它们预付了 500MB 的数据和 10 年的全球蜂窝服务。

Notecard 成功的秘诀是,一旦你打开它,它就知道要去哪里。Notecard 不在公共互联网上,只能通过私有 VPN 隧道进行通信(使其成为非常安全的设备)。不需要证书管理或手动密钥轮换。

Notecard 与什么通信?它自动与Blues Wireless 云服务 Notehub.io 同步,后者又可以将数据安全地路由到几乎任何云服务(如 AWS、Azure、Google Cloud)、RESTful 端点或支持 MQTT 的服务。

您只需打开 Notecard 的电源,使用基于 JSON 的 Notecard API中的命令之一,它就能够与云进行通信。

构建一个断电检测器
如前所述,我们将使用 Notecard 和 Notecarrier-A。Notecarriers是开发板,可让您使用 Notecard 轻松构建 IoT 解决方案的原型。Notecarrier-A 提供板载天线、JST 连接器、用于外围设备的 Qwiic 连接器,并暴露了 Notecard 上的所有引脚。

首先,我们只需将 Notecard 插入 Notecarrier-A 上的 M.2 边缘连接器:

然后我们将MAINNotecarrier-A 上的 u.fl 连接器连接到MAINNotecard 上的 u.fl。这允许使用 Notecarrier 上的板载蜂窝天线:

注意:您也可以选择连接GPSu.fl 连接器,这样您就可以使用蜂窝 Notecard 上的 GPS 模块。

接下来,我们需要使用短跳线连接VUSB到AUX1Notecarrier-A。通过正确的card.auxNotecard API 请求,Notecard 可以自动报告任何AUX引脚 (1-4) 上的状态变化。通过连接VUSB到AUX1,我们将自己设置为能够将断电的状态变化报告到VUSB:

通过JST 连接器将 LiPo 电池连接到 Notecarrier 。LIPONotecarrier 的另一个优点是,当它通过 USB 供电时,它将保持连接的 LiPo 电池的电量:

最后,Notecarrier 可以通过 micro USB 电缆连接到您想要监控的墙上插座。

设置Notecard
Notecard 使用一种语言:JSON。

所有Notecard API 命令都是 JSON 格式,这也意味着任何可以读写字符串的编程语言也可以与Notecard 通信。如果您使用的是 MCU 或单板计算机,则有Blues Wireless 支持的适用于 Python、C/C++、Arduino 和 Go 的 SDK(以及社区支持的适用于Rust和.NET 的 SDK)。

使用dev.blues.io 提供的浏览器内终端,我们可以通过 Web Serial 的魔力直接连接到我们的 Notecard 并发出基于 JSON 的 API 命令:

尝试发出一个示例命令,例如{"req":"card.version"},从记事卡中获取一些识别信息:

> {"req":"card.version"}
{
 "body": {
  "org": "Blues Wireless",
  "product": "Notecard",
  "version": "notecard-3.3.1",
  "ver_major": 3,
  "ver_minor": 3,
  "ver_patch": 1,
  "ver_build": 14612,
  "built": "May 18 2022 11:21:51"
 },
 "version": "notecard-3.3.1.14612",
 "device": "dev:864475040543182",
 "name": "Blues Wireless Notecard",
 "sku": "NOTE-NBGL-500",
 "board": "1.11",
 "api": 3
}

注意:这是检查 Notecard 固件版本的好机会!我们即将使用的新 API 功能至少需要固件 v3.3.1。

接下来,我们可以在 Notehub.io 上设置一个新的(免费)帐户并创建我们的第一个 Notehub 项目。

在这个 Notehub 项目中,我们将看到来自 Notecard 的传入数据,并使我们能够使用 Twilio 发送 SMS 消息:

创建 Notehub 项目后,我们需要保存项目的唯一标识符(ProductUID ),例如:

com.your-company.your-name:power_outage
接下来,返回浏览器内终端,将此 Notecard 与我们刚刚创建的 Notehub 项目相关联。为此,我们使用hub.set API:

{
  "req":"hub.set",
  "product":"com.blues.rlauer:power_outage",
  "mode":"continuous"
}

然后,我们可以使用hub.sync API 快速测试蜂窝连接,如下所示:

{"req": "hub.sync"}

几秒钟后,我们就可以回到我们的 Notehub 项目,看到 Notecard 已经成功建立了蜂窝连接:

现在我们来看看好东西!我们可以使用card.aux API 的一项新功能,通过以下命令自动报告 AUX 引脚上的状态变化:

{
   "req":"card.aux",
   "mode":"gpio",
   "usage":[
      "input-pulldown",
      "off",
      "off",
      "off"
   ],
   "sync":true,
   "file":"power-outage.qo"
}

请求

数组中元素的顺序usage对应于 AUX 引脚。所以数组中的第一项 == AUX1(我们的跳线连接到它)并且它使用input-pulldown选项将引脚设置为下拉输入。

该"sync":true参数告诉我们的 Notecard立即将任何状态更改传达给我们的 Notehub 项目。

最后,该"file":"power-outage.qo"参数提供了一种在 Notehub 中识别/命名这些状态更改事件的简单方法。

测试
假设我们的硬件已插入并以正确的方式连接,并且我们的 Notecard 与 Notehub 成功通信,我们已准备好测试断电!

只需从 Notecarrier-A 上拔下 micro USB 电缆即可。LiPo 电池将立即成为 Notecard 的活动电源,并且将记录状态更改。AUX1您可能会注意到 Notecard 的绿色 LED 亮起,让您知道它正在与云通信并向 Notehub 发送便笺:

这很棒!在提供的 JSON 中,我们看到阵列中的 AUX1 引脚状态为“低”,这意味着 USB 电源已丢失:

{"state":[{"low":true},{},{},{}]}

我们还可以重新插入 Notecarrier以查看恢复电源时状态更改事件的样子:

{"power":true,"state":[{"high":true},{},{},{}]}

看到这个停电数据显示在 Notehub 中,虽然很好,但并不能真正帮助我们采取任何行动。

我们的下一步是设置 SMS 消息,以便在停电几秒钟内收到一条短信。这是通过Notehub的路由功能实现的。

启用短信功能
Notehub 路由让您可以将数据路由到任何第三方云服务。这可能是 AWS、Azure 或 Google Cloud 等大型云,也可能是 Datacake、Ubidots、Adafruit.io 或 Losant 等物联网平台。它甚至可以是 MQTT 服务或通用 RESTful HTTP/S 服务,就像 Twilio 提供的消息端点一样:

https://api.twilio.com/2010-04-01/Accounts/[twilio_account_sid]/Messages.json

请按照 Blues Wireless 提供的广泛的 Twilio SMS 路由指南来启用对 Twilio 的消息传递 API 的访问。

正如您在该指南中看到的,我们可以对 Notehub 路由进行一些小的自定义,以更改发送的 SMS 消息。

首先,让我们确保仅在将这些事件发送到 Notehub时才收到通知。为此,请确保在配置 Notehub 路由时提供的字段中输入:power-outage.qopower-outage.qo

其次, Notehub允许您使用JSONata 动态转换JSON。上面的 Twilio 指南中对此进行了概述,我将包含我使用的 JSONata 表达式:

"&Body=" & (body.state.low ? "Your power is out!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论