0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于PlatformIO IDE的家庭自动化系统设计方案实现

电子设计 来源:电路城 作者:电路城 2021-05-28 16:42 次阅读

该项目使用丙烯酸板创建自定义的家庭自动化原型,并将ESP32设置为Web服务器,从而来控制不同负载组件。

接线图:

基于PlatformIO IDE的家庭自动化系统设计方案实现

引脚接线表:

对于可调光的LED灯泡,只需将其连接到Robotdyn AC调光器的任何输出引脚即可。

从继电器输出到交流负载的连接类似于上图。只需将一根线直接连接到交流负载,然后将另一根交流线连接到继电器的通用连接,然后将常开引脚连接到交流负载即可。

注意: 连接交流负载时要非常小心,如果连接不正确,可能会触电。

ESP32 Web服务器:

为了控制交流负载,将ESP32配置为Web服务器,以便能够响应来自浏览器的HTTP请求。因此,通过使用笔记本电脑手机中的浏览器,就可以控制该家庭自动化项目。(Web Server的工作原理

将应用程序部署在ESP32串行外设接口闪存文件系统(SPIFFS)中。应用程序用户界面由带有CSS和Javascript的HTML页面组成,用于设计和处理用户交互。使用SPIFFS比将所有页面都放入arduino变量的效果要好得多。

PlatformIO中的代码:

项目代码:点击查看

打开Visual Studio代码,然后单击“文件”-》“将文件夹添加到工作区”。然后,选择已下载或复制的文件夹。

基于PlatformIO IDE的家庭自动化系统设计方案实现

应将代码导入Visual Studio代码中。单击最左侧的资源管理器选项卡以查看代码。

基于PlatformIO IDE的家庭自动化系统设计方案实现

使用PlatformIO IDE,可以轻松配置依赖项。在Arduino IDE中,使用库管理器配置依赖文件,而在PlatformIO中,使用platformio.ini文件设置依赖关系。

单击platformio.ini文件,lib_deps部分中配置了以下库。该ESP32家庭自动化项目特定于以下项目。使用PlatformIO,不需要手动添加任何内容,因为这些依赖项已自动下载并配置。

https://github.com/me-no-dev/ESPAsyncTCP.git

https://github.com/me-no-dev/ESPAsyncWebServer.git

https://github.com/bblanchon/ArduinoJson.git

https://github.com/RobotDynOfficial/RBDDimmer.git

基于PlatformIO IDE的家庭自动化系统设计方案实现

HTML / CSS / Javascript:

所有静态文件(例如HTML,级联样式表(CSS)和Javascript文件)都位于PlatformIO项目的data文件夹内。所有这些文件都需要使用PlatformIO Upload Task上载到ESP32 SPIFFS 。

ESP32家庭自动化项目仅包含1个名为index.html的html页面,并包含了需要的所有用户界面。(文件)

基于PlatformIO IDE的家庭自动化系统设计方案实现

index.html:包含该项目的主要用户界面。

基于PlatformIO IDE的家庭自动化系统设计方案实现

该部分包含对需要在移动浏览器正确渲染所有的meta标签。它还包含标题标签,以讨论该项index.html需要3个其他文件来处理样式和用户交互。

wholeframework.min.css –是我使用流行的mincss库使用的主要样式表。

toggle-switchy –是一个CSS库,可用于将复选框转换为切换类型的界面

custom.css –是自定义样式文件。

基于PlatformIO IDE的家庭自动化系统设计方案实现

在body标签结束之前,导入custom.js文件,该文件用于在用户切换复选框时处理事件。

基于PlatformIO IDE的家庭自动化系统设计方案实现

该代码仅用于导航和显示网站页面。

基于PlatformIO IDE的家庭自动化系统设计方案实现

toggle-switchy CSS库将每个复选框的样式设置为看起来像一个切换框。还需注意以下“模板”构造。它们是模板变量,将由ESPAsyncWebServer的模板处理引擎替换。

%TUBE_TEMPLATE_STATUS%

%BULB_TEMPLATE_STATUS%

%SOCKET_TEMPLATE_STATUS%

%DIMMER_VALUE%

当浏览器处理HTML / CSS / Javascript时,它将如下面的用户界面所示呈现。这就是ESP32家庭自动化项目进行交互并使用手机浏览器控制AC负载的方式。

custom.js:自定义javascript文件,它将处理网页和用户之间的交互。

如果用户切换了灯泡复选框,则它应该更新用户界面的值,并通过digitalWrite函数切换GPIO引脚的值。

该代码使用Fetch API,而不是使用XMLHTTPRequest对象。在从DOM中选择元素并将函数处理程序附加到事件之后,将向Web服务器发送JSON请求,然后处理响应并刷新网页。另外,使用javascript async / await语法来处理JSON请求的等待/处理。

如果想查看用户界面发送的JSON请求,在浏览器中单击F12,然后转到“网络”选项卡。将应用程序部署到ESP32后,即可执行此操作。如果切换任何开关,那么在幕后就会有一个请求发送到具有对GPIO的控制权的ESP32异步Web服务器。

下面3个文件为ESP32家庭自动化项目提供了动力。它们是为ESP32 Web服务器提供动力的文件,它们执行以下操作:

创建一个Web服务器并侦听来自浏览器的HTTP请求

保存AutomationProto类的当前状态,以便即使在多个浏览器中访问该类,也仍将获得相同的状态。

更新GPIO引脚的值

将代码分为头文件和cpp文件,以进一步清理代码结构。头文件将包含项目的框架,而cpp文件将显示实现。如,automation.h是头文件,Automation.cpp是cpp文件。

自动化:

在创建该项目时,尝试遵循面向对象的编程,因此将AutomationProto表示为一个类。

此C ++头文件包含将控制项目的类。

此外,它包含为调光灯供电所需的导入头文件。已使用Robotdyn AC Dimmer库,因此已将其导入此处。

此类还表示交流负载的状态,因此可以看到每个交流负载的布尔属性。一个属性表示灯管光(m_tube),灯座(m_socket),灯泡(m_bulb)和调光灯值(m_dimValue)。

它还包含所有getters和setters属性,以更改类的私有变量。在main.cpp文件中,可以看到如何导入此类。

Automation.cpp:包含代码的实现。它还定义了ESP32引脚来控制功率继电器。

引脚分配:

管脚– GPIO 16

灯泡引脚– GPIO 17

插座引脚– GPIO 18

调光器输出引脚– GPIO 32

调光器过零引脚– GPIO 36

该代码行导入了automation.h,并为AutomationProto类定义了C ++构造函数。已经将所有变量初始化为false来表示“ OFF ”状态。如果将其设置为true,则表示“ ON ”状态。

该代码代表了GPIO引脚分配。

上面的代码是一个自定义方法,它将初始化AutomationProto类,并使用arduino digitalWrite命令设置所有GPIO输出。调光器类也在此方法中初始化。

基于PlatformIO IDE的家庭自动化系统设计方案实现

每个AC负载都由一个getter和setter方法表示,该方法将设置类的私有值。此外,在此处调digitalWrite代码,以便根据需要打开或关闭GPIO。

main.cpp:负责服务来自浏览器的HTTP请求,并处理硬件的接口。

这些是include语句,这些语句将告诉所需的头文件。

更新以下网络连接用户名和密码,以匹配您的wifi网络证书。

定义了ESP32 Web服务器,它将侦听默认端口80并导入我们的AutomationProto类。

上面的代码是“模板”处理器功能,并将在复选框上设置属性“ checked ”。在上面有关index.html模板变量的讨论中,此函数正在处理和替换它们。在“ /”根目录或index.html调用上调用此函数。

当请求发送到服务器并且服务器不知道如何响应时,将调用上面的函数。

上面的代码是setup()函数的开始。初始化串行对象,然后开始连接到wifi。之后,开始初始化SPIFFS。使用proto.init()函数调用来初始化类。

第2行:在此函数中映射“ / toggle / socket”

第4行:检查“ status”参数是否设置为true或false。以下参数是由JavaScript代码设置的。因此,如果将checbox切换为true,则发送“ true ”,否则发送“ false ”。

第6-8行:提取参数,然后将值设置为类AutomationProto

第9-10行:为JavaScript调用定义了一个返回值。

第12-16行:如果由于任何原因未定义参数,则将变量“ isError ”与消息一起设置为true

第18-20行:通过ArduinJSON库将响应发送回调用浏览器

灯管和灯泡按钮中也发生了类似的情况。唯一的区别是调光灯泡。

基于PlatformIO IDE的家庭自动化系统设计方案实现

第2行:侦听请求“ / dimmer / change”,当扩展调光器的值时调用该请求。

第6-9行:通过调用proto.setDimmerValue(value.toInt());提取调光器输入范围的值,并设置AutomationProto类的值;

添加到ESP32:

如果要将其添加到ESP32,则可以从PlatformIO IDE执行以下操作。

首先,需要通过ESP32的SPIFFS将静态文件上传到项目的数据文件夹中。为此,单击PlatformIO图标,然后单击“上传文件系统映像”。如果看到消息“正在连接。..”。可能需要单击ESP32中的启动按钮。

基于PlatformIO IDE的家庭自动化系统设计方案实现

接下来,通过单击“ Upload and Monitor”将代码上传到ESP32的闪存中。如果看到消息“正在连接。..”。再次,则可能需要再次单击启动按钮。

一旦显示了PlatformIO的监视器,然后等待显示该消息。如果看到这样的消息,请转到手机浏览器并输入以下ip地址。现在,将被转到index.html页面。

如果看到“ WiFi失败!”消息,请单击ESP32中的reset按钮,等待一段时间以使其再次初始化,然后重试。
责任编辑:pj

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

    关注

    12

    文章

    8105

    浏览量

    82485
  • 调光器
    +关注

    关注

    4

    文章

    142

    浏览量

    23076
  • 浏览器
    +关注

    关注

    1

    文章

    973

    浏览量

    34397
  • 管理器
    +关注

    关注

    0

    文章

    232

    浏览量

    18311
收藏 人收藏

    评论

    相关推荐

    家庭自动化

    家庭自动化
    发表于 04-03 06:34

    馈线自动化通信系统怎么实现

    馈线自动化是配电网自动化的重要组成部分。要实现馈线自动化,需要合理的配电网结构,具备环网供电的条件;各环网开关、负荷开关和街道配电站内开关的操作机构必须具有远方操作功能;环网开关柜内必
    发表于 09-17 09:01

    基于GSM工业自动化系统设计方案

    ,用于通过GPRS进行互联网数据传输。  GSM调制解调器在基于GSM的工业自动化安全系统中的重要作用:  如今,一切都将通过智能MODEM技术实现自动化,利用这项技术,我们可以远程访
    发表于 09-01 18:03

    怎样通过ZigBee技术去实现家庭自动化系统

    怎样通过ZigBee技术去实现家庭自动化系统
    发表于 05-20 07:17

    求一种基于Android和Zigbee技术实现家庭环境监控系统设计方案

    齐全、运行稳定的家庭监控系统将具有非常大的市场竞争力。本文提出了一种基于Android和Zigbee技术实现家庭环境监控系统
    发表于 07-26 08:08

    家庭自动化控制如何实现

    家庭自动化控制系统怎么样才能普及
    发表于 08-21 15:36

    如何去实现一种基于ZigBee的无线传感网络家庭自动化设计

    如何去实现一种基于ZigBee的无线传感网络家庭自动化设计?ZigBee数传无线传感器网络在家庭自动化上的应用有哪些?
    发表于 09-24 08:47

    一个单房间家庭自动化解决方案

    描述单人房家庭自动化控制器家庭自动化 + LED 控制器Raspberry Pi 继电器和 APA102 LED 控制器允许使用 Web GUI 控制和切换 APA102 可寻址 LE
    发表于 06-20 07:22

    基于Arduino制作蓝牙家庭自动化系统

    描述首款适用于 Arduino 的蓝牙家庭自动化扩展板如果您曾经想学习或使用 Arduino 制作蓝牙家庭自动化系统,您一定在 youtub
    发表于 07-08 07:02

    分享一个不错的家庭自动化项目

    描述家庭自动化我的项目是关于家庭自动化的,但是面包板连接不好,然后我看到了 pcbway 和如此高质量的 pcb,它们真是太棒了
    发表于 07-26 06:30

    如何使用MQTT和ESP8266的家庭自动化系统

    在本视频中,我们将看到在 ESP8266 上使用 MQTT 的家庭自动化系统。对于这个项目,我们将使用 Adafruit.io mqtt 服务器。 对于描述中共享的代码、原理图和 Gerber 文件链接。
    发表于 05-22 07:19

    基于Arduino的家庭自动化项目

    包含相关代码、详细图文、物料表一个简单的基于DIY Arduino的家庭自动化项目,它使用土壤湿度传感器、泵和其他电子元件来自动浇水植物。它由一个适合室内园艺的混凝土花盆箱组成。自流式播种机也可作为水培
    发表于 09-26 08:16

    家庭自动化系统设计(3):利用片上系统技术实现

    关键词:家庭自动化系统 , 片上系统 , IrDA解码器 第2部分中,我们介绍了基于星形拓扑结构的家庭
    发表于 12-25 22:19 270次阅读

    PlatformIO IDE物联网集成开发环境

    platformio-atom-ide.zip
    发表于 04-20 09:44 2次下载
    <b class='flag-5'>PlatformIO</b> <b class='flag-5'>IDE</b>物联网集成开发环境

    简单家庭自动化或工业自动化物联网解决方案

    电子发烧友网站提供《简单家庭自动化或工业自动化物联网解决方案.zip》资料免费下载
    发表于 12-01 09:30 2次下载
    简单<b class='flag-5'>家庭</b><b class='flag-5'>自动化</b>或工业<b class='flag-5'>自动化</b>物联网解决<b class='flag-5'>方案</b>