虽然我从高中开始就一直在编写程序(对你们中的一些人来说,这确实是个老派),但我对MicroPython还是很陌生的。
我知道这个问题可能已经在其他地方得到了答案,但是在我的搜索中没有找到合适的MicroPython解决方案(解决方案通常是Arduino或完整的Python)。
当前设备和固件:
通尼IDE
ESP32 Lilygo TTGO T显示器
这种型号有一个显示和电池充电器/监测电路在船上(读取它是另一回事)-从Aliexpress。
Lilygo的MicroPython文档是不存在的。
MicroPython v1.18-128-g2ea21abae-脏在2022-02-12
包括TTGO T显示驱动程序,来自github的russhughes版本
除了一个回收的扁平锂电池和使用USB连接,没有添加其他设备。
固件中没有日期时间模块(因此没有datetime.datetime.now()选项)
utime似乎在使用计算机上的时间(!!)要在Thonny中使用时间值(8个元素元组),而不是从ESP32中报告时间值(元组都应该从0开始)。忘记使用help('object‘),它将这个术语作为一个字符串来处理,并报告您可以执行的所有严格操作(help(’模块‘)是唯一有效的方法,否则"object term of str") <- -我尝试过使用和不带引号。
我想获得独立的正常运行时间,因为ESP32开始运行MicroPython程序(即0秒的起点),这样我就可以计时电池的持续时间--我似乎找不到可靠的编码来读取电池充电(似乎没有两个人完全同意一种方法,似乎对准确性进行了很好的讨论,主要是使用Arduino/C代码)。Lilygo的Arduino/C电池代码隐藏在他们的演示固件中--无论是从github还是从github运来的,都是可以闪现的,所以没有翻译(至少对我来说是这样)。
我希望在tft显示器、串行监视器上显示正常运行时间,并每分钟将其保存到一个文件中,以便在下次启动时检索它。主程序是一个The服务器(修改后的codemee )。一旦我有了一个像样的平均时间,我可以用它作为一个安全的关闭时间。
如果有可转换版本的datetime.py (udatetime.py?)我可以安装本地文件系统并导入,我认为这将是最好的选择,但任何让我有时间正常运行的选项都是受欢迎的。
发布于 2022-07-08 20:22:27
@nek毛细管:当我在Thonny运行的时候使用utime时,所报告的元组是基于我的计算机中的时间(当天的信息是处理时间)
正如我前面所说的,我对MicroPython非常陌生。我不知道machine.RTC的事。
在我尝试过的几个固件(“MicroPython”和包含各种驱动程序的变体)上,help()是非常无用的。help(‘模块’)列出了模块,但是help(‘模块名’)被视为询问字符串,因此没有提供有关模块的信息。如果没有引号,它将生成一个错误。
感谢你的链接,我补充说
进口机
rtc = machine.RTC()
打印(rtc.datetime())
它可以工作(报告1st 32相对于2000年1月1日的时间),但是rtc.now()会生成一个错误。
打印(rtc.now())
AttributeError:'RTC‘对象没有属性'now’
这是一个开始,谢谢你。
注意:在重复重新运行/重新启动后,信息返回ESP32和PC之间的触发器(有时从(2000,1,1),其他(2022,7,8)开始,直到今天)。因此,作为一个独立的,它应该只是ESP32 32的日期时间信息,因为它不能访问计算机的数据。)
time.time()也是可用的。
现在,要了解如何在没有sched、线程和其他有用的完整Python模块的情况下每分钟调用写文件函数。
发布于 2022-07-08 22:30:53
正常运行时间计时器的简单解决方案
from machine import Timer
import time
timeInit = time.time()
def printTime(self):
timeDiff = time.time()-timeInit
(minutes, seconds) = divmod(timeDiff, 60)
(hours, minutes) = divmod(minutes, 60)
(days,hours) = divmod(hours, 24)
#what to do comes next, I serial printed it for now
print(str(days)+":"+f"{hours:02d}"+":"+f"{minutes:02d}"+":"+f"{seconds:02d}")
timer=Timer(-1)
delay = 10 #in seconds
timer.init(period=delay*1000, mode=Timer.PERIODIC, callback=printTime)
#default is a dummy placeholder,
#the timer callback sends a 'self' value which caused an error during testing
printTime('default') https://stackoverflow.com/questions/72894861
复制相似问题