
要点或本文的内容
我们继续有关以下内容的系列文章 什洛蒂尼 - 基于芯片的可视化可编程控制器 ESP8266.
本文以浴室或其他高湿度房间的通风控制项目为例,介绍如何构建程序 什洛蒂尼.
该系列的前几篇文章。
引用
介绍
没有经验就没有理解。 这是经过时间和世代检验的真理。 因此,对于学习实用技能来说,没有什么比尝试自己做一些事情更好的了。 展示您可以做什么以及您不应该尝试什么的示例在这里会派上用场。 别人的错误当然不能阻止你自己错误的发生,但可以帮助减少后者的数量。
之前文章的读者的问题和来信促使我制作了一个小项目 - 通风控制的示例,以展示 ShIoTiny 节点的工作原理。
控制器诞生的最初想法 什洛蒂尼 - 抽水和灌溉站 - 并不适合所有人,也不会引起所有人的兴趣。 因此,我以一个对很多人来说都容易理解且有用的通风控制系统为例。
我会说该项目的想法不是我的,而是 然后适应 什洛蒂尼.
首先明白自己想要什么
改进的过程是无止境的。 而正是这个属性毁掉了很多好的想法和项目。 开发人员并没有发布一些不完美但仍然有效的东西,而是继续改进它。 他改进了它,直到竞争对手绕过它,发布了一个可行的解决方案,尽管不理想(而且通常非常糟糕),但有效。
因此,了解在哪里结束该项目非常重要。 或者,换句话说,我们需要根据项目开始时的情况来确定项目结束时我们想要得到什么。 在俄语中,对于一份专门为了描述创造某物的道路而编写的文件,有一个美妙而简短的词“计划”,最近,智障翻译者和有缺陷的管理者出于某种原因开始将其称为“道路”。地图”。 好吧,上帝保佑他们。
我们的计划将会是这样的。 我们假设有一个房间,其中湿度有时会显着上升。 例如,浴室或厨房等。 潮湿是一件令人不愉快的事情,对抗它的方法与世界一样古老:让房间通风。 通风的方法有很多种。 但我们也许会放弃异国情调和老式的方法,比如黑人带粉丝,而坚持使用普通粉丝。 在我们地区,风扇更便宜,也更容易找到。
总之,我们想要控制风扇:打开它,然后相应地关闭它。 更准确地说,我们希望它在需要时打开和关闭。
仍有待确定:在什么条件下风扇应打开以及在什么条件下应关闭。
这里一切都很明显:如果湿度超过一定限度,风扇就会打开并抽出空气;如果湿度超过一定限度,风扇就会打开并抽出空气; 湿度已恢复正常 - 风扇关闭。
细心的读者会立即注意到“给定”这个词。 由谁给的? 作为指定?
您可以通过多种方式设置阈值湿度。 我们将研究其中的两个:第一个 - 使用可变电阻,第二个 - 通过 MQTT 协议通过网络。 这些方法各有优点和缺点,稍后将讨论。
对于那些不明白的人,我将解释“阈值湿度”是湿度水平,高于该水平风扇必须打开。
接下来的问题是:是否应该给予用户直接打开风扇的权利? 也就是说,无论湿度水平如何,只要按下按钮? 我们将提供这样的可能性。 毕竟,不仅在湿度高时需要风扇,而且还可以去除房间中的难闻气味,例如通常称为“恶臭”的气味。
因此,我们了解我们想要什么,甚至了解它如何运作。 让我们简单列出我们通风控制系统的所有功能:
- 设置湿度阈值(两个选项);
- 湿度测量;
- 自动风扇开启;
- 风扇自动关闭;
- 手动风扇激活(通过按下按钮)。
所以,计划很明确。 有必要在我们的程序中实现以上所有功能。 我们将按照这个“计划”行动。 首先,让我们画出该设备的框图。
设备框图
一般来说,我们会有两种这样的方案。 第一个是通过可变电阻设置阈值湿度水平的选项。 第二种方案是通过 MQTT 协议通过网络设置阈值湿度水平的选项。
但由于这些电路只有一个元件不同——“设置阈值湿度水平”的可变电阻器,因此我们将只绘制一个框图。 当然,根据 GOST 的框图看起来有所不同。 但我们关注的不是野牛工程师,而是年轻一代。 因此,可见性更为重要。

那么,我们在图中看到了什么? 风扇连接到继电器 Relay1 控制器 什洛蒂尼。 请注意,风扇是高压设备。 因此,如果有人自己这样做,请务必小心。 也就是说,至少在将手指或测量仪器插入电路之前,至少关闭风扇的电源。 还有第二个注释。 如果你的粉丝比 250Vt,然后直接连接到 什洛蒂尼 不值得——只能通过启动器。
我们整理了风扇。 现在按钮“手动打开”风扇。 它连接到输入 输入1。 这里没有什么需要解释的了。
温湿度传感器 DHT-11 ( DHT-22 或它们的类似物)。 控制器上有一个用于连接的特殊输入。 什洛蒂尼。 如图所示,连接这样的传感器也不成问题。
最后是可变电阻,它设置湿度阈值水平。 更准确地说,是由可变电阻和恒定电阻组成的分压器。 它的连接没有问题,但我解释一下,内置ADC是 ESP8266 设计最大电压为 1 V。 因此,需要5倍左右的分压器。
让我再次提醒您,如果使用 MQTT 协议通过网络设置阈值湿度水平,则不需要此分隔器。
让我们开始在 ElDraw ShIoTiny 编辑器中为设备创建算法。 如何到达此编辑器,可以在之前的文章或说明中阅读,其链接位于文章开头。
方案一,最简单
让我们从简单的事情开始:打开继电器 Relay1 当湿度水平超过阈值达指定时间时。

正如您所看到的,没什么复杂的:只有四个节点,不包括注释节点。 双氢睾酮11 - 这是温度和湿度传感器本身(可以替换为 双氢睾酮22).
不变 CONST — 阈值湿度水平,以百分比表示。
比较器 - 比较两个数字的节点,如果满足给定条件则输出 1,如果不满足给定条件则输出 0。
在我们的例子中,这个条件是 甲>乙哪里 A 是传感器测量的湿度水平,并且 B ——相同湿度的阈值水平。
一旦测量到湿度水平(A)将超过阈值湿度水平(B),就在比较器的输出处 甲>乙 1 将出现并且继电器将打开。 相反,一旦湿度水平恢复正常(即 A<=B),就在比较器的输出处 甲>乙 将出现 0 并且继电器将关闭。
全清? 对于那些不太舒服的人,请再阅读一遍或查看说明书中有关装置操作的描述。
请注意,来自传感器的数据 双氢睾酮11 大约每 10 秒更新一次。 因此,继电器打开和关闭的频率不能超过每 10 秒一次。
一切都会好起来的,但我们想使用可变电阻来设置阈值湿度水平。 没有什么比这更容易的了!

让我们用 ADC 节点替换常量节点。 毕竟,我们将带有可变电阻的分压器连接到 ADC。
ADC 输入端的电压在 0 至 1 伏之间变化。 但传感器输出的湿度变化范围为 0 到 100%。 我们如何比较它们? 这很简单。 ADC 节点在 什洛蒂尼 不仅测量输入电压,还知道如何 规模和转变.
也就是说,ADC1 节点 (ADC) 的输出将具有以下值 X,由公式计算

哪里
— ADC 输入电压(从 0 到 1V); k - 范围(ADC 范围)和 b-offset(ADC 偏移)。 因此,如果您设置 k = 100 и b = 0,那么当改变时
在 0 到 1 的范围内,值 X ADC 节点输出的值将在 0 到 100 的范围内变化。也就是说,在数值上等于湿度从 0 到 100% 的变化范围。
或者,简单地,通过旋转可变电阻滑块,您可以将阈值湿度级别设置为0到100。唯一的不便之处是没有显示设备。 但实际上,如果您将可变电阻电机分为 6 个分区(0%、20%、40%、60%、80%、100%),那么这足以设置阈值湿度水平。
我们如何设定赔率? k - 范围(ADC 范围)和 b-offset(ADC 偏移)? 是的,比蒸萝卜容易! 将鼠标指针指向节点 ADC1 您将立即看到一个设置窗口。 你可以把你需要的一切都放进去。 对于我们的例子,它将是一个如图所示的窗口。

因此,我们有最简单的工作解决方案。 让我们开始改进它。
顺便说一句,最简单的解决方案有一个优点 - 它不需要互联网。 它是完全自主的。
选项二,连接按钮
一切顺利,每个人都很高兴。 但运气不好,我们不能强行打开通风。 我们已经在入口处商定了 输入1 我们将连接一个按钮,无论湿度传感器如何,都会强制打开和关闭风扇。
是时候在我们的程序图中处理这个按钮了。

按钮点击处理块用橙色线突出显示。 它是按钮按下的计数器,当其输出值超过 XNUMX 时重置为零(绿线,节点输出 CT).
这里的一切都像以前一样简单:柜台 CT 计算连接到输入的按钮的按下次数 输入1。 也就是说,每按一次按钮,该计数器的输出值就会增加 1。
一旦该值等于 1(即大于 XNUMX),立即在比较器的输出处 甲>乙 会出现1。这个1会重置计数器 CT 为零。 这意味着比较器,图中的底部!
因此,我们的按钮有两种状态 - 0 和 1。如果我们需要更多状态(3 或 4 甚至更多) - 我们只需要更改常量 CONST 从一个值到另一个值。
因此,我们打开风扇有两个条件:超过给定的湿度水平并按下按钮一次。 如果满足任何一个条件,风扇就会打开。 它将一直工作,直到再次按下按钮 И 湿度水平不会恢复正常。
当然,你可以使算法变得更加复杂,但我们不会这样做——我们将为那些愿意的人留下创造力的空间。
选项三,连接到互联网
我们所描述的一切都是相当可行的。 那炫耀呢? 毕竟,任何一个满脸粉刺的时髦黑客都会嘲笑那些转动旋钮并按下按钮而不是通过智能手机控制它的人! 扭转手柄“不时尚”。 但是用你的手指在你的智能手机上爬行,把你的手指摩擦得血淋淋的——这是一个时髦黑客的欲望的顶峰(我永远无法区分所有这些——所以如果我错了,请原谅我)。
但让我们对这些人宽容一些。 通过互联网进行管理具有真正的优势。 首先,是可见性。 有很多适用于所有平台的应用程序,允许您通过一些调整为我们的卡尔森控制器创建一个完全可用的控制面板。 其次,这是一个远程监控房间湿度状态的机会。 第三,您不仅可以看到风扇在做什么(是否旋转),还可以看到设置的阈值湿度水平。 然后风扇自动或手动打开。 一般来说,你想要的一切。
当然,对于一些粉丝来说,受到如此多的关注是非常荣幸的。 但这只是一个例子。
因此,为了连接到互联网,我们将使用技术 MQTT 和同名协议。
为了利用这项技术,我们需要 MQTT 代理。 这是一个特殊的服务器,服务 MQTT 客户端例如: 什物联网 和您的智能手机。
技术的本质 MQTT 事实是,任何客户端都会以特定名称(称为 主题 在术语上 MQTT)。 其他客户端可以使用他们的名字订阅任意数据(主题)并接收新发布的数据。 也就是说,所有数据交换都遵循客户端-经纪人-客户端原则。
Я 我不会 注重细节。 互联网上有很多关于其工作原理的文章和教程。 MQTT 以及有哪些程序可用于创建控制面板。 我将向您展示如何使用接收和发布数据 什洛蒂尼.
作为经纪人我使用 ,但原理到处都是一样的。
因此,我们假设您已注册 MQTT 代理。 一般来说,经纪人会给您(或要求您提供)用户名和密码(用于授权)以及用于连接的端口。 堵塞 什洛蒂尼 к MQTT 代理 有两种方式可能 - 常规连接和通过 TLS (SSL).
所有这些参数都在 什洛蒂尼 在选项卡上输入 社交部分 MQTT 连接到服务器.

如果你的 MQTT 代理 不需要授权 - 请勿输入您的登录名和密码(将这些字段留空)。
参数 MQTT 主题前缀 需要单独解释。
MQTT 参数前缀是附加到主题名称的字符串(主题)在发布和订阅 MQTT 代理时。 安装 MQTT 前缀 对于您的控制器,您只需在输入字段中输入“MQTT 主题前缀“(”MQTT 主题前缀”)。 前缀始终以斜杠开头 (“/”)! 如果您未在输入字段中输入斜杠,则会自动添加斜杠。 前缀中不能使用符号 “#” и “ +”。 没有其他限制。
例如,如果您发布参数“状态“(或订阅它)并且您的前缀设置为“/shiotiny/”,那么这个参数将会以“”的名义发布在经纪商上/shitiny/状态” 如果您有一个空前缀,那么代理上的所有参数都将以斜杠开头(“/”):“状态“将发布为”/地位“。
所以,我们相信您已经注册了 MQTT 代理 并收到登录名、密码和端口。 然后您在选项卡上输入这些参数 社交部分 MQTT 连接到服务器 控制器 什洛蒂尼.
我们假设前缀设置为“/房间/“。
我们首先发布所有关键参数的状态:relay 瑞莱1、手动切换状态、自动切换状态以及最后的阈值和当前湿度水平。 嗯,额外的好处是房间里的温度。 具体怎么做,看图。

可以看到,与之前版本的区别仅在于节点”MQTT 发布” 考虑到前缀,发布以下参数:

正如您所看到的,我们将系统的整个状态尽在掌握!
但我们不仅想要看到,还想要控制。 我应该怎么办? 很简单。 我们将拒绝使用以下方式设置阈值湿度水平 ADC 和一个可变电阻器,我们将根据以下条件设置这个阈值湿度水平 MQTT 直接从您的智能手机!

我们从电路中删除 ADC 节点,并在其中添加三个新节点: 快闪店, 闪存恢复 и MQTT描述.
节点功能 MQTT描述 显而易见:它接收一个参数 /房间/trigHset (阈值湿度水平) s MQTT 代理。 但接下来它会对数据做什么呢? 只需将它们提供给节点即可 快闪店,进而将该数据以名称存储在非易失性存储器中 三角。 此后,节点 闪存恢复 从非易失性存储器中读取该名称下的数据 三角 我们已经知道接下来会发生什么。
为什么会有这样的困难呢? 为什么接收到的数据不能立即发送到比较器的输入端?
正如S·霍姆斯同志曾经说过的那样—— 这是基本的! 没有人保证你的设备打开后就会加入 MQTT 代理。 并且需要测量湿度。 并且风扇必须打开。 但如果没有关于阈值湿度水平的信息,这是不可能的! 因此,当打开时,我们的设备会从非易失性存储器中检索先前存储的阈值湿度水平并使用它来做出决策。 当连接建立时 MQTT 代理 有人会发布一个新值 /房间/trigHset,那么将使用这个新值。
然后你就可以想出任何你想要的。 例如,除了湿度之外,还引入温度核算。 或者添加“智能”照明控制(我们仍然有两个继电器和两个输入未使用)。 一切都在你的手中!
结论
因此,我们研究了几个基于 ShIoTiny 的基本简单控制器的实现示例。 也许这对某人有用。
一如既往,建议、愿望、问题、拼写错误等 - 通过电子邮件: shiotiny@yandex.ru
来源: habr.com
