首页 > 解决方案 > Micropython 和 EPOCH

问题描述

我想用 Esp32 在 Graphite 数据库中发送数据,为此我需要时间戳,它必须是 Epoch 格式。

我在互联网上搜索了 2 个小时,但我找不到任何东西。

我试过 machine.rtc, utime, time ...

如果你有一个例子,我是一个接受者。

谢谢

ntptime.settime()

rtc = machine.RTC()

print("Time:%s" %str(rtc.datetime()))

很抱歉打扰你,但我从 MicroPython 开始

标签: epochmicropython

解决方案


许多嵌入式端口,包括 MicroPython,使用 2000 年 1 月 1 日的 Epoch 时间。这比 1970 年 1 月 1 日的 UNIX Epoch 时间晚了 946,684,800 秒。如果您首先使用 NTP 设置 RTC,您将能够在几秒钟内读取 MicroPython 的 Epoch . 听起来您在网络上,所以应该很容易做到。假设您已经连接到 WiFi,以下是设置 RTC 时间的方法:

import ntptime

# General call to set RTC shown
# Note that when setting datetime, Weekday is ignored. MicroPython uses its internal calendar.
# machine.RTC().datetime((yyyy, mm, dd, Weekday, hh, mm, ss, us))

# RTC code follows.
ntptime.settime()         # This library call sets RTC to ntp time.

machine.RTC().datetime()  # Read the hardware RTC in datetime format.

在你给你的 ESP32 GMT NTP 时间后,你可以从 MycroPython Epoch 读取秒数:

import utime

utime.time()

我的结果是这个数字,634791870。它是整数秒。使用 MicroPython,此调用的精度不会超过秒。(您可以使用 datetime() 获得微秒,但这是日期时间而不是时间戳格式。)

接下来你必须做一些算术:

timestamp = 946684800 + utime.time()

这会为您提供 Unix 纪元的 UTC 时间戳(以整数秒为单位)。(MicroPython 忽略时区。)要调整本地时间,您需要从经度 0 度向东每小时添加 3600,然后向西减去。

如果您的应用程序需要浮点格式,您只需添加一个 0.0.0.0 即可。


推荐阅读