MicroPython_ESP32学习笔记二:时间和低级多线程库

一些使用方法

如何安装包(库)

工具-包管理
在这里插入图片描述
搜索你需要的包安装。

打开文件

菜单 文件-打开,可选择打开电脑上的文件和设备上的文件。
在这里插入图片描述

time库

时间库的应用

import time


LTime=time.localtime()
print(LTime)
#localtime()
#输出 (2022, 4, 13, 16, 10, 18, 2, 103)
#       年   月 日   时  分  秒 周  第几天
# 周一~周日用0~6表示
#第几天是指这一年的第几天

print(time.mktime(LTime))
#.mktime()
#localtime()的反函数,把时间自转换成 2000 年 1 月 1 日以来的秒数

time.sleep(0.5)
print("1")
time.sleep_ms(200)
print("2")
time.sleep_us(200000)
print("3")
#相等于arduino内delay()
#sleep()可使用浮点数
#其它两个分别为毫秒和微秒

print(time.time())
print(time.ticks_ms())
print(time.ticks_us())
print(time.ticks_cpu())
#返回运行时间,单位分别为秒/毫秒/微秒/CPU(不太理解)

print(time.ticks_ms())
print(time.ticks_add(time.ticks_ms(), -100))
# 实际就是一个时间加法

deadline = time.ticks_add(time.ticks_ms(), 2000)
while time.ticks_diff(deadline, time.ticks_ms()) > 0:
    pass
#ticks_diff()对比时间差

print(time.ticks_add(0, -1))
# 输出时间最大数1073741823ms

关于定时器Timer库

ESP32有0~3共4个定时器,初始化时指定。

如指定 其它数据也行。比如-1,为什么呢。以我的理解些参数他只取最低两位表示0~3。。-1所有的位都是1。所以其实是3,可以自己验证。

#n=0~3
tm=Timer(n)

init()

  • period:周期,定时时长
  • mode:模式 PERIODIC(周期重复)/ONE_SHOT(单次)
  • callback :回调函数,这里用的lambda.
tm.init(period=1000, mode=Timer.PERIODIC, callback=lambda t:print('0'))

即使执行一次,定时器的也会持续的工作。如想结束使用deinit()
使用value()可读取定时器当前的值。

from machine import Timer
import time


#计时器1回调,带一个参数为定时器本体。
def CB(t):
    print("定时器1 触发")

# 初始化
tim0 = Timer(0)
tim1 = Timer(1)

# 1秒后执行
tim0.init(period=1000, mode=Timer.ONE_SHOT, callback=lambda t:print("执行一次"))
time.sleep(1.5)
# 关闭定时器
tim0.deinit()

# 定时器2周期执行
tim1.init(period=2040, mode=Timer.PERIODIC, callback=CB)

while True:
    print("计时器1当前值:{}".format(tim1.value()))
    time.sleep_ms(500)

_thread多线程

内置简单线程管理

创建线程

_thread.start_new_thread ( function, args[, kwargs] )

参数说明:
function - 线程函数。
args - 传递给线程函数的参数,必须是元组类型。
kwargs - 可选参数

import _thread
import time

# 为线程定义一个函数
def print_time( threadName, delay):
   count = 0
   while count < 5:
      time.sleep(delay)
      count += 1
      print ("%s: %s" % ( threadName, time.ctime(time.time()) ))

# 创建两个线程
try:
   _thread.start_new_thread( print_time, ("Thread-1", 2, ) )
   _thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
   print ("Error: 无法启动线程")

while 1:
   pass

输出:

Thread-1: 2
Thread-2: 4
Thread-1: 4
Thread-1: 6
Thread-2: 8
Thread-1: 8
Thread-1: 10
Thread-2: 12
Thread-2: 16
Thread-2: 20

联系我们

扫码或者点这里加群了解更多!
在这里插入图片描述
Created by qdprobot

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值