通过RS-485接口进行窗帘控制。第2部分:添加WiFi

我们完成了最低限度的任务-我们通过RS485接口测试了AKKO AM72E电机的工作方式。现在,我们可以通过电线发送电子来控制阳光。显而易见的下一步是从借助基本粒子的控制过渡到借助振动的控制,即无线电波。在这种情况下,我们将使用的咒语取决于我们选择的魔法。
任何无线技术都适合我们的目的,但是我想通过智能手机控制窗帘。在这种情况下,建议不要安装任何其他程序。我将连接到我的家庭WiFi网络并使用浏览器管理电动窗帘。通过适配器RS485-UART驱动,我将连接到ESP8266。您可以按照自己的方式使用,例如WiFi路由器。

ESP-01 , WiFi. , , , , . AM72E – ESP-01. ESP8266 , , , -, .
, ESP8266. , , .
Windows, ESP8266, Arduino IDE, C (, ), NodeMcu, Lua. , .
不,我们不急于上传NodeMcu。需要准备固件。 ESP-01上的资源还不够,如果我们想增加一个Web服务器,就可以忽略它们。板上有闪存ROM-可以存储所有文件的位置-512 KB。这已经很小了,但是我们不会仅仅依靠闪存中缺少资源,而是依靠RAM中的资源。 ESP8266 SoC具有64KB的RAM区域用于程序代码和96KB的数据区域。启动时,闪存中的数据将加载到RAM中。如果我们填充NodeMcu库存固件并查看可用内存量,则将看到以下内容:
image
21 kb!有了这样的卷,您必须保存每个字节!在“无法自动检测到固件,因为未收到正确答案”行之后,我们还会看到一些垃圾。这是调试信息,以74,880的速度发布,然后速度改变。这是正确速度的样子:

没什么有趣的。
首先,增加可用RAM的数量。为此,您可以自己重建固件。可以使用源代码,但是您不想为了测试而拼凑整个项目。另外,这必须在Linux下完成。并不是说这很困难,但是如果我们分心,我们将永远不会结束。您可以此处调整固件:frightanic.com/nodemcu-custom-build
我将复选框切换为dev096,并在插件选择窗口中的1-ware旁边放置了一个附加的选中标记。由于一个功能-CRC16计算,我打开了此模块。就是这样:

您当然可以启用或禁用所需的那些模块。现在,将电子邮件输入表单,然后单击“检查构建状态”按钮。一次性电子邮件也可以。我们等待了几分钟,在一封信中,我们获得了带有固件的文件链接。只能使用整数的固件将为您节省12 KB的闪存。我倒了这个。但是您可以做出其他选择。让我们看看为什么我们这么努力:

现在我们有35 KB的RAM。
在继续编程之前,让我们简要地回到UART-RS485适配器。在这方面负责收发切换。到电阻R1。加载时,ESP8266将所有GPIO引脚设置为输入模式,然后程序确定每个GPIO将在哪种模式下工作。事实证明,在加载时,触点TX_UART(U0TXD)应该处于高电平,否则闪存中记录的程序将不会启动。如果没有R1,则在查询TX触点时,将读取低电平,并且ESP8266将“挂起”,直到重新连接适配器为止。
您可以使用GPIO引脚之一拒绝整个接收-发送切换方案。但是ESP-01上可用的GPIO很少,也许它们会在您的项目中找到另一个应用程序。此外,通过切换方案,我们制造的适配器可以与没有GPIO的路由器一起使用。
该项目包含三个文件:data,index.html和init.lua。认为这不是一个项目而是一个原型是更正确的。例如,没有授权,除非连接到路由器。而且我完全不确定ESP8266上的服务器是否可以承受攻击。该代码不进行任何检查,除非连接时,是否存在网络连接或该连接已消失。如果程序死机,没有代码可以自动重启ESP8266。最后两个任务很容易解决,但是项目会变得更加复杂。
您需要编辑数据文件-在此处输入您的WiFi网络的名称和密码。通过将ESP8266连接到网络,我们将能够通过互联网控制窗帘。完成init.lua调试后,将debug变量设置为false,或将其完全删除。因此,更少的垃圾将散布在UART中。如果不这样做,则驱动器可能无法工作。此外,AKKO AM72E仍然无法理解您正在写给他的内容。在这种情况下,还可以删除log函数以及init.lua中提到的所有行。
让我们回到节省资源的主题。带有我的网络名称和密码的数据文件占用1643字节的内存。如果您还没有猜到,那么此文件就是常规的lua文件。可以编译。编译后,同一文件已占用1040字节。您可以使用init.lua进行相同的操作。文件大小可以进一步减小。必须丢弃所有多余的内容,首先是注释和空格。该文件的可读性很差,但是如果我们需要更多空间,就必须这样做。这是一种常见的做法。最后,没有人会欣赏您的代码的优美和正确的设计。好吧,也许当您的代码到达竞争对手时。但是截断的功能将立即引起注意。特别是如果有什么要比较的话。对资源很少的设备进行编程时,优先级会发生变化。这就是为什么程序用C语言编写的嵌入式系统的可读性很差。通过将所有可能的东西转移到预处理器上,一切变得很复杂。如果您使用C启动一个项目并将其推迟几个月,那么您可能需要花费一些时间来找出自己的代码。较少关注代码维护,因为在三到五年内,出现了新的烙铁,由于架构的改变,所有东西都必须重新编写。
在我手动删除了数据文件中所有不必要的内容之后,它开始占用705个字节。同时,如果给变量赋予的名称不是有意义的名称,而是一个字母的名称(是的,是的,这根本不是我们在学校所教的),那么大小仍然可以减少数十个字节。编译后,data.lc文件占用Flash 728个字节-糟糕!甚至发生!
关于index.htm没什么可说的。我还向他添加了svg格式的图片。您也可以做到。只需用另一个文件将窗帘.svg填充到闪存中即可。
Init.lua – . - , . UARTA, , GPIO2. 512 . .
, CRC16, ow.crc16(buf, crc). , :
=ow.crc16('\85\00\00\03\01', 0xFFFF)
:
15593
, , .
, :
​ )

Source: https://habr.com/ru/post/zh-CN387983/


All Articles