当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]所以你有一个不错的代码,我们该如何将这个 ESP8266 程序转换为能在 ESP32 板上运行的程序呢?好消息是,它在很大程度上可以直接使用,但具体取决于你深入到什么程度。

过程

所以你有一个不错的代码,我们该如何将这个 ESP8266 程序转换为能在 ESP32 板上运行的程序呢?好消息是,它在很大程度上可以直接使用,但具体取决于你深入到什么程度。

接下来,让我们看看这两块板子之间的差异,并展示一个从 A 到 B 的实际例子。

头文件

ESP8266 有自己的头文件集合,而 ESP32 更依赖 Arduino 原生代码。

因此,在程序开始部分:

变成了这样:

所以不再使用 OTA 更新器对象,而是将其整合到同一个 Web 服务器和端口上。

我深入探究的一个地方是内置的 ESP 对象,ESP8266 的版本功能非常丰富。

与 ESP32 的类相比:

在需要使用这些内容的地方,要么替换,要么删除。这一点在“节点信息标签页”中尤为明显,该标签页被大幅简化了。唯一需要保留且依赖的函数是 getChipId(),我喜欢用它作为配置 IP 地址的修饰符,避免所有设备都占用同一地址的问题。

WiFi - 客户端连接 - 哈哈

好吧,这确实是个意外,而且不是个好意外……ESP8266在路由器死掉、重启或被外星人绑架时,依然能出色地维持与接入点(AP)的客户端连接。而ESP32就差多了!看来我也不太像罗宾逊·库索,尽管我本想在周五前搞定这件事。出于务实考虑,我查看了别人的做法,决定写一个粗暴的hack方案,希望能保持设备的连接。我讨厌在项目中使用“飞象屏蔽”这类技术,因为很难证明它有效。测试期间没有发现大象尸体,并不等于代码真的能保护你。

这段代码片段需要大量“插拔测试”才能验证。我想我已经把所有组合都弄清楚了。我也把这个代码移植到了另外两个项目中,它们在保持在线方面似乎表现得更好。

IO引脚

这显然不同,我觉得搞这个东西很烦人。ESP32上的板子通常会标出实际的GPIO编号,但除非你有电路,否则很难找到内置的LED灯。ESP32 的一个优点是,它似乎具备某种 I/O 矩阵交叉开关功能,可以合理地进行硬件信号的路由。

analogWrite() —— 不存在!你不能像创建 PWM 引脚那样用一行代码直接创建,必须先进行设置。

然后你可以使用 ledcWrite(),方式与 analogWrite() 相同。但不同的是,这里改变的是 PWM 渠道,而不是引脚,这是对工具使用方式的细微差异。我只使用了 10 位,因此与 ESP8266 项目兼容。

Web 接口

从编程角度来看几乎没有变化,但由于我的经验不足,我需要在 OTA 和主界面之间共享一个 Web 服务器。我无法让第二个服务器在另一个端口运行,选择阻力最小的方式共享资源。OTA 能正常工作,我已经多次使用过,尤其是在不方便通过 USB 线连接时。

其他库

幸运的是,这些库都能正常使用……向参与编写它们的人表示敬意。

不过这始终是个难点,但我最初编写 ESP8266 程序时,已尽量挑选了与 ESP32 兼容的组件。我知道这听起来像是“找借口”,但有时候游戏开发中确实需要一些前瞻性的考虑。

UDP 问题

不过,NTP 代码第一次就成功了,之后我才意识到 RTC 设置的问题。然而有一个棘手的陷阱:如果 DNS 不工作,并且你通过名称而非 IP 来调用 UDP(也就是重启时的情况),就会出现问题。问题出在 UDP 类的内部实现中,它会使用与普通 WiFi 类不同的 DNS 解析方式。因此,我只能选择两个方案:要么修改库代码,要么喝更多的红酒并寻找绕过方法。下面这段代码似乎更可靠一些,即在执行 beginPacket 之前先使用 "WiFi.hostByName",并且绝对不要通过名称来请求它。

长时间运行和看门狗

事情是不可避免的,主网页程序过于庞大,最终被“看门狗”咬了。在克服了惯性懒惰、却始终找不到如何重置CPU(0)中的看门狗后,终于到了页面分离的时候。不久之后,我开发出一个更清晰、更逻辑的项目,现在在显示主网页时,所有页面都能正常运行,而无需重启CPU。

我额外添加了一些代码(借鉴自我的ESU项目),终于实现了从用户界面重新映射追踪器上的输出引脚的功能。其实不清楚为什么做这些花了这么长时间,但现在终于完成了!实际上,这很可能是因为ESP8266的引脚选择有限。相比之下,ESP32为用户提供了更多有趣的引脚。

此外,还新增了将设置备份到EEPROM并恢复的功能,这样在更换追踪器的CPU板时,也能轻松保留所有设置。虽然这不是全新的代码,但内容来自我的灌溉控制器。

GPS

根据大家的请求,如何查找GPS到追踪器的连接?

将GPS的TX信号发送至ESP32的RX端口(如图中紫色部分)。在ESP32板上为GPS供电,电压为3.3伏。将WEB界面设置为选项1——使用GPS,然后按“设置”……保存至EEPROM,最重要的是重新启动设备。当GPS锁定后,仅在WEB界面上会显示卫星数量等信息。此方法适用于ESP32和ESP8266版本。

请注意:若要通过USB更新代码,需断开GPS的TX线路(该线路连接至ESP的RX引脚)。如果使用OTA WEB更新,则可在更新过程中保持线路连接。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭