要点或本文的主题
我们将继续介绍关于
ShIoTiny的系列文章,
这是一种基于
ESP8266芯片的可视可编程控制器。
本文介绍了一个浴室或其他潮湿房间中的通风控制项目的示例,该示例关于如何为
ShIoTiny构建程序。
该系列中的先前文章。
ShIoTiny:小型自动化,物联网或“假期前六个月”ShIoTiny:绘图程序的节点,链接和事件或功能参考文献
ShIoTiny项目现场二进制固件,控制器电路和文档节点说明和描述设置MQTT经纪人cloudmqtt.com适用于Android的MQTT仪表板控制面板引言
经验之外没有理解。 这是经世世代代检验的真理。 因此,学习实践技能没有比尝试自己做某事更好的了。 举例说明可以做什么和不值得尝试的示例,这里会派上用场。 当然,其他人的错误并不能阻止他们自己的错误的发生,但是可以帮助减少后者的数量。
前几篇文章读者的提问和来信促使我做一个小项目,作为通风控制的一个例子,以展示ShIoTiny节点如何工作。
ShIoTiny控制器
出现的最初想法-
抽水和灌溉站-远非适合所有人,并且会很有趣。 因此,我以每个人都可以理解且有用的通风控制系统为例。
我
会说这个项目的想法不是我的,但
我是从这里得到的 ,然后将其改编为
ShIoTiny 。
首先了解你想要什么
耕种过程是无止境的。 正是这个财产毁了许多好主意和项目。 开发人员并没有继续改善它,而是发布了一个理想的东西,而不是一个理想的东西。 然后他完善了它,直到竞争对手绕开它,发布了一个即使不是理想的(而且经常是坦率地说)的但可行的解决方案。
因此,知道在何处结束该项目非常重要。 或者换句话说,有必要从一开始就确定我们想要在项目结束时得到什么。 在俄语中,为草拟一份仅用于描述创建方式的文档,有一个美丽而简短的“计划”一词,由于某些原因,弱智的翻译和有缺陷的经理最近开始称其为“路线图”。 好吧,上帝保佑他们。
我们的计划将是这样。 假设存在一个湿度有时会急剧增加的房间。 例如,例如浴室或厨房。 湿度是一件令人不愉快的事情,应对它的方法与世界一样古老:为房间通风。 有很多播出方法。 但是,也许我们会拒绝异国情调和老式的方式,例如用网布遮住黑人,并停止通常的拥护者。 风扇价格便宜,在我们的地区更容易找到它们。
简而言之,我们要控制风扇:分别打开和关闭风扇。 更确切地说,我们希望它在必要时打开和关闭。
还需要确定:在什么条件下风扇应该打开,在什么条件下风扇应该关闭。
这里的一切都很明显:如果湿度高于预定极限,则风扇打开并吸入空气; 湿度已恢复正常-风扇关闭。
细心的读者会立即注意到“给予”一词。 谁给的? 如何预设?
有几种设置阈值湿度的方法。 我们将考虑其中两个:第一个-在可变电阻的帮助下,第二个-通过MQTT协议通过网络。 这些方法中的每一种都有优点和缺点,将在后面讨论。
对于那些不了解的人,我将解释“阈值湿度”是指湿度水平,如果超过该水平,则需要安装风扇。
下一个问题是是否赋予用户直接打开风扇的权利? 也就是说,无论湿度高低,只需按一下按钮? 我们将提供这样的机会。 毕竟,不仅需要具有高湿度的风扇,而且还需要风扇以将例如难闻的气味从房间中移除,这种气味通常被称为“臭味”。
因此,我们了解了我们想要什么,甚至了解了它如何工作。 我们简要列出了通风控制系统的所有功能:
- 设置湿度阈值(两个选项);
- 湿度测量;
- 自动包含风扇;
- 自动关闭风扇;
- 手动安装风扇(按一下按钮)。
因此,计划很明确。 有必要在我们的程序中实现上述所有功能。 根据该“计划”,我们将采取行动。 首先,绘制设备的框图。
设备框图
一般来说,我们将有两个这样的方案。 第一种是通过可变电阻设置阈值水分含量的选项。 第二种方案是通过MQTT协议通过网络设置阈值湿度水平的选项。
但是,由于这些电路仅相差一个元素-可变电阻器“设定阈值湿度水平”,因此我们将仅绘制一个结构图。 当然,根据GOST的结构方案看起来有所不同。 但我们的重点不是野牛工程师,而是年轻的一代。 因此,可见性更为重要。

那么我们在图片中看到了什么? 风扇连接到
ShIoTiny控制器的
Relay1继电器。 我提请您注意以下事实:风扇是生活在高压下的装置。 因此,如果有人自己做,请小心。 也就是说,至少在将手指或测量仪器伸入电路之前,至少断开风扇的连接。 第二点。 如果您的风扇的功率超过
250W ,则不要仅通过启动器将其直接连接到
ShIoTiny 。
我们弄清楚了风扇。 现在,风扇的“手动打开”按钮。 它连接到输入
Input1 。 没有更多要解释的了。
温湿度传感器
DHT-11 (或
DHT-22或其类似物)。 要连接它,
ShIoTiny控制器上提供了一个特殊的输入。 如图所示,连接这种传感器也不会出现问题。
最后,可变电阻设置阈值湿度水平。 更准确地说,是一个由可变电阻和恒定电阻组成的分压器。 它的连接没有问题,但我将向您说明
ESP8266的内置ADC的最大电压为1伏。 因此,需要约5倍的分压器。
再次提醒您,如果使用MQTT协议通过网络设置阈值湿度水平,则不需要此分隔器。
我们将开始在ElDraw ShIoTiny编辑器中草拟设备的算法。 如何到达那里,在此编辑器中,您可以阅读本文前面的内容或说明中的链接,该链接位于文章的开头。
选项一,最简单
让我们从一个简单的
例子开始:在给定时间内超过湿度阈值
时 ,打开
Relay1继电器。

如您所见,没有什么复杂的:只有四个节点,不包括注释节点。
DHT11实际上是一个温度和湿度传感器(可以更改为
DHT22 )。
CONST常数是阈值水分含量,以百分比为单位。
比较器-一个节点,比较两个数字,如果满足指定条件,则将输出设置为1,如果不满足条件,则将输出设置为0。
在我们的情况下,此条件将为
A> B ,其中
A是传感器测得的湿度水平,而
B是相同湿度的阈值水平。
一旦测得的湿度水平(
A )超过阈值湿度水平(
B ),比较器
A> B的输出将立即出现1,并且继电器将打开。 相反,一旦湿度水平恢复正常(即
A <= B ),则立即在比较器
A> B的输出端出现0,并且继电器将关闭。
一切都清楚了吗? 对于不是这样的人-请重新阅读或查看说明中节点的操作说明。
我注意到,
DHT11传感器的数据大约每10秒更新一次。 因此,继电器打开和关闭的频率不会超过每10秒一次。
一切都很好,但是我们想使用可变电阻器来设置阈值湿度水平。 没有比这容易的事了!

只需将常数节点替换为ADC节点即可。 毕竟,我们将分压器与可变电阻器连接到了ADC。
ADC输入端的电压在0至1伏之间变化。 但是传感器输出处的湿度从0到100%不等。 我们如何比较它们? 一切都很简单。
ShIoTiny中的ADC节点不仅可以测量输入电压,而且还知道如何
缩放和移动它 。
也就是说,在ADC1节点(ADC)的输出处,将存在一个由以下公式计算的
X值:
在哪里
-ADC输入端的电压(从0到1V);
k-范围(ADC范围)和
b-偏移(ADC偏移)。 因此,如果设置
k = 100且
b = 0 ,则在更改时
在0到1的范围内,ADC单元的输出
X的值将在0到100的范围内变化。也就是说,数值等于湿度从0到100%的变化范围。
或者,只需转动可变电阻引擎,就可以将阈值湿度级别从0设置为100。唯一的麻烦是没有显示设备。 但是实际上,如果可变电阻发动机将6个分区设为0%,20%,40%,60%,80%,100%,则足以设置阈值湿度水平。
我们如何设置系数
k-范围(ADC范围)和
b-偏移(ADC偏移)? 是的,比蒸萝卜要容易! 在
ADC1节点中单击鼠标指针,您将立即看到设置窗口。 您可以在其中设置所需的一切。 对于我们的情况,将是如图所示的窗口。

因此,我们拥有最简单的工作解决方案。 让我们开始改进它。
顺便说一句,最简单的解决方案具有一个优势-它不需要Internet。 它是完全自主的。
选项二,连接按钮
一切正常,每个人都很高兴。 但不幸的是,我们无法强制打开通风装置。 我们已经同意将一个按钮连接到输入
Input1 ,该按钮将强制打开和关闭风扇,而无需注意湿度传感器。
现在该在我们的电路程序中处理此按钮了。

按钮单击处理单元以橙色线突出显示。 它是一个按钮单击计数器,当其输出的值超过1(绿线,
CT节点输出)时,它将重置为零。
这里的一切都像以前一样简单:
CT计数器计算连接到
Input1的按钮的点击次数。 即,每次单击按钮,此计数器输出的值将增加1。
一旦该值等于2(即大于1),比较器
A> B的输出就会立即出现1。并且此1将使计数器
CT重置为零。 这意味着比较器,根据方案是较低的!
因此,我们的按钮有两个状态-0和1。如果我们需要更多的状态(3或4或什至更多)-将
CONST常数从一个值更改为另一个值就足够了。
因此,打开风扇有两个条件:超过设定的湿度水平并按一下按钮。 如果满足任何条件,则风扇将打开。 并且它将一直起作用,直到再次按下该按钮并且湿度水平恢复正常为止。
您当然可以使算法更加复杂,但是我们不会这样做-我们将为有希望的人留出创造空间。
选项三,连接到互联网
我们描述的所有内容都很实用。 但是炫耀呢? 毕竟,任何粉刺的时髦黑客骇客都会嘲笑某个人,他们扭曲了笔并按下了按钮,却无法通过智能手机来控制它! 扭转手柄“不是很时尚”。 但是要在智能手机上抓手指,将手指擦入血液-这就是时髦黑客骇客渴望的最高峰(我永远无法分辨所有这些-因此,如果我做错了,对不起)。
但是我们会屈服于这些人。 互联网治理具有真正的优势。 首先,它是视觉的。 所有平台上都有许多应用程序,可以通过几次戳操作为我们的卡尔森控制器创建一个完全可用的控制面板。 其次,这是一个远程监控房间湿度状态的机会。 第三,您不仅可以看到风扇的功能(是否旋转),还可以看到设定的阈值湿度水平。 然后-风扇自动或手动打开。 总的来说,无论您想要什么。
当然,对于某些粉丝来说,荣誉是很多的-非常关注。 但这只是一个例子。
因此,为了连接到Internet,我们将使用
MQTT技术和相同名称的协议。
要使用此技术,我们需要一个
MQTT代理 。 这是一个为
MQTT客户端提供服务的特殊服务器,例如
ShIoTIny和您的智能手机。
MQTT技术的本质是任何客户端都可以在MQTT代理(服务器)上以特定名称(在
MQTT术语中称为
主题 )发布任意数据。 其他客户可以按其姓名(
主题 )订阅任意数据,并接收新发布的数据。 也就是说,整个数据交换都是基于客户端-代理-客户端的原则。
我
不会关注细节。 互联网上有大量的文章和教程,介绍
MQTT的工作原理以及用于创建控制面板的程序。 我将仅向您展示如何使用
ShIoTiny接收和发布数据。
作为经纪人,我使用了
www.cloudmqtt.com ,但是原理到处都是一样的。
因此,我们将假定您已经在
MQTT经纪人处注册。 通常,代理将为您提供(或要求发明)用户名和密码(用于授权),以及用于连接的端口。 将
ShIoTiny连接到
MQTT代理 有两种方法:常规连接和
TLS (
SSL )。
ShIoTiny中的所有这些参数都在“
网络”选项卡的“
与服务器的
MQTT连接”部分中输入。

如果您的
MQTT经纪人不需要授权,请不要输入您的登录名和密码(将这些字段保留为空)。
MQTT主题前缀参数需要单独的说明。
MQTT参数的前缀是发布和订阅MQTT代理时添加到主题标题的行。 要为您的控制器设置
MQTT前缀 ,您只需要在输入字段“
MQTT topic prefix ”(“
MQTT topic prefix ”)中输入即可。 前缀始终以斜杠(
“ /” )开头! 如果未在输入字段中输入斜杠,它将自动添加。 前缀中不能使用
“#”和
“ +”字符。 没有其他限制。
例如,如果您发布参数“
status ”(或订阅它),并且您的前缀设置为“
/ shiotiny / ”,那么在代理上,此参数将以名称“
/ shiotiny / status ”发布。 如果设置了空前缀,则代理上的所有参数都将以斜杠(
“ /” )开头:“
status ”将发布为“
/ status ”。
因此,我们认为您已经在
MQTT经纪人处注册并收到了您的登录名,密码和端口。 然后
,在ShIoTiny控制器的“
网络”选项卡的“
与服务器的
MQTT连接” 部分中设置这些参数。
我们认为前缀设置为“
/ room / ”。
首先,我们将发布所有关键参数的状态:
Realay1继电器,手动开启状态,自动开启状态,最后是阈值和当前湿度水平。 好吧,还有一个好处-房间的温度。 如何做到这一点,见图。

如您所见,与先前版本的区别仅在于
MQTT Publish节点。 给定前缀,将发布以下参数:

如您所见,系统的整体状态是完整的!
但是我们不仅要看,而且要控制。 如何成为 很简单 我们将拒绝使用
ADC和可变电阻器来设置阈值湿度水平,而我们将直接通过智能手机通过
MQTT来设置此阈值湿度水平!

我们从电路中删除ADC节点,并在其中包括三个新节点:
FLASH存储 ,
FLASH恢复和
MQTT describe 。
MQTT describe节点的功能很明显:它从
MQTT代理接收
/ room / trigHset参数 (阈值湿度水平)。 但是他接下来如何处理数据? 它只是将它们提供给
FLASH存储节点,该节点进而将该数据存储在非易失性存储器中,名称为
trigH 。 之后,
FLASH恢复节点从非易失性存储器读取名称为
trigH的数据,我们已经知道接下来会发生什么。
为什么会有这样的困难? 为什么我不能立即将接收到的数据发送到比较器的输入?
正如福尔摩斯同志所说,
这是基本的 ! 没有人保证打开您的设备后,它将加入
MQTT代理 。 并且必须测量湿度。 并且必须打开风扇。 但是,如果没有有关阈值湿度水平的信息,这是不可能的! 因此,打开设备后,我们的设备将从非易失性存储器中提取先前存储的阈值水分含量,并将其用于决策。 并且当与
MQTT代理建立连接并有人发布新值
/ room / trigHset时 ,将使用该新值。
然后,您可以发明任何您想要的东西。 例如,除湿度外,还要输入温度记录。 或添加“智能”照明控制(我们仍未使用两个继电器和两个输入)。 一切都在您手中!
结论
因此,我们看了几个基于ShIoTiny实现最简单本质控制器的示例。 也许对某人有用。
与往常一样,通过电子邮件发送建议,希望,问题,错别字等:
shiotiny@yandex.ru