nag*_*lzs 0 esp8266 micropython
文档说可以使用 RTC.init 调用初始化 RTC 时钟。
https://docs.micropython.org/en/latest/esp8266/library/machine.RTC.html
但它不会那样工作:
>>>import machine
>>>rtc = machine.RTC()
>>>rtc.init((2018,4,10,17,30))
Traceback (most recent call last):
File "<stdin>", line 1 in <module>:
AttributeError: 'RTC' object has no attribute 'init'
Run Code Online (Sandbox Code Playgroud)
所以文档与现实相矛盾。固件版本是 v1.9.3 - 几天前下载了最新的。
最有趣的是,dir(rtc)给出['datetime','memory','alarm','alarm_left','irq','ALARM0']. 它缺少其他几种方法:now、deinit、cancel
那么RTC init方法在哪里,它怎么会消失呢?
UPDATE:我已经想通了,该文件是错误的,我需要使用RTC.datetime代替RTC.init。但它仍然是错误的:
>>>from machine import RTC
>>>rtc=RTC()
>>>rtc.datetime((2000,1,1,23,59,59,0,0))
>>>rtc.datetime()
(2000, 1, 3, 0, 11, 59, 3, 705)
Run Code Online (Sandbox Code Playgroud)
换句话说:2000-01-01T23:59:59 突然变成了 2000-01-03T00:11:59。如何?
我在 RTC.datetime 方法的 tzinfo 参数上也找不到任何有用的东西。它应该是一个数字,这很清楚。但是这是什么意思?
我也试过午夜:
>>>rtc.datetime((2000,1,1,0,0,0,0,0))
>>>rtc.datetime()
(2000,1,1,5,0,0,1,155)
Run Code Online (Sandbox Code Playgroud)
因此,在 tzinfo=0 时,午夜变为 05:00:00。我首先认为这意味着 UTC+5 但它不是:
>>>rtc.datetime((2000,1,1,10,0,0,0,0))
>>>rtc.datetime()
(2000,1,1,5,0,0,1,155)
Run Code Online (Sandbox Code Playgroud)
最后:
>>>rtc.datetime((2000,1,1,5,0,0,0,0))
>>>rtc.datetime()
(2000,1,1,5,0,0,1,545)
Run Code Online (Sandbox Code Playgroud)
疯了吧!看起来小时部分被完全忽略了。
哇这太令人难以置信了!查看源代码后发现,第四个参数是“星期几”,从星期一开始。所以文档完全搞砸了!
好像设置日期和时间的时候,总是可以把星期几设置为零,它会自动从年+月+日进行更正。
所以今天:
>>>rtc.datetime((2018,4,10,0,18,31,15))
>>>rtc.datetime()
(2018, 4, 10, 1, 18, 31, 16, 808)
Run Code Online (Sandbox Code Playgroud)
其中第四个数字 = 1 表示它是本月的第二天,星期二。
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |