该项目将向你介绍一个可以通过本地WiFi上的网络浏览器进行控制的恒温器的制作。
起初,我建立这个项目是因为我需要这样的设备,而且我也想了解网络技术。我想用我的智能手机从家里打开车库加热器,这样我就可以在进去之前让它暖和起来。我还想看看我是否可以为ESP32网络服务器构建一个外观漂亮的移动网络应用程序,该应用程序足够简单且重量轻。这是我使用HTML5、Javascript、JSON、Bootstrap、Knockout和其他网络技术的学习过程。我大部分时间都在这里,进行网络研究和反复试验。我将分享我的调试设置。
ESP32Arduino代码使用ESP32库,并不复杂,让您了解HTML协议的具体细节。虽然这是一个完整的工作系统(除了外壳)和一个功能齐全的Web应用程序,但它也是破解其他应用程序的一个很好的起点。
关于这个项目的一些警告:
该项目只能用于低压(24v或更低)低电流(2A或更低)两线恒温器应用,其中加热单元中的单独继电器控制电源电流,并且加热单元本身具有自己的安全系统。它不应用于直接控制任何加热元件。
由于它没有按照任何安全标准设计,因此建造者可以将其安全地用作恒温器并监控其运行。如果它由于某种原因失败并保持打开状态,并且它在您房间外的冰点以下会冻结。如果它发生故障并保持关闭状态,加热器可能会持续运行并产生高温。一种选择是将其与现有恒温器串联(或并联),以便在项目卡在关闭(或打开)位置时有备用。这有助于避免一种故障模式,但不能避免另一种,因此需要进行监控。
先决条件
熟悉Arduino环境和电路板管理
使用跳线和无焊面包板的原型设计实践
对Web技术概念的基本了解
步骤
1.将ESP32的板定义加载到ArduinoIDE中。
2.编辑Arduino代码,配置WiFi访问名称、安全代码和温控器名称。
3.编译代码并加载到ESP32开发板中。(可以使用WiFi远程编程)
4.按照原理图连接电路。
5.找到IP地址并在网络浏览器中打开
6.打开恒温器并更改设定点。
它是如何工作的-硬件
ESP32板支持WiFi连接,具有IO功能,可与继电器板连接,打开和关闭继电器,并与DHT22温湿度传感器连接。继电器触点连接到加热系统的2线恒温器端子。当继电器闭合时,它会完成2线恒温器电路并导致加热系统加热。
继电器板接受两个低电平有效的输入来控制每个单独的继电器。本项目仅使用一个继电器。另一个可以用于其他目的。继电器板使用两级光隔离器和继电器本身将敏感的MCU数字I/O引脚与加热系统电隔离。对于现实世界的MCU项目,确保隔离对于可靠和稳健的运行非常重要。静电、交流噪声、电源噪声/可变性会导致MCU获得虚假输入信号、锁定,或者最糟糕的是永久损坏。调试这些类型的问题是一件令人头疼的事情,因此隔离很重要。光隔离器将来自MCU的数字输出转换为光(通过LED),然后光检测器拾取光并将其转换为隔离电路上的电压。
这样,MCU引脚与驱动继电器的电位电绝缘。在此电路中,驱动继电器的电源仍由与ESP32板电源(USB电源)相同的电源提供。也可以使用单独的电源,这就是板上有跳线的原因。继电器本身作为一个机械开关,还在双线加热系统恒温器端子和该项目的电源之间提供了第二阶段的电气隔离。在此电路中,驱动继电器的电源仍由与ESP32板电源(USB电源)相同的电源提供。也可以使用单独的电源,这就是板上有跳线的原因。继电器本身作为一个机械开关,还在双线加热系统恒温器端子和该项目的电源之间提供了第二阶段的电气隔离。在此电路中,驱动继电器的电源仍由与ESP32板电源(USB电源)相同的电源提供。也可以使用单独的电源,这就是板上有跳线的原因。继电器本身作为一个机械开关,还在双线加热系统恒温器端子和该项目的电源之间提供了第二阶段的电气隔离。
DHT22温湿度传感器具有我们应用所需的测量范围和精度:
它使用串行单线通信接口发送代表温度和湿度的 5 字节数据。
在正常操作期间(初始编程后),ESP32 板通过 5v USB 充电器供电。该 5v 电源也分配给其他板。在这个项目中,跳线用于连接组件,但在原型设计阶段之后,焊接连接将提高长期可靠性。
工作原理 - 软件
ESP32 实现了一个简单的温度控制器和一个Web 服务器。
简单的温度控制器执行以下功能:
1. 通过单线接口从 DHT22 传感器串行采集温度和湿度数据。
2. 根据温度是低于还是高于设定点打开和关闭继电器。控制器具有一定的滞后性,因此当温度接近设定点时,控制器不会因测量误差而反复开关。
3. 从 Internet 上的服务器获取时间数据,以便将内部 ESP32 时钟与该 Internet 服务器同步以获得官方时间。
4. 维护一个看门狗定时器来检测系统锁定或故障并自动重启。只要主程序循环正常运行,此计时器就会不断重置。如果由于某些错误或故障导致主循环不重复,则计时器倒计时并重置 MCU。
Web 服务器可以响应来自客户端浏览器的四种不同类型的请求:
1. HTTP - 当它收到这个请求时,ESP32 将 HTML 文件以长字符串的形式发送到浏览器。HTML 文件包含在浏览器客户端上运行的 javascript,并向 Web 服务器发出其他类型的请求。
2. GET - 当它收到这个请求时,ESP32 以 JSON 消息的形式发送温度、湿度、继电器状态(开/关)、设定点、时间和其他信息。一般来说,JSON 是具有层次结构的键值对的文本消息。在这个应用程序中,我们保持简单,不使用任何层次结构。
{ Type: "TH&Relay", Name: "Cave", Temp: "69.44", RelH: "34.60", Tset: "40", Heater: "0", Control: "0", StartTime: "1552185144", CurrentTime: "1552185151", Wifi_ssi: "-42" }
浏览器客户端上的 javascript 接收并解析它以更新浏览器中保存的数据对象。这些可以在客户端上显示和操作。
3. OPTIONS - 这是在 POST 操作之前完成的必需请求,以进行安全检查,以确保客户端可以将信息发布到服务器。
4. POST - 当 Web 服务器收到此请求时,它会收到来自客户端的 JSON 消息,其中包含设定点温度以及是否应激活温度控制。
{Control: "1", Tset: "72"}
Web 服务器解析这些数据并设置内部变量以供进一步处理。
网页设计与调试
这个项目使用了一些 Web 技术和标准,使我能够保持 HTML 文件内容静态和小,同时仍然提供动态和响应式网页。这是我在这个项目上学习的重点,也是我花最多时间研究网络和通过反复试验学习的地方。
调试设置
我认为学习 Web 界面的最佳方式是在浏览器中使用开发人员调试功能。我用火狐。在菜单中有一个名为“Web Developer”的选项,然后是“Web Console”。这允许您查看传递给服务器的消息、错误消息、javascript 异常等。由于 ESP32 上的 Web 服务器只处理上述 4 个不同的请求,它并不真正关心是哪个网页发出这些请求。它可能是使用请求 1 加载的网页。但它也可能是另一个网页 - 例如您在本地计算机上打开的“index.html”文件。因此,这允许您在文本编辑器中对此文件进行小幅更改(我使用 Notepad++,因为它知道 html 格式),然后刷新浏览器并查看呈现的页面会发生什么:
网页设计
HTML 文件在一个文件中包含嵌入的 CSS、HTML 和 Javascript。它使用Bootstrap来设计响应式网站,它是 CSS(层叠样式表)、HTML 和 Javascript 的集合。它使用 javacript 库KnockoutJS在发生数据更改时动态更新浏览器视图。为了保持 HTML 文件较小,这些库不保存在 HTML 文件本身中。它们使用所谓的CDN (内容交付网络)提供商链接。此外,javascript 使用新的原生fetch()函数来实现服务器调用 2-4。最后它在 fontawesome 中使用了一些 glyphicon字体用于重新加载按钮(圆形箭头)和火焰图标 - 表示正在要求打开加热器。
Bootstrap简化了网页的布局,并且布局可以适当地适应移动屏幕或更大的屏幕。它有一系列小部件和样式来帮助制作一个看起来干净的网站。
KnockoutJS是 javascript 中的一个轻量级框架,似乎在某种程度上已经失宠,但对于我的要求来说似乎很完美。我在研究中了解到的是,现在人们使用 Angular 和 react,这似乎需要他们自己的开发工具,并且似乎需要大量学习。当数据发生变化时,KnockoutJS 框架会自动更新 UI。它旨在将 UI 与保存在浏览器 DOM(数据对象模型)中的底层数据隔离开来。对我来说,这是网页设计中最具挑战性的部分,因为它依赖于 Javascript 的许多面向对象的概念。淘汰赛网站提供了一些教程和示例供您学习。幸运的是,一旦它起作用了,我就不必做任何进一步的改进,因为它与 UI 更改无关,这就是重点。
fetch()是 javascipt 原生的一个新函数,用于处理 GET、OPTIONS 和 POST 等 http 协议的客户端-服务器通信。另一种方法是使用额外的 jQuery AJAX 调用或其他 javascript 库。这是更多信息。https://davidwalsh.name/fetch
CDN用于向浏览器提供 CSS 和 javascript 库和代码,以便 ESP32 Web 服务器不必提供这些。内容交付网络是提供此内容的地理上分散的服务器的集合,通常需要为大容量或快速响应付费。对于这个项目,我们使用免费服务,这些服务可以很好地满足我们所需的数量和响应时间。如果您查看“index.html”文件,您将看到这些服务器的 url 链接,例如 boostrap 4.3.1 使用下面的链接合并。
fontawsome 用于向 UI 添加一些漂亮的字形图标以反映加热器状态和刷新按钮。在 HTML 中,这是:
从 Arduino 代码提供网页- HTML 文件存储了一个字符串常量,以便在 Web 服务器中处理它。但是为了调试,我将文件作为“index.html”保存在 PC 的本地驱动器上,并在浏览器中打开该文件。浏览器并不真正关心它如何接收这个文件(本地或从 ESP32 Web 服务器),因此我可以在这个文件中快速更改 HTML,刷新浏览器,然后查看结果。完成后,我使用在线工具将 index.html 转换为字符串。然后将此字符串粘贴到 Arduino 代码中。
最终成果:
我设计了一个可以 3D 打印的外壳,并用两个螺丝将它固定在墙上,板之间可以用热熔胶粘合。
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 基本电路分析法
来源:下载中心
- 电子基础大全
来源:下载中心
- 是德两分钟导师系列课程第一季
来源:大学堂
- 信号完整性及高速数字电路设计
来源:大学堂
- 基尔霍夫定律:支路、节点、回路和网孔
来源:电路图
- 叠加原理:概念及其求解过程
来源:电路图
推荐帖子 最新更新时间:2024-11-13 08:52
- 关于101上电复位问题
- 小弟在用101,发现偶尔101会死掉,就是程序不运行了,按复位键也无法重新启动,只能开关电源才能正常运行。这个现象也不是经常发生,请问各位大哥有没有遇到这种情况 关于101上电复位问题 什么程序?什么电路? 复
- stlongstm32/stm8
- 请问什么情况会导致CD54HCT00F3A如下故障
- 如图,我们使用 CD54HCT00F3A 的第一个与非门接收输入信号,第二个与非门输出作为片选信号( CS 低有效) ,1 点正常工作时输入为脉宽 1.6μs ,电压 4.8V 的脉冲信号, 5 脚始终接 5V 高电平,我们用信号发生器产生频率为 312.5KHz 的信号加到
- twl99模拟与混合信号
- 关于对交流接触器要并接什么才能减少干扰问题的答复
- 直流继电器并接的二极管叫续流二极管,作用是给继电器断电时产生的反电势构成回路,不至于将其它电子元件击穿,同时也对继电器线圈电路产生的电磁干扰提供了一个旁路。那么对于交流继电器线圈用什么元件来减少干扰和保护控制它的元件呢?一般都是采用阻容吸收元件,它可以吸收交流电路的浪涌电压,对于
- xingmiao工控电子
- KEIL 问题
- 各位高手,我是cortex-M0新手,遇到个问题,是LPC1114的板子,就是一样的硬件环境,不同的两个代码,功能不一样。一个仿真的时候顺利进行,另一个出现错误提示。提示信息是“couldn\'t load file,......。AXF,debugger aborted!”sh
- exact0755NXP MCU
- 出差归来,晒在宾馆内工作现场
- 到了研发的最后阶段,到山东出差,本来以为没问题的产品,却被客户批的狗血喷头,第二天晚上工作到凌晨2点,可喜的是最后搞定,完事后去爬了趟泰山,体验了一把“会当凌绝顶,一览众山小”的感觉!O(∩_∩)O~ 出差归来,晒在宾馆内工作现场 哪个是data呢? 回复 楼主 lov
- lovedata单片机
- OP07调零
- 最近小弟在调试OP07,可是第一步调零过程就很不稳定,不知道为何。有的时候可以到0,但有时候只能到200mv左右。电路是根据OP07说明书改的,据朋友说,调零端应该接在-12v处,所以我的电路图就是这样完成的。(我的正负电源有些不对称,负压只能是-11.86V,正压在11.95V
- yanzhao1983模拟电子
- 共模电压和差模电压
- 射频芯片设计难题
- 请教高手
- 驱动电机试验方法
- JX44B0-2实验开发平台的用户手册,跪求
- 论坛大佬谁能给解释一下双工器和trx滤波器有什么区别
- ccs5求助
- 晒WEBENCH设计的过程+1小型升压电路
- 求做过微型直流电机的前辈指点
- 求助:全桥驱动电路的供电问题
- 【EVK-NINA-B400 评估套件】+跑zigbee light_control例程
- TI SimpleLink Wi-Fi CC3200 LaunchPad 参考设计
- 笔记本电脑电源管理
- 基于8031单片机的机车自动换档系统
- 有个allgro17.2的BRD文件需要转为PAD9.5以下版本的PCB格式
- 出闲置组态王加密狗
- 求助!!!基于MSP430F149芯片的无线测温传感器设计
- 买了一个空燃比分析仪,调车用,大家帮忙看看!
- 关于BGA封装走线的问题!
- 拯救电源EMI的铁三角:电感、磁珠、电容
- MIC2033-12AYM6 EV,用于高精度、高侧、固定电流限制电源开关的评估板
- LTC1753 的典型应用 - 用于奔腾 II 处理器的 5 位可编程同步开关稳压器控制器
- LT1618、DC/DC 转换器从各种电源驱动 Lumileds 白光 LED
- 采用 LT3150 1.5V、4A 极低压差线性稳压器的设计电路在低 VOUT 应用中优于开关稳压器
- 8266 WIFI“测试”器
- REF198 升压型 3.3V 基准的典型应用电路,具有限流电压基准
- 使用 LT1194 差分输入视频环路放大器的视频设计电路
- EZR-LEDK2W-868,用于 Si4455 868-MHz 射频收发器的 EZRadio 双向链路演示套件
- 使用 ROHM Semiconductor 的 BU4343 的参考设计
- LT6654BHLS8-4.096 具有升压输出电流和电流限制的电压基准的典型应用