NooLite无线设备和智能家居(第1部分)。Arduino的

NooLite

各位Geektimes亲爱的读者们,大家好!这次,我想引起您的注意,有关将nooLite无线设备集成到家庭自动化系统中的系列文章此周期将类似于已经发布的有关将Laurent模块集成到Smart Home系统中的系列文章(),只有它会讨论nooLite系统,并且在阅读了此周期后,您将对从Smart管理nooLite设备毫无疑问。在家里。

关于系列文章


循环分为三个部分。在第一部分中,您将通过Arduino项目了解nooLite无线设备的操作原理以及如何对其进行管理。在第二部分将详细介绍一下在Arduino的超级服务器的控制模块MT1132的整合,在这方面的机会,智能家居控制的开口来解释。本系列第三篇文章将专门讨论一个非常有趣的主题-基于Arduino Mega Server创建“ 100合1”设备的概念。实际上,将仅基于一个nooLite无线二聚体,详细研究在AMS上创建无线焊台的示例。还将有第四部分,您将学习如何创建魔术水晶。

顺便说一下,将在第三篇文章中讨论的焊接站已经存在于最新的Arduino Mega Server组件中,编号为0.14。最好奇的读者不能等待第三篇文章,而是立即下载分发工具包,并弄清它们如何独立工作。

焊台

很棒的是,AMS中可以同时存在数百个这样的设备。例如,焊接站,气象站,安全单元,温室控制器等。所有这些都可以同时工作,也可以通过加载网页或整个专用于特定设备的站点来“启动”。

但是,让我们不要超越自己,让我们最后留下最有趣的部分,但是现在我们将做必要的理论准备。我保证将以最简单,最易懂的方式陈述一切。因此,让我们开始吧。

NooLite设备


NooLite设备已经是一个众所周知的流行系统,并且在Internet上有很多有关它的信息。我将在这里尝试总结要点。

这个概念非常简单-有用于控制灯光和各种负载的电源单元,以及向这些电源单元发送命令的控制面板。自然,所有这些工作都无需有线连接的参与。其实一切。该系统的优点在于,所有组件都经过深思熟虑,制作精良并完全按照其所说的做-它们可靠地控制了连接的设备。

还有无线传感器,来自智能手机的设备控制等等,但是不可能在一篇文章中介绍所有内容,这里我们仅关注nooLite与流行的DIY平台Arduino的集成。

在整个nooLite设备的广泛范围中,我们将对MT1132控制模块感兴趣,因为它设计用于连接Arduino和Raspberry Pi等单板计算机。它可以在简单的串行接口上​​工作。展望未来,我会说我喜欢该模块是因为它的简单性,可预测性和可靠的操作。经过一个月不愿工作的W5500芯片上的网络模块的无能为力的努力,我能够欣赏到这些品质。

MT1132模块

我特别喜欢以下事实:(除了电源)模块仅通过一根(!)线(RX)连接到Arduino。第二个(TX)可以完全省略。该模块是“单向”的,也就是说,它仅设计用于发送控制信号。 Nootehnika公司的计划包括开发和发布该模块的“双向”版本。

SU111-300

nooLite设备需要的第二个要素是功率控制单元,例如SU111-300。单元的连接是基本的,可以在图中看到。两条导线连接到220伏特网络,另外两条连接到负载。我唯一要注意的是,模块随附有一个跳线,用于阻止调光模式;如果要调节电源,则需要切断该跳线(并记住要对产生的裸线进行绝缘)。

PU311-2

我不会在遥控器上讲,因为这是一个“手动”控件,而与自动化有关的我们对自动化更感兴趣。我只能说,实验是使用壁挂开关形式的PU311-2遥控器进行的,并且以最佳方式展示了自身,即,它可以清晰地打开和关闭灯,而不会出现故障。实际上,好的设备与坏的设备不同-您只是没有注意到好。

工作理念。绑定和取消链接


在使用nooLite系统打开和关闭电器之前,需要将控制模块“链接”到相应的电源单元。这可以通过所谓的过程来完成。在nooLite文档中详细描述了“绑定”和“调整”。简而言之,一切都归结为按下链接块上的一对按钮,并且没有任何困难。

在使用MT1132控制模块代替遥控器的情况下,过程的执行方式略有不同。即:由于模块没有按钮,因此您需要以编程方式在所需的通道上生成并发送控制命令,然后按下电源单元上的按钮,以确认“绑定”或“取消绑定”。

通道是“控制线”,MT1132模块中有32条通道,名称中的后两位数字可以证明。这意味着,通过此模块,您可以管理32个独立的设备组,对于一套公寓或一栋小房子来说,这已经足够了。如果您的房子很大,则这些模块可以协同工作并扩展到任意数量的通道。

协议说明


Nootehnika公司网站有一个很棒的文档,全面详细地描述了模块连接及其控制协议。我不会用不必要的技术细节来弄乱文章,任何人都可以阅读本文档,我将仅介绍要点。

要控制该模块,我们需要形成一个由12个字节组成的控制命令。上面文档中描述了组建团队的原则。正如您将在下面看到的那样,所有这些规则已经在控制功能中进行了编程,我们只需要使用它们就可以向模块发出命令。

测试团队


nooLite有一个相当完善的命令系统,我们将从中选择最简单和最常见的命令系统,并使用其示例进行说明。

  • 捕捉
  • 解开
  • 包容性
  • 功率设定(调光)

了解基本团队的工作方式后,您可以轻松使用其他任何团队。

连接MT1132模块


正如我已经说过的,MT1132模块实际上是用一根电线(电源除外)连接的。该模块可以由5伏电压和3.3伏电压供电。因此,连接到5伏Arduino Mega或3.3伏Arduino Due没有问题。唯一的一点是,随着功率的降低,系统可靠运行的范围将减小。如果要使用3.3伏特的电压为模块供电,则必须考虑到这一点。

Arduino的

该模块具有RX和TX引脚,用于通过串行接口接收和发送信号。模块操作的关键是RX的连接,用于接收来自控制器的控制命令。因此,模块侧的RX引脚连接到Arduino侧的TX引脚(18)。此引脚对Arduino Mega和Arduino Due有效。

软件部分


现在,让我们从Arduino的草图中找出如何管理所有这些经济性。首先,初始化将MT1132模块连接到的Serial1(以标准频率9600完成):

Serial1.begin(9600);

现在,主要控制功能的代码为:

void nooSendCommand(byte channel, byte command, byte data, byte format) {
  byte buf[12];

  for (byte i = 0; i < 12; i++) {
    buf[i] = 0;
  }

  buf[0] = 85;
  buf[1] = B01010000;
  buf[2] = command;
  buf[3] = format;
  buf[5] = channel;
  buf[6] = data;

  int checkSum = 0;
  for (byte i = 0; i < 10; i++) {
    checkSum += buf[i];
  }

  buf[10] = lowByte(checkSum);
  buf[11] = 170;

  for (byte i = 0; i < (12); i++) {
    Serial1.write(buf[i]);
  }
}

原则上,我们甚至不需要知道它是如何工作的,我们可以在“黑匣子”模式或某种API中使用它,并保留一定的接口。我们只需要知道如何使用该界面即可。

如您所见,只有四个参数-通道,命令,数据和格式。您可以按照上述原则阅读该文档的请求,但可以进一步简化我们的任务,并将此接口包装在简单的nooLite设备控制命令中。

void nooBind  (byte ch)         {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind(byte ch)         {nooSendCommand(ch,  9, 0, 0);}
void nooOn    (byte ch)         {nooSendCommand(ch,  2, 0, 0);}
void nooOff   (byte ch)         {nooSendCommand(ch,  0, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch,  6, v, 1);}

相对复杂的团队只是最后一个,在那里,除了渠道之外,力量水平也被设定。草图中还有一些我们现在不讨论的团队,但它们的组成也很容易。

其实...就是这样!没有地方比这容易。在代码中,控制命令如下所示:

nooBind(ch);
nooUnbind(ch);
nooOn(ch);
nooOff(ch);
nooValue(ch, v);

现在让我们练习练习nooLite电源模块管理。因此,我们将功率模块绑定在零通道上:

nooBind(0);

功率单元上的LED开始闪烁。按下功能块上的按钮-LED停止闪烁-连接了电源块。除了零通道,您还可以使用其他任何通道。您可以根据需要在草图代码中轻松生成通道号。

打开灯(如果将灯绑在零通道上,则必须在该通道上发送其命令):

nooOn(0);

设置功率(灯的亮度):

nooValue(0, 100);

在这里,您需要说一些有关组建力量级别的规则。功率值不会像人们想象的那样从0更改为255,而是从35更改为155。如果该值大于155,则功率将最大,如果为0,则等效于关闭命令。

这里(以防万一)一个公式,将“标准”值从0转换为100,转化为nooLite模块可以理解的格式:

v = x * 1.2 + 34;

使用此公式,您可以按通常的功率百分比设置灯泡的亮度。而且,当然,如果需要非线性调整功率,则可以根据任何定律甚至选择固定值来创建变量v。这将在周期的第三部分中进行讨论,届时我们将调整焊接台的加热温度。

关闭设备:

nooOff(0);

解开:

nooUnbind(0);

功率单元上的LED开始闪烁。我们通过按下电源装置上的按钮来确认去耦。就是这样,现在电源已停止响应我们的命令,我们可以再次在nooLite MT1132模块的32个通道中的任何一个上“捕捉”它。

这是完整的草图。

完整的草图代码
byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];

for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}

buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;

int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}

buf[10] = lowByte(checkSum);
buf[11] = 170;

for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}

void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}

void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}

void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}

void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}

void setup() {
Serial1.begin(9600);

/*
loop(), */

//nooBind(0);

//nooOn(0);
//nooOff(0);
//nooValue(0, 100);

//nooUnbind(0);
}

void loop(){

}

小计


如您所见,使用Arduino 控制nooLite电源模块并不复杂相反,控制非常简单:模块通过一根线连接,命令几乎是一种自然的语言-“打开通道0”,“关闭通道1”, “要在通道3上设置50%的功率”真的没有那么简单。

对于那些读到最后的人有奖励


在前几天,发布了新版本的Arduino Mega Server,编号为0.14,该版本克服了该技术中所有的儿童疾病,并且可以快速,稳定地工作。同样的版本包含集成的nooLite仪器控制核心及其全部工作原理,您将从系列“ nooLite无线设备和智能家居(第2部分)”的下一篇文章中学习。Arduino Mega服务器。” 循环

的第二第三第四部分。

Source: https://habr.com/ru/post/zh-CN389067/


All Articles