电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>快速便宜的HomeKit RGB控制器制作

快速便宜的HomeKit RGB控制器制作

2023-02-07 | zip | 2.24 MB | 次下载 | 免费

资料介绍

描述

Arduino 怀旧之情

我十一岁的时候开始玩 Arduino,我的第一个项目在这里发布(它现在突然消失了吗?)是在我十三岁的时候——但现在我十八岁了。时间过去了,但几天前我决定重新打开“Arduino 盒子”,在烧焦的组件和死昆虫之间,我拿起了我的 Arduino UNO 和一个在 Aliexpress 上购买的 Ethernet Shield 仿制品。我不得不说,这是一个“怀旧项目”,我决定不为这个项目买任何东西,只使用那个盒子里的东西——而且,以太网电缆是免费的,因为我在学校偷了它。

我决定做一个 HomeKit 相关的项目,主要有两个原因:

  • 我最近买了一个带 HomeKit 兼容控制器LED 灯条,它以一种奇怪的方式让我感到惊讶,我不想解释
  • 因为我所有的数字设备(电脑手机、手表)都是苹果制造的,它们都有 HomeKit 原生支持

开始之前:安装 HomeBridge

由于 Ethernet Shield 不是连接家庭自动化配件的最可能方式(在大多数情况下首选 Wi-Fi),因此没有一种“官方且经过测试”的方式可以直接连接到 HomeKit 而无需中间设置。相反,对于 ESP 系列,有一个库可以让 HomeKit 直接访问开发板,当然配置和设置起来相当复杂。

在这个项目中,Arduino 开发板和 HomeKit 之间的通信由 HomeBridge 管理。HomeBridge 是一个服务器,可以托管在 LAN 上的计算机上,并充当本地网络设备和互联网之间的“桥梁”(顾名思义)。这可能是一个缺点,因为需要一台托管服务器的计算机,但它对于像我们将要制作的简单编码设备来说更实用。

就我而言,这不是我实际会使用的设备,它更像是一个演示。所以我在我的 iMac 上托管了 HomeBridge。在本教程中,我不会向您展示如何安装它,而是为您提供一个有用的链接,向您展示正确的安装方法,请查看此链接以在 macOS 上安装 HomeBridge

在那之后,你可能会看到类似这样的东西

将 HomeBridge 添加到您的家庭应用

安装 HomeBridge 后,您必须将所谓的“HomeBridge Hub”添加到 iPhone 上的家庭应用程序。为此,请按照下列步骤操作:

  • 打开家庭应用
  • 单击屏幕右上角的“+”图标,然后单击“添加附件”
  • 扫描 HomeBridge 仪表板上显示的二维码
  • 点击“添加到主页”
  • 该应用程序会说该桥未经过认证,无论如何都要添加它
  • 选择桥梁在您家中的位置
  • 为桥选择一个名字

完成后,桥将添加到您的 Home 应用程序中

安装 HomeBridge 插件

整个项目依赖于两个插件,homebridge-http-rgb-pushhomebridge-http-notification-server 对我们来说幸运的是,按照以下步骤安装这些插件非常容易:

  • 转到 HomeBridge 的“插件”部分
  • 在搜索栏中输入两个库的名称
  • 通过单击“安装”按钮安装库

通常这个过程很快,应该不会出错,如果你运气好,我们就可以进行下一步了。

HomeBridge 配置文件

HomeBridge 配置和定制的核心是一个 JSON 文件。HomeBridge 通过将其加载到浏览器内的编辑器中,可以轻松访问和修改它,该编辑器可以在“配置”面板中轻松访问。

在这里,您必须做出第一个重要决定,即要为 Arduino 设置的 IP 地址。如果需要,您以后可以随时更改它。您最有可能希望用于该附件的配置如下。

将其粘贴到“附件”括号内

{
     "accessory": "HttpPushRgb",
     "name": "Arduino RGB",
     "service": "Light",
     "timeout": 3000,
     "switch": {
         "notificationID": "47110815",
         "status": "http://192.168.1.177/statuspower",
         "powerOn": "http://192.168.1.177/on",
         "powerOff": "http://192.168.1.177/off"
      },
     "brightness": {
         "status": "http://192.168.1.177/statusbrightness",
         "url": "http://192.168.1.177/brightness/%s"
     },
     "color": {
         "status": "http://192.168.1.177/statuscolor",
         "url": "http://192.168.1.177/set/%s"
     }
 }

要设置附件名称,请编辑“名称”字段。如果你想保留我使用的 IP 地址,那没问题。最后,您应该会看到这样的屏幕。

要应用这些更改,您必须通过单击橙色保存按钮来保存文件,然后通过单击右上角的关闭图标重新启动 HomeBridge(保存文件后它将开始闪烁)

通过打开 Home 应用程序,您现在应该会看到自动添加的配件。

阿杜诺,终于

是的,我们终于回来了。同样对于 LED 设置,我使用了我已经拥有的,这就是我使用的:

  • 便宜且通用的 12V LED 灯条
  • 一个 12V 电源适配器(以前用于为损坏的路由器供电

如果你愿意,你可以附加一个简单的按钮并将其用作“手动开关”,这也会通过向服务器发送通知来更改 HomeKit 上的状态。附加一个按钮不应该那么难,但是有一个关于如何做的很好的教程:)

说到代码,它并没有那么复杂。如果您迫不及待地想对此进行测试,则可以直接将其上传到您的板上,而无需花时间观看它。但是停下!首先,您应该检查为 RGB 通道和按钮定义的引脚分配,然后设置正确的 HomeBridge 服务器 IP 地址和为您的电路板选择的地址。

// connections of the three LED outputs and the button input
#define outRed 3
#define outGreen 5
#define outBlue 6
#define switchButton 7
// network properties
char homebridgeServer[] = "xxx.xxx.xxx.xxx"; // your HomeBridge server IP address
int homebridgePort = 8581;
IPAddress ip(192, 168, 1, 177); // IP address of Arduino (must be equal to the one set on homebridge!)

您要重点更改的主要地址是 HomeBridge 服务器地址,如果您托管 HomeBridge 的机器具有静态 IP 地址(例如 Pi),则可以立即设置。就我而言,我的电脑在局域网内没有静态 IP 地址,我不想只为这个项目设置静态地址。如果你的情况和我一样,你可以使用大多数路由器提供给每个主机的.local mDNS地址(在我的例子中,我设置的地址是“myMacExample.local”,你的路由器的mDNS服务器将自动解析此地址并提示请求到正确的 IP 地址)。

您始终可以在 HomeBridge 仪表板中查看您的 HomeBridge 服务器地址,就在二维码图像下方。如果你打算每天使用 HomeBridge,我真的建议你为托管它的机器分配一个静态 IP 地址。

最后但同样重要的是,检查草图中设置的 Arduino 的 IP 地址是否等于 HomeBridge 配置文件中设置的 IP 地址。

完成所有这些后,您现在可以将以太网扩展板粘贴到 Arduino 上,插入以太网电缆并加载草图。

解释代码

为了确保正确处理以太网设置,我从官方 WebServer 和 WebClient 示例开始构建我的草图。使用 Arduino 以太网库发出请求很粗糙,但很容易。

这是在 Home 应用程序中进行更改时系统执行的流程:

  • HomeKit 向 HomeBridge 服务器发送一个事件
  • HomeBridge 服务器然后将其发送到 Arduino
  • Arduino 让这一切成为现实
  • 为了确认请求已得到满足,需要一个确认响应,因此 Arduino 在执行操作后向 HomeBridge 发送确认
  • 然后 HomeBridge 确认该操作发生在 HomeKit 上
  • 最后 HomeKit 在 Home 应用程序上显示更改

处理动作的 GET/SET 的代码如下。本例为“on”动作的接收-执行-确认流程。

if (firstLine.indexOf("on") != -1) { // action is received
           Serial.println("Turning ON");
           // action is executed
           powerStatus = 1;
           analogWrite(outRed, colorR);
           analogWrite(outGreen, colorG);
           analogWrite(outBlue, colorB);
           // action in confirmed back to the server
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
           client.println("Connection: close");
           client.println();
           client.println(powerStatus);
} 

为了通知服务器状态的变化,例如通过改变开关状态的按钮,实现了以下流程

  • Arduino 向 HomeBridge 发送 POST 请求
  • HomeBridge 验证设备的状态,验证是否与 Arduino 发送的相匹配
  • HomeBridge 通知 HomeKit 状态改变
  • HomeKit 在 Home 应用程序上显示更改

这是 Arduino 构建和发送的通知请求,其余由 HomeBridge 完成

   Serial.println("==========");
   Serial.println("Button changed the state, sending a notification to HomeBridge");
   if (notificationClient.connect(homebridgeServer, homebridgePort)) {
     if (powerStatus == 0) {
       powerStatus = 1;
     } else {
       powerStatus = 0;
     }
     Serial.print("Successfully connected to: ");
     Serial.println(notificationClient.remoteIP());
     notificationClient.println("POST /47110815 HTTP/1.1");
     notificationClient.print("Host: ");
     notificationClient.print(homebridgeServer);
     notificationClient.print(":");
     notificationClient.println(homebridgePort);
     notificationClient.println("User-Agent: Arduino/1.0");
     if (powerStatus == 0) {
       notificationClient.println("Content-Length: 41");
     } else {
       notificationClient.println("Content-Length: 40");
     }
     notificationClient.println("Content-Type: application/json");
     notificationClient.println();
     if (powerStatus == 0) {
       notificationClient.println("{"characteristic": "On","value": "false"}");
     } else {
       notificationClient.println("{"characteristic": "On","value": "true"}");
     }
     delay(1);
     notificationClient.stop();
     Serial.println("Notification sent");
     Serial.println("==========");
   } else {
     Serial.println("Connection failed");
     Serial.println("==========");
   }

理解了这些流程概念后,代码就很容易理解了。它由基本的 HTTP 请求组成,如果你问我,它不是那么安全,但 HomeBridge 将确保互联网连接的安全性。

……有效果吗?

我真的希望如此!为了确保这一点,请始终注意串行监视器,因为那里会记录非常有用的调试信息

schermata_2022-08-03_alle_23_18_19_LULEmiPdmy.png?auto=compress%2Cformat&w=740&h=555&fit=max
Arduino 收到一个请求
 

在串行监视器上,您将看到收到的每个请求、完成的请求操作和处理的信息。您还将看到,当按钮被触发时,通知请求被发送到服务器

schermata_2022-08-04_alle_01_29_30_neGV5Bekpg.png?auto=compress%2Cformat&w=740&h=555&fit=max
发送到服务器的通知
 

此外,始终检查 HomeBridge 上的日志,显示服务器发送或接收的每个请求

schermata_2022-08-04_alle_02_09_46_VhKSwuUBXS.png?auto=compress%2Cformat&w=740&h=555&fit=max
HomeBridge 日志面板
 

嘿 Siri,就这样(几乎)

是的,仅此而已。我希望这对你来说很容易设置,因为我很难让它工作。我遇到了一些问题,例如家庭应用程序上的附件“丢失”,可能是由于 HomeBridge 对 Arduino 的非连续轮询造成的。要重新获得对配件的控制,只需在 Home 应用程序上点击它,这将唤醒 HomeBridge 并将配件重新连接到网络。

我已经很长时间没有测试过这个项目了,因此我不建议依赖这种设置作为 DIY 家庭自动化的永久解决方案,肯定有更好的。但是,嘿,这是一个学习的机会,无论是对我还是(我希望!)对你来说,了解这个复杂的东西 - 如 HomeKit - 是如何工作的。

对于任何问题,请不要犹豫写评论。在这里,我将在 Apple 生态系统内的 Home 应用程序中留下一些最终外观的屏幕截图。

 
 
 
img_4296_XlH7hfJxC9.PNG?auto=compress%2Cformat&w=740&h=555&fit=max
 
1 / 4要求 Siri 打开灯
 

 

schermata_2022-08-03_alle_23_50_19_rmYRRTsFS7.png?auto=compress%2Cformat&w=740&h=555&fit=max
macOS 上的“家庭”应用
 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费