基于 WiFi 的车库门开启器





准备工作:
3D 设计附件的底盘








使用游标卡尺,我对当前的车库门控制单元进行了测量。我使用 Onshape 来设计附件。
目的是在螺母和螺栓的帮助下,将附件的两半聚集在一起并拧紧控制单元。由于摩擦,它们将被牢固地固定在适当的位置。
中间有一个槽,舵机的臂会移动到那里以按下按钮。侧壁上有一个孔,以便可以将 MicroUSB 电缆插入 NodeMCU 以为其和伺服供电。
此底盘设计并不适用于所有车库门控制单元;然而,远程开门的核心概念是。底盘设计可以根据您的需求和测量轻松修改。
还有一些额外的突起有助于将伺服和 NodeMCU 固定在附件内。
切片、3D 打印、测试拟合








使用 Ultimaker Cura 对 3D CAD 模型进行切片,时间约为 7 小时 35 分钟。66 克 PLA 细丝。
我使用支撑阻塞器来改变需要额外加固的特定区域的填充物密度。有关如何执行此操作的视频可在此处找到:https://www.youtube.com/watch?v=rGGmUFz08c8
在我的 Ender 3 上 3D 打印零件。
在实际车库门控制 uni 上测试了配件。
机构设计和解释




从测试图像中可以看出,该附件紧紧地安装在车库门控制单元上。附件中间有一个插槽,可以直接访问控制按钮。在伺服器及其臂的帮助下,通过这个插槽按下按钮。
伺服只能由 NodeMCU 激活,而 NodeMCU 只能在连接到您的家庭 WiFi 后才能由您的手机激活。因此,您不认识的人没有机会打开车库门。
选择伺服器是因为它可以提供按下按钮所需的力(扭矩)。此外,它非常可靠且特定于旋转程度。因此,可以对舵机进行编程,以执行对按钮的快速控制点击,并每次返回完全相同的位置。直流电机无法实现相同的精度。
选择 NodeMCU 是因为它是市场上最便宜的并且满足所有设计标准。
电路设置





这个项目的电路真的很简单。它只需要 3 个连接,如所附照片所示。
请注意,您必须在伺服和 NodeMCU 之间使用额外的母对公跳线,因为从伺服中引出的电线无法轻松连接到 NodeMCU 板。
伺服电机的红线和棕线分别是 Vcc(电源)和接地引脚。橙色引脚接收来自 NodeMCU(板的 D4 引脚)的 PWM 信号,以调整舵机的旋转角度。
更高的占空比 PWM = 伺服的旋转度数更大。
请注意:如果您对伺服器的运动施加阻力,它将从它所连接的任何地方吸收非常大的电流。因此,如果 NodeMCU 连接到您的笔记本电脑,则伺服可能会通过 NodeMCU 从您的笔记本电脑汲取大电流,并可能烧毁您的主板。测试伺服时要小心。只有在通过直接连接到电源插座供电后,才让伺服器按下按钮
构建附件






Servo 通常附带一个包含几个臂和 3 个螺钉的小包。两个螺钉用于将舵机固定到物体上,一个用于将手臂固定到舵机上。
使用最小的臂和三个螺钉中最小的螺钉将臂连接到伺服器。如图所示,使用其余两个螺钉将伺服器固定到附件的块上。
将 NodeMCU 的螺丝孔压入附件壁上的销钉中,以将其固定到位。确保不要意外断开任何电缆连接。
确保 NodeMCU 的端口与机箱中设计的孔对齐。
WiFi 连接说明

在进入代码结构之前,必须解释一些与您的 WiFi 系统如何工作相关的关键概念。
当您的手机或笔记本电脑连接到家中的 WiFi 路由器时,它实际上是连接到由该路由器创建的无线网络。连接到您的 wifi 的所有设备都将位于同一无线网络上。为了帮助区分无线网络上的设备,路由器为每个设备分配一个 IP 地址(例如 192.168.1.5)。本质上是 “命名” 每个设备。了解内部和外部 IP 地址的良好链接(本项目不是必需的)。
互联网的运作原则是 “要求和得到”。了解互联网。当你连接到你的 wifi 时,如果你搜索 www.instructables.com,你实际上是在要求查看那个形而上学地址存储了哪些信息。与电子工程中寄存器数组的工作方式非常相似。查看地址的请求被发送到您的路由器,然后您的路由器将其发送到一组服务器,这些服务器就像硬盘驱动器一样,物理上保存着网站上的所有信息。
收到此请求后,服务器,顾名思义,将其存储在自身上的数据返回给路由器,然后路由器将您请求的信息发送给您的设备。与服务员收到您的订餐请求然后为您提供食物的方式非常相似。另一个关键点是,就像点餐的客户一样,生成网页查看请求的设备称为“客户端”。这称为客户端-服务器系统。
现在看看简单的 NodeMCU 板如何复制这个复杂的过程。NodeMCU 充当设备,就像手机或笔记本电脑一样,它被配置为连接到您的 WiFi。它需要 WiFi 名称和密码才能连接到您选择的 WiFi 网络。WiFi 凭证通常写入上传到开发板的代码中。
一旦 NodeMCU 连接到 WiFi,它就会加入所有其他 wifi 连接设备所在的本地无线网络。如前所述,路由器还为 NodeMCU 分配了一个 IP 地址(“name”)。现在,与服务器存储客户端请求的特定网站的数据存储方式类似,NodeMCU 也存储了客户端可以请求的网页的 HTML 代码。从本质上讲,NodeMCU 还充当服务器,可以称为 Web 服务器。
因此,每当同一 WiFi 网络上的设备想要访问 NodeMCU 的网页时,设备都会发送请求以查看 NodeMCU 的 IP 地址(它需要知道)处的信息,而 NodeMCU 作为服务器,将存储在其中的信息发送到客户端设备。
DNS 说明

假设您不知道 NodeMCU 的 IP 地址,或者很难记住这个长数字,那么有一种更简单的方法可以获取 NodeMCU 及其网页的“地址”。DNS(域名系统)是一种为 IP 地址提供易于记忆的“昵称”的方法,而不是每次都记住并输入长长的 IP 地址编号。
例如,www.google.com 的 IP 地址是 142.250.217.78(尝试将其复制粘贴到浏览器中)。但是,如果您每次想去 google.com 时都必须记住并输入一串数字,那将是一场噩梦。因此,他们设置了一个易于记忆的“昵称”:google.com。
这如何应用于 NodeMCU?您可以对开发板进行编程,使其响应“昵称”,而不是记住开发板的 IP 地址,对于本项目,该昵称是 OpenSesame。每当 WiFi 网络上的设备发起查看 opensesame.local/ 的请求时,设备都会向同一本地网络上的所有设备发送一条群发消息,询问它们是否具有 DNS 名称 opensesame。一旦 NodeMCU 收到此消息,它就会通过说“是”来响应客户端设备,并发送自己的 IP 地址,以便客户端设备可以查看网页。
请注意后缀是 .local/ 而不是 .com/ 之类的其他内容。这指定仅将消息强制投射到连接在同一本地网络上的设备。
WiFi 管理器和软接入点 (AP)





对于这个项目,我希望生产一种可扩展的产品,可以分发到我家附近的所有房屋。因此,它不需要用户需要任何技术 Arduino 技能来操作该设备。
将 NodeMCU 建立为设备并将其连接到本地 WiFi 的常规代码需要在上传时将 WiFi SSID(名称)和密码写入代码中。但是,在构建设备和上传代码时,我不知道最终用户的 WiFi SSID 和密码。因此,我无法将此信息预先编程到 NodeMCU 中。
此外,我不能指望用户知道如何上传代码的更新版本以及他们所需的 WiFi 详细信息,因为这需要很多先决条件技术技能。因此,我需要一种方法让最终用户能够远程、轻松地将他们的 WiFi 详细信息上传到 NodeMCU,然后允许电路板连接到他们的本地 WiFi 网络。
值得庆幸的是,有一个名为tzapu 的 WiFi Manager 的 Arduino 库,它正是这样做的。我将简要概述该库的工作原理。WiFi Manager 应用程序上的附加链接。
在此之前,有必要了解接入点和站点。在本地 WiFi 网络中,所有设备都将连接到一个路由器,然后该路由器可以访问互联网。在这种情况下,每个设备都称为一个工作站,而连接到所有这些设备的路由器称为接入点 (AP)。
NodeMCU 能够同时充当 Station 和 AP。在站模式下,它将模拟连接到 WiFi 网络的设备。但在 AP 模式下,它就像路由器一样,创建自己的本地 WiFi 网络,其他设备可以连接到该网络。与 hotspot 的工作原理非常相似。自然,这个 WiFi 网络无法访问互联网,因此它也被称为软 AP。
如果设备连接到 NodeMCU 的 AP 网络,它可以与 NodeMCU 通信,甚至可以远程更改 NodeMCU 上的代码。这就是 WiFiManager 库的作用。
当 NodeMCU 检测到它没有连接到任何 WiFi 网络时,它会将自己变成一个 AP。现在,NodeMCU 自己的 WiFi 网络将被附近的所有设备发现并开放加入。然后,用户的设备将连接到 NodeMCU 的“热点”,然后系统会提示它进入登录页面,该页面显示 NodeMCU 在该区域检测到的所有 WiFi 网络。然后,用户必须选择自己的 WiFi 网络,输入密码,如果一切正确,NodeMCU 将返回 Station 模式并连接到 wifi,其详细信息刚刚接收并存储在内存中。
连接到 WiFi 网络后,用户可以通过搜索 NodeMCU 的预设 DNS (opensesame.local/) 来测试车库开门器网页。设置 DNS 后,用户不需要知道 NodeMCU 的 IP 地址。因此,整个过程非常用户友好,只需在用户第一次收到产品时完成。
注意: 对于 Android 设备,您可能需要在浏览器上搜索 192.168.4.1 才能访问 WiFi 管理器页面并设置 WiFi 凭据。它可能不会自动将您重定向到登录页面。
网站的 HTML 代码





是时候看看网页是如何创建的了。该网站的代码位于 NodeMCU 上(它托管在 NodeMCU 的 Web 服务器上)
此步骤查看如何设置网页的代码。网站使用 HTML 编码,这是它自己的编码语言。python、java 或 C++ 用于开发具有最终目的的功能,而 HTML 更多地是为了美观。它有点类似于 LaTeX,其中编码可用于准备文档的外观。
有一种简单的方法可以为网页设置 HTML 代码,不需要您从头开始。
- 转到此网站并选择您喜欢的网页模板
- 打开模板后,您可以选择对模板的代码进行编辑。通过一些基本的 HTML 编码技能,您可以向模板站点添加一些自定义设置。
- 完成编辑后,复制所有代码并将其粘贴到 tomeko 上的文本框中。本网站将 HTML 中的代码转换为 Arduino 编程 (Cpp) 所需的语言。
- 转换代码后,将其复制并粘贴到 Arduino 程序中,如下一步中的代码所示。
有一个印地语视频供您参考:link
了解 HTML 网页如何检测何时按下“激活”按钮并将该信息发送到 NodeMCU 以激活伺服电机也很重要。
每个网页都有其主页。在这个项目中,它是 www.opensesame.local/。但是,您也可以将其编码为具有子页,这些子页可以由反斜杠后面的文本指示。例如 www.opensesame.local/activate。URI 可以更改的唯一方法是网页从客户端接收某种输入。 例如,按下按钮。
NodeMCU 知道客户端何时访问网页或它托管的任何子页面。当用户按下激活按钮时,Web URI 句柄将更改为“/activate”,而不仅仅是“/”。NodeMCU 检测到有人试图访问其 www.opensesame.local/activate 网页。因此,它会知道按钮已被按下,并执行必要的代码来激活伺服器。
这个概念有点像 if 语句。如果网页 URI 以 /activate 结尾,则 NodeMCU 将运行特定函数。因此,您可以有许多不同的子页面,每个子页面触发不同的功能。
按下激活图像是为此项目编码的 HTML 网站。在笔记本电脑视图中和在手机上查看。
Board Manager 和设置库




在上传代码之前,您必须确保您的 Arduino IDE 可以与 NodeMCU 板连接。此外,还必须安装几个库以确保代码可以运行。
本网站将向您介绍如何设置 NodeMCU 的板级配置
您必须转到 Tools --> Library Manager 并安装以下库
- tzapu 的 WiFi 管理器
总体代码






之前已经解释过的所有代码片段都汇集在下面的 .ino 文件中。有注释解释了代码的每一行的作用。如果您有任何问题,请在下方发表评论。
我在将代码附加到 Instructables 上时遇到了一些问题,因此这里有一个指向包含 Arduino 代码的 google drive 文件夹的链接:https://drive.google.com/drive/folders/1iaJKmTd9DY90uriRRBPOtlrkFWPOxq3L?usp=sharing
设置物理连接和测试





使用一些螺母和螺栓,拧紧车库门控制单元周围的附件。
已测试伺服电机是否能按下按钮并通过遥控器激活车库门。











