【雕爷学编程】MicroPython手册之 WiPy 计时器

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
WiPy是一款基于MicroPython的无线微控制器模块,它提供了一个完整的硬件和软件解决方案,旨在简化物联网(IoT)设备的开发和部署。

1、微控制器模块:WiPy是一种集成了处理器、内存、无线通信模块和其他必要组件的微型计算机模块。它的设计目标是提供一个紧凑、低功耗的硬件平台,能够运行MicroPython这样的高级编程语言,并具备连接到互联网和其他设备的能力。
2、MicroPython:MicroPython是一种精简版的Python编程语言,专为嵌入式系统和微控制器设计而开发。它提供了Python语言的核心功能和语法,使得开发者能够使用熟悉的Python语法进行硬件控制和物联网应用开发。WiPy作为MicroPython的运行环境,能够直接解释和执行MicroPython代码。
3、物联网(IoT):物联网是指将各种物理设备(如传感器、执行器、嵌入式系统等)通过互联网连接起来,实现智能化、互联互通的网络。WiPy作为一种无线微控制器模块,具备无线通信能力,能够连接到物联网中的其他设备和云平台,实现远程控制和数据交换。
4、无线通信模块:WiPy内置了一种或多种无线通信模块,常见的包括Wi-Fi、蓝牙(Bluetooth)和LoRa等。这些无线通信模块使得WiPy能够通过无线网络与其他设备进行通信,实现数据传输、远程控制、云连接等功能。开发者可以根据具体需求选择适合的无线通信模块。
5、开发和部署:WiPy提供了一套方便的开发工具和开发环境,使得开发者能够快速进行应用程序的开发、调试和测试。开发完成后,WiPy可以直接部署到实际的物联网设备中,与其他设备进行通信和交互。WiPy的紧凑设计和低功耗特性,使得它非常适合嵌入式系统和物联网设备的部署。

在这里插入图片描述

MicroPython的WiPy计时器是WiPy开发板上的硬件定时器模块,用于实现精确的时间测量和定时触发。

主要特点:

硬件支持:WiPy计时器是WiPy开发板上的硬件模块,提供高精度的定时功能。它独立于处理器,可以在后台运行,不会受到其他代码的影响。
多功能性:WiPy计时器支持多种模式,包括定时器模式、计数器模式和PWM模式。可以根据需求选择适当的模式进行配置。
精确性:WiPy计时器具有高精度的计时能力,可以实现微秒级的时间测量和定时触发。
中断支持:WiPy计时器可以配置中断,当计时器达到设定的时间或计数值时,会触发中断,从而执行相应的任务。

应用场景:

时间测量:WiPy计时器可以用于精确测量各种事件和操作的时间。例如,测量信号的脉冲宽度、计算代码的执行时间等。
定时触发:WiPy计时器可以用于定时触发特定的任务或事件。例如,定时采集传感器数据、定时发送数据等。
PWM输出:WiPy计时器支持PWM模式,可以用于控制执行器的输出,例如控制电机的转速、控制LED的亮度等。

注意事项:

计时精度:WiPy计时器的精度取决于硬件本身和系统时钟的稳定性。在对时间要求较高的应用中,需要考虑时钟源的稳定性和误差校正。
中断处理:当使用中断功能时,需要注意编写正确的中断处理函数并合理处理中断触发时的任务。避免中断处理函数执行时间过长或导致其他问题。
引脚冲突:在使用计时器时,需要注意避免与其他引脚功能的冲突。确保计时器所需的引脚资源可用并正确配置。
综上所述,WiPy计时器是WiPy开发板上的硬件模块,具有高精度、多功能和中断支持的特点。它可以应用于时间测量、定时触发和PWM输出等场景。在使用时,需要注意计时精度、中断处理和引脚冲突等问题,以确保准确的时间测量和可靠的定时功能。

在这里插入图片描述
以下是几个MicroPython的WiPy计时器的实际运用程序参考代码案例:

案例1:时间测量::

import machine
import time

# 初始化计时器
timer = machine.Timer(0)

# 定义计时器中断回调函数
def timer_callback(timer):
    elapsed_time = time.ticks_us()
    print("经过的时间(微秒):", elapsed_time)

# 配置定时器,每隔1秒触发一次中断
timer.init(period=1000, mode=machine.Timer.PERIODIC, callback=timer_callback)

上述代码中,WiPy计时器被配置为每隔1秒触发一次中断。中断回调函数timer_callback()会在每次中断发生时被调用,计算经过的时间(以微秒为单位)并输出。

案例2:定时触发任务::

import machine

# 初始化计时器
timer = machine.Timer(1)

# 定义定时触发任务函数
def task_callback(timer):
    print("定时触发任务执行")

# 配置定时器,延时5秒后触发任务
timer.init(period=5000, mode=machine.Timer.ONE_SHOT, callback=task_callback)

上述代码中,WiPy计时器被配置为延时5秒后触发一次任务。当定时器中断发生时,会调用任务回调函数task_callback(),并执行相应的任务。

案例3:使用计数器模式:

import machine

# 初始化计时器
timer = machine.Timer(2)

# 定义计数器中断回调函数
def counter_callback(timer):
    count = timer.counter()
    print("计数器值:", count)

# 配置计时器为计数器模式,每隔1秒触发一次中断
timer.init(mode=machine.Timer.COUNTER, callback=counter_callback)

# 主循环中增加计数器值
while True:
    machine.idle()
    timer.increment()

上述代码中,WiPy计时器被配置为计数器模式。在计时器中断回调函数counter_callback()中,获取计数器的值并输出。在主循环中,通过调用timer.increment()增加计数器的值。以上代码仅为示例,实际应用中需要根据具体需求进行适当的修改和调整。同时,确保正确配置计时器模式、中断回调函数以及处理中断触发时的任务。

案例4:使用MicroPython控制LED灯的亮灭

from machine import Pin
import time

# 初始化引脚2为输出模式
led = Pin(2, Pin.OUT)

while True:
    led.value(1)  # 点亮LED
    time.sleep(1)  # 延时1秒
    led.value(0)  # 熄灭LED
    time.sleep(1)  # 延时1秒

案例5:使用MicroPython读取温湿度传感器的数据

from machine import I2C, Pin
import time

# 初始化I2C接口和DHT11传感器
i2c = I2C(scl=Pin(5), sda=Pin(4))
sensor = DHT11(i2c)

while True:
    # 读取温度和湿度数据
    temperature, humidity = sensor.read()
    print("Temperature: {0:.1f} C, Humidity: {1:.1f} %".format(temperature, humidity))
    time.sleep(5)  # 每5秒读取一次数据

案例6:使用MicroPython控制舵机转:

from machine import Servo
import time

# 初始化舵机对象
servo = Servo(Pin(12), min_pulse=500, max_pulse=2500)

while True:
    # 设置舵机角度
    servo.write(0)  # 舵机转到0度
    time.sleep(2)  # 延时2秒
    servo.write(90)  # 舵机转到90度
    time.sleep(2)  # 延时2秒
    servo.write(180)  # 舵机转到180度
    time.sleep(2)  # 延时2秒

案例7:使用WiPy计时器显示当前时间

from machine import Pin  
import utime  
  
# 设置WiPy的引脚和模式  
pin_led = Pin(2, Pin.OUT) # LED灯控制引脚  
  
# 显示当前时间  
while True:  
    current_time = utime.localtime()  
    print("当前时间:", current_time)  
    utime.sleep(1) # 等待1秒钟

案例8:使用WiPy计时器实现定时开关LED灯

from machine import Pin  
import utime  
  
# 设置WiPy的引脚和模式  
pin_led = Pin(2, Pin.OUT) # LED灯控制引脚  
  
# 设定定时开关时间(这里为每天8点开关)  
alarm_time = ("08", "00", "*", "*", "*") # 使用tuple格式表示每天的闹钟时间  
  
while True:  
    # 获取当前时间并判断是否到达定时开关时间  
    current_time = utime.localtime()  
    if current_time.tm_hour == alarm_time[0] and current_time.tm_min == alarm_time[1]: # 如果到达定时开关时间,就打开LED灯  
        pin_led.value(1)  
        print("LED灯已打开")  
    else: # 如果未到达定时开关时间,就继续等待  
        continue

案例9:使用WiPy计时器实现倒计时功能

from machine import Pin  
import utime  
  
# 设置WiPy的引脚和模式  
pin_led = Pin(2, Pin.OUT) # LED灯控制引脚  
alarm_time = (60, ) * 5 # 设定倒计时时间为60秒,tuple中的每个数字表示分钟、小时、日、月、年,这里均设置为0,即表示倒计时60秒  
  
# 循环实现倒计时功能并控制LED灯  
while True:  
    current_time = utime.localtime() # 获取当前时间  
    if current_time.tm_min == alarm_time[0] and current_time.tm_hour == alarm_time[1] and current_time.tm_mday == alarm_time[2] and current_time.tm_mon == alarm_time[3] and current_time.tm_year == alarm_time[4]: # 如果到达设定的倒计时时间,就打开LED灯并发出提示音(这里未实现)  
        pin_led.value(1)  
        print("倒计时结束!")  
        break  
    else: # 如果未到达设定的倒计时时间,就继续等待并显示当前时间  
        print("倒计时剩余时间:", utime.mktime(current_time), "/", utime.mktime(alarm_time))  
        utime.sleep(1) # 等待1秒钟后再次获取当前时间

这些代码案例只是WiPy的一些基本用法,您可以根据自己的需要进一步扩展和改进这些程序。例如,您可以添加更多的传感器和设备,或者使用WiPy与其他设备进行通信和交互。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。确保正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/133410054
今日推荐