基于ESP32的旧时钟控制器,带NTP同步

2020-09-27 04:55:34

我找到了一个1960年的旧“奴隶”钟(根据序列号)。它是Pragotron PJ 27,12V版本。它们是196x年间在捷克斯洛伐克生产的,使用的是PS-1机制。

这种类型的时钟通常用于具有中央时间管理系统的组织,例如学校、工厂等。为了驱动它们,最初使用了大型机械“主时钟”,后来这种系统被数字时钟所取代。

时钟装置非常简单,预计每次运行都会有1M不同极性的脉冲来移动箭头。还有6V、24V和60V版本。

清理完灰尘后,我用12V电源对它们进行了测试,发现它们还在工作。因为我没有任何主时钟来驱动它们,所以我决定制作我的控制器。我已经有了一台带OLED屏幕的ESP32控制器,所以我决定用它。另外,我还发现了另一个项目留下的220V-12V/1A电源。

为了产生不同极性的12V脉冲,我决定购买L298N直流电机驱动模块。它应该比一组继电器更可靠,极性可以使用TTL输入来设置,并且模块本身非常便宜(1-2美元)。此外,它还提供了一个12V的→5V转换器,因此我们可以用它为我们的ESP32板供电。我目前只使用一个通道来驱动时钟,第二个通道可以用于不同时区的闹钟或时钟。

在这种情况下,布线非常简单:12V直接连接到L298N控制器,5V L298N输出和接地→连接到ESP325V和GND,L298NIN1和IN2连接到GPIO引脚12和13。时钟连接到L298N OUT1电机输出。

由于ESP32没有真正的RTC,我决定使用WIFI上的NTP作为精确的时间来源。这样我就可以避免使用额外的带电池的RTC模块。为了存储从属时钟状态,我使用了ESP32闪存。我使用Arduino IDE为控制器构建了软件。实施的一些功能包括:

开机时,它连接到WiFi,并使用NTP获取实际时间。初始同步后,NTP每5分钟更新一次时间。

实际时间、从时钟状态、WiFi状态和NTP同步状态显示在OLED屏幕上。

有一种特殊的“init”模式,通过将GPIO15引脚连接到GND并重新启动来启用该模式。在此模式下,每秒都会生成脉冲。当从时钟设置为12:00时,需要释放该按钮。该模式对于从机的初始设置或测试很有用。

使用“Preferences”库每分钟将状态保存到ESP32 Flash。它正在请求实现基本磨损均衡的“NVS”分区。为了提高效率,我将NVS分区大小更改为1Mb。

这是一次有趣的旅程,从1960年开始为该设备添加NTP和WiFi支持。我从旧的继电器上找到了一个箱子,现在是我的控制器的主机。也许在将来,我会在这个主机上添加更多的设备。