怎样将灯控制器用于IoT设备的控制器中

电子说

1.4w人已加入

描述

第1步:电路概述

控制器

控制器

我已经包含了一个上面电路图的副本供参考,尽管应该注意它是对U1的支持,但DS1307Z + RTC在软件中不再可用,不再需要以下组件并将其从零件清单中删除;

U1,R1,R3,R4,C1,Q2和G1

步骤2:软件概述

序言

要成功编译此源代码,您将需要以下额外的库;

PubSubClient.h

由:Nick O‘ Leary

目的:使设备能够与给定的Broker一起发布或订阅MQTT主题

来自:https://github.com/knolleary/pubsubclient

Bounce2.h

由:Thomas O Fredericks

目的:在软件中对输入开关进行反抖动

来自:https://github.com/thomasfredericks/Bounce2

在源代码bel中也提供了完整的详细信息

您还需要知道;

MQTT Broker的IP地址(IPv4格式AAA.BBB.CCC.DDD):

IPAddress代理(

W,X,Y,Z

);

用于您的IoT设备的免费IP地址: byte ip [] = {W,X,Y,Z};

代码概述

启动时,软件将使用上面预先提供的连接详细信息连接到以太网。

一旦连接到IoT设备的LAN,使用以下客户端名称’WIZNet5100-DE:AD:BE:EF:FE:ED ‘在MQTT代理中注册,并将其详细信息发布到以下MQTT主题;

/EthernetDevice/SwVerConfirm::此字符串包含一个连接字符串,以逗号分隔,由通用设备名称,设备的唯一MAC地址和Arduino文件的名称组成用于对设备进行编程。在这种情况下,’WIZNet5100,DE:AD:BE:EF:FE:ED,MQTTStudyLightController1_8.ino ‘。

/EthernetDevice/Study/LightConfirm

::当该设备在/EthernetDevice/Study/LightsQuery 主题,它通过单个字节发布到Swan,顶架和台灯下的/EthernetDevice/Study/LightConfirm 主题状态。该字节的值的范围是0 。.. 7。位0 =天鹅灯,位1 =顶架灯,位2 =桌面灯。 1 =开,0 =关。注意:如果按下本地按钮,将发生相同的确认响应。

/EthernetDevice/Study/LightControllerTempAlarmConfirm

::当此设备在/EthernetDevice/Study/LightControllerTempAlarmQuery 主题上收到发布时,它会通过发布到/EthernetDevice/Study/LightControllerTempAlarmConfirm 主题来做出响应。学习灯控制器温度警报状态。有效= 1/无效= 0。

/EthernetDevice/Study/LightControllerTemp

:该设备会针对该主题发布学习灯控制器内部温度,该温度以摄氏度为单位,经过滚动平均后精确到小数点后2位,其样本存储在以下数组中’averageTempArray [MAX_TEMPS]‘ 》。仅当温度发生整数变化时才会发布更新,以防止此IoT设备“阻塞”网络。

它随后订阅以下MQTT主题;

/EthernetDevice/SwVerCommand::在收到有关此主题的通知时,设备将使用/EthernetDevice/SwVerConfirm 发布进行响应。这是 广播 的回复。即。所有设备都可以响应。

/EthernetDevice/DE:AD:BE:EF:FE:ED/SwVerCommand :收到此主题的通知后,设备将以/EthernetDevice/响应SwVerConfirm 发布。这是 定位 的响应。即。仅此设备将响应。

/EthernetDevice/Study/LightsQuery

::如上文针对/EthernetDevice/Study/LightConfirm ,此设备将使用状态字节响应此主题发布。

/EthernetDevice/Study/SwanLight::当接收到有关此主题的通知时,设备将打开/关闭书房天鹅灯。有效载荷值“ 1”将点亮灯,“ 0”熄灭。更新光输出后,将通过/EthernetDevice/Study/LightConfirm 主题上的出版物返回光的当前状态。这样,OpenHAB站点将反射相应光线的实际值。

/EthernetDevice/Study/TopShelfLight:至于/EthernetDevice/Study/SwanLight ,但控制权用于顶级货架灯。

/EthernetDevice/Study/UnderDeskLight:如上,但适用于Under Desk Light。

/EthernetDevice/Study/LightControllerTempQuery::收到此主题的通知后,设备将以/EthernetDevice/Study/LightControllerTemp 出版物进行响应。有效负载,详细说明了如上所述的当前内部温度。这样,可以在任何时候轮询学习灯控制器,以确定其当前温度。此机制用于克服OpenHAB中图持久性的问题。 (有关更多详细信息,请参见此处https://github.com/openhab/openhab/wiki/Charts)

/EthernetDevice/Study/LightControllerTempAlarmQuery:当收到有关此主题的通知时设备将使用/EthernetDevice/Study/LightControllerTempAlarmConfirm 出版物进行响应,该出版物包含详细描述了当前内部温度警报状态的有效负载,如上所述。另外,如果内部温度超过40摄氏度,所有指示灯将自动关闭,并且将活动状态发布到/EthernetDevice/Study/LightControllerTempAlarmConfirm 主题。这样,学习灯控制器会自动触发对OpenHAB的更新,或者可以对其进行轮询以确定其当前的温度警报状态。该消息将触发“ Light Cont。”上警报铃的颜色状态更改。配置”页面并激活警告声音事件。

完成后,该软件立即进入循环,监视MQTT Broker连接以获取主题出版物以及通过按钮进行的任何本地照明更改请求箱输入,管理系统计时器并持续监控平均内部温度状态。

实现无阻塞计时器

如前言中所述,我实现了无阻塞计时器功能,对此的调用如下;

无效timer_create(int iTimerNumber,无符号长ulTimerPeriod,void(* callbackfn)(void));

用于创建新的计时器“ iTimerNumber”并将其上下文添加到stiTimerArray []。所需的延迟时间“ ulTimerPeriod”以毫秒为单位,并提供了指向回调函数的指针。如果计时器到期,则执行此回调函数。

void timer_update(void);

必须定期从主循环中调用此函数,该函数用于更新所有计时器,检查它们是否已到期,以及是否已到期,启动回调函数’callback()‘。

无效的timer_start(int iTimerNumber);

如前所述,对该函数的调用将启动计时器倒计时

无效的timer_stop(int iTimerNumber);

如前所述,对该函数的调用将

void timer_reset(int iTimerNumber);

被调用将延长超时时间周期到其初始值。有效地创建一个“可重置的单稳态”计时器。用外行的话来说,就像“踢”看门狗计时器一样。

布尔型timer_isRunning(int iTimerNumber);

函数调用以测试以查看给定的计时器当前是否正在运行。

如果需要新的计时器,则必须执行以下操作进行;

增加MAX_TIMERS的数量

#define MAX_TIMERS 3

定义新的计时器定义,即

#define NEW_TIMER 2

定义新的回调函数void cf(void);并添加计时器

timer_create(NEW_TIMER,10000,cf);

启动新timer

timer_start(NEW_TIMER);

给出了源代码的完整副本

步骤3:OpenHAB接口

控制器

控制器

控制器

控制器

要将Study Lights Controller集成到现有的“ SteveQuinn Household” 网站中,我对站点地图进行了更改,如上图一所示。这里的阴影屏幕描述了变化;

研究屏幕现在包含三个开关;天鹅灯,顶架灯,台灯下和内部书房灯控制器温度会显示出来(请参见图2),

已添加新的“灯光控制器配置”(“光照配置”)网页,以允许用户可以查询当前内部温度警报状态以及当前内部温度。 (请参见图3,此处显示为红色,警报处于活动状态),

已添加了一个新的趋势屏幕,其中显示了控制器的内部温度趋势(请参见图4和5)。

与以前一样如果您想使用“ stevequinnhousehold ”示例,则需要做的就是解压缩下面zip文件的内容并将其拖放进入上图6所示的OpenHAB目录。

此实现使用OpenHAB的功能播放声音片段。如上文所述,如果Study Light Controller的内部温度超过40摄氏度,则IoT设备将通过发送带有有效负载= ’1‘。收到此消息将触发在Raspberry Pi上播放声音剪辑“ OverTemp.mp3”,并将“内部温度警报”的颜色从黑色更改为红色。有关更多详细信息,请参见“测试IoT设备”。

为了使OpenHAB能够播放您的OpenHAB安装声音,需要进行一些更改(我正在假设您正在遵循本系列的所有部分)。我已将此更改添加到先前的有关如何安装OpenHAB(第6部分:IoT家庭自动化)的说明中。但是,为方便起见,我也在下面详细介绍了它们。照常执行更改时,切记要打开OpenHAB服务器的PuTTY终端窗口并剪切并粘贴以避免错误。

首先在默认值下编辑openhab文件;

sudo nano/etc/default/openhab

找到USER_AND_GROUP并将其更改为;

USER_AND_GROUP = root:root

现在在systemd下编辑openhab.service;

sudo nano/usr/lib/systemd/system/openhab.service

找到用户和组并将其更改为;

User = root

Group = root

就是这样。现在,重新启动OpenHAB以使更改生效。

sudo服务openhab重新启动

或重新启动

立即重启sudo

步骤4:测试IoT设备

在我先前的Instructable’设置和配置OpenHAB中。第6部分:物联网,家庭自动化‘我介绍了如何使用模拟数据和实时数据进行测试以及它们各自的优点。

在这种情况下,我们将同时使用这两种方法来测试我们的新物联网设备。如上图一和图二所示。

为方便起见,将使用模拟数据来触发过热警报。否则,将需要打开学习灯控制器,并在MSP9700A上施加高于40摄氏度的温度以强制发出警报。

我详细介绍了“过热警报”序列的消息流。在上面的图片3中

为了验证灯光控制和计时器功能,实际上将使用OpenHAB界面和按钮框进行测试。

我还提供了一个测试视频片段

步骤5:结论

鉴于我当前的基础架构以及Arduino/MQTT/Raspberry Pi的知识,我们重新设计了作为家庭自动化网络中的IoT设备,Study Light Controller相对容易实现且运行良好。实际上,添加按钮去抖动库使反应时间比我最初编写的要快得多。

但是,错过属性著名的比尔·盖茨的报价“ 640 K对任何人都应该足够”事后看来,我应该选择一个更大的Arduino,那样我就可以同时包括RTC功能和DHCP功能。

第6步:使用的引用

我使用以下来源将此Instructable放在一起;

PubSubClient.h

由:Nick O’Leary

目的:使设备可以使用给定的代理发布或订阅MQTT主题

来自:https://github .com/knolleary/pubsubclient

Bounce2.h

由:Thomas O Fredericks

目的:在输入开关中消除抖动软件

来自:https://github.com/thomasfredericks/Bounce2

数据表

http://ww1.microchip.com/downloads/zh-CN/DeviceDoc/21 。..

解码规则的二进制数据

HTTPS://community.openhab.org/t/integer-to-binary/。..

https://groups.google.com/forum/# !主题/XTEND浪。..

HTTPS://github.com/openhab/openhab/wiki/Samples-Ru 。..

https://github.com/openhab/openhab/wiki/Samples-Item-Definitions

Xtend

http://www.eclipse.org/xtend/documentation/i ndex.h 。..

绘图(包括rrd4j持久性问题)

https://github.com/openhab/openhab/wiki/Charts

问题:获取exec绑定以执行命令(如何使playSound与OpenHAB一起使用)

https://community.openhab.org/t/problem-getting-exec-binding-to-execute-command/2872/36

Sounds

http://soundbible.com/tags-alarm.html

比尔·盖茨(Bill Gates)报价经常被错过的消息

https://en.wikiquote.org/wiki/Bill_Gates
        责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分