【MicroPython】(一)点灯大师

MicroPython目录

MicroPython是Python 3的一个精简实现,可运行于单片机中。对于很多嵌入式开发者来说,MicroPython可以看作是一个能够用Python编写嵌入式程序的替代品,使用Python语法可以直接控制硬件。

MicroPython社区为了能够让更多开发者轻松使用MicroPython,同时也为了更好地推广和宣传MicroPython,开发了(和正在开发)一些面向入门和初学者的教程。
链接: MicroPython中文文档

-【MicroPython】环境和花样点灯



一、环境搭建

1.1 下载相应固件与thonny

MicroPython固件下载

1.2 下载thonny

thonny官网下载,或pip下载

pip install thonny

1.3 thonny使用

见博客保姆级超详细 ESP8266 MicroPython 部署攻略
以及超详细 ESP32 MicroPython 部署攻略
同样移远模组的QuecPython也可用thonny作为编辑器

在这里插入图片描述

二、machine.py库简单介绍

在MicroPython中,machine.py是一个重要的模块,它提供了操作底层硬件的函数和类,使得在MicroPython中可以直接操作硬件设备。

下面是一些常用的函数和类:

Pin类
Pin类用来控制和读取GPIO引脚的状态。可以使用它来设置GPIO引脚的输入和输出状态,以及使用它来读取当前引脚的状态。

ADC类
ADC类用于读取模拟输入的电压值。可以使用它来读取模拟传感器的数据,例如光敏电阻、温度传感器等。

PWM类
PWM类用来产生PWM波形。可以用它来控制马达的运转速度、LED灯的亮度等。

Timer类
Timer类用来设置计时器,可以用它来生成定时器中断,用于实现周期性的任务。

I2C类
I2C类用于控制I2C总线,可以使用它来与I2C设备通信。

总之,machine.py为MicroPython提供了丰富的硬件操作函数和类,使得开发者可以简单地实现底层硬件的控制。


三、花式点灯大师

3.1简单点灯

from machine import Pin
led = Pin(11, Pin.OUT)
#只针对IO口接入阳极的发光二极管
led.on() #高电平
led.off() #低电平
#直接改变IO口高低电平
led.value(1)#高电平
led.value(0)#低电平
led.value()#获取电压

3.2实现取反点灯

通过3.1的基本操作可实现根据电平状态取反,操作led

from machine import Pin
led = Pin(11, Pin.OUT)
led.value(not led.value.value())

3.3实现PWM闪烁

在micropython中pwm操作和IO口一样简单

from machine import Pin
from machine import PWM
led = PWM(Pin(11))
led.duty(50) #占空比
led.freq(1) #频率,周期等于频率分之一

3.4实现PWM呼吸

通过改变pwm占空比的增加和减少,加入循环。可增加循环次数改变呼吸的时常

from machine import Pin
from machine import PWM
import time
led = PWM(Pin(11))
while True:
	for i in range(511):
		# 逐渐增加PWM的占空比,实现LED的呼吸灯效果
		led.duty(i)
		time.sleep(0.002)
	for i in range(511, 0, -1):
		# 逐渐减小PWM的占空比,实现LED的呼吸灯效果
		led.duty(i)
		time.sleep(0.002)

3.5实现点灯类

1.将所有方法封装为类,方便调用;2.LED不一定高电平点亮;将io输出作为一个基类方便扩展外设,如继电器等。

from machine import Pin
from machine import PWM
import time

class PinOutBSP:
    def __init__(self, gpio, anode=True):
        """
        初始化BSP对象,指定引脚控制是否高电平控制还是低电平控制

        Args:
        gpio: 引脚
        anode: 控制电平
        """
        self.gpio = gpio
        self.anode = anode
        self.pin = None

        # 根据电平控制的不同,初始化状态
        if self.anode:
            self.onvalue = 1
            self.offvalue = 0
        else:
            self.onvalue = 0
            self.offvalue = 1
            
        # 初始化           
        self.init()

    def init(self):
        self.pin = Pin(self.gpio, Pin.OUT)
        self.off()
        
    def deinit(self):
        self.pin.deinit()
      
    def on(self):
        self.pin.value(self.onvalue)
     
    def off(self):
        self.pin.value(self.offvalue)
   
    def flip(self):
        # 取反状态
        self.pin.value(not self.pin.value())
        
    def getstat(self):
        # 根据电平控制不同,得到状态
        pinstats = self.pin.value()
        if (pinstats and self.anode) or (not pinstats and not self.anode):
            print(f'{type(self).__name__} on') #类名 + on
            return True
        else:
            print(f'{type(self).__name__} off')#类名 + off
            return False


class Led(PinOutBSP):
    #硬件资源
    left = 10 #USB左侧蓝灯
    right = 11 #USB右侧蓝灯
    def __init__(self, gpio, anode=True):
        super().__init__(gpio, anode)
# 举例
class Relays(PinOutBSP):
    #硬件资源
    Relay1 = 12 
    Relay2 = 13
    def __init__(self, gpio, anode=False):
        super().__init__(gpio, anode)
    
    def timed_on(self, time_on, time_off):
        if super().getstat():
            time.sleep(time_off)
            super().off()
        else:
            time.sleep(time_on)
            super().on()

实例化使用

led1 = Led(Led.right)
time.sleep(5)
led1.on()
led1.getstat()#获得LED状态
time.sleep(5)
led1.off()
led1.getstat()

打印

Led on
Led off

总结

本文仅仅简单介绍了micropython中Led相关库使用,并且用python语法中类的特性对led进行封装。

优点:

  • Micropython中Led库简单易用,适合初学者快速掌握;
  • 对Led进行封装,使得代码更加规范、清晰,易于维护和重用;
  • Python语法中的类特性使得代码结构更加清晰,易于理解和扩展。

缺点:

  • 本文示例较为简单,对于一些高级应用场景,Led库的功能可能会受到限制;

  • 这种基于Python语法的开发方式,可能会使一些底层硬件相关的操作受到影响,导致性能方面的问题;

    当开发规模较大、功能较复杂的项目时,可能需要更高级的开发工具和技术,例如C/C++等。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DJTU_LZY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值