ESP8266上的MicroPython - RTC没有init方法吗?

时间:2018-04-10 15:36:44

标签: esp8266 micropython

文档说可以使用RTC.init调用初始化RTC时钟。

https://docs.micropython.org/en/latest/esp8266/library/machine.RTC.html

但它不起作用:

int age = 12;
switch (age) 
{
  case int i when i >=1 && i <= 8:
    System.Console.WriteLine("You are only " + age + " years old. You must be kidding right. Please fill in your *real* age.");
    break;
  case int i when i >=9 && i <= 15:
    System.Console.WriteLine("You are only " + age + " years old. That's too young!");
    break;
  case int i when i >=16 && i <= 100:
    System.Console.WriteLine("You are " + age + " years old. Perfect.");
    break;
  default:
    System.Console.WriteLine("You an old person.");
    break;
}

因此文件与现实相矛盾。固件版本是v1.9.3 - 几天前下载了最新版本。

最有趣的是,>>>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' 给出dir(rtc)。它缺少其他几种方法:现在,deinit,取消

那么RTC init方法在哪里,它怎么会消失?

更新:我发现文档错误,我需要使用['datetime','memory','alarm','alarm_left','irq','ALARM0']而不是RTC.datetime。但它仍然是错误的:

RTC.init

换句话说:2000-01-01T23:59:59突然变成2000-01-03T00:11:59。怎么样?

我在RTC.datetime方法的tzinfo参数上找不到任何有用的东西。它应该是一个数字,很清楚。但它是什么意思?

我也试过午夜:

>>>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)

所以在tzinfo = 0,午夜变成05:00:00。我首先认为这意味着UTC + 5,但它没有:

>>>rtc.datetime((2000,1,1,0,0,0,0,0))
>>>rtc.datetime()
(2000,1,1,5,0,0,1,155)

最后:

>>>rtc.datetime((2000,1,1,10,0,0,0,0))
>>>rtc.datetime()
(2000,1,1,5,0,0,1,155)

这太疯狂了!看起来小时部分完全被忽略了。

1 个答案:

答案 0 :(得分:2)

哇,这真是难以置信!查看源代码后,发现第四个参数是“星期几”,从星期一开始。所以文档完全搞砸了!

似乎当您设置日期和时间时,您始终可以将星期几设置为零,它将从年+月+日自动更正。

所以今天:

>>>rtc.datetime((2018,4,10,0,18,31,15))
>>>rtc.datetime()
(2018, 4, 10, 1, 18, 31, 16, 808)

第四个数字= 1意味着它是本月的第二天,周二。