【雕爷学编程】MicroPython手册之 ESP8266 PWM(脉宽调制)

在这里插入图片描述
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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

ESP8266是一种低成本的Wi-Fi芯片,它可以用于开发物联网、智能家居、网络控制等应用。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。以下是一些常见的ESP8266参数:

1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。
2、工作温度:ESP8266芯片的工作温度范围为-40125℃,ESP8266模块的工作温度范围一般为-4085℃。
3、处理器:ESP8266芯片内置了一个32位的Tensilica L106 RISC处理器,最高时钟频率为160 MHz,支持实时操作系统和Wi-Fi协议栈。
4、内存:ESP8266芯片内置了64 KB的指令RAM和96 KB的数据RAM,以及64 KB的boot ROM。ESP8266模块还需要外接一个Flash存储器,一般为512 KB到16 MB之间。
5、电源:ESP8266芯片的供电电压为3.0~3.6 V,最大功耗为170 mA,最小功耗为20 uA。ESP8266模块的供电电压一般为3.3 V或5 V,最大功耗一般为200~300 mA,最小功耗一般为10~20 uA。
6、通信协议:ESP8266芯片支持IEEE 802.11 b/g/n标准的Wi-Fi协议,支持Station、SoftAP和Station+SoftAP三种模式。ESP8266芯片还支持多种数字外设接口,如GPIO、PWM、ADC、UART、I2C、SPI等。ESP8266芯片还可以使用socket模块或其他协议库来实现TCP/IP、UDP、HTTP、MQTT等协议。
在这里插入图片描述
MicroPython的ESP8266 PWM(脉宽调制),是一种可以使用MicroPython语言来实现ESP8266芯片或模块的脉宽调制功能,它可以用于控制输出电压的大小,从而控制外部设备的运行状态,如LED灯的亮度、电机的转速、蜂鸣器的音量等。MicroPython的ESP8266 PWM(脉宽调制)的主要特点、应用场景,以及需要注意的事项如下:

主要特点:

MicroPython的ESP8266 PWM(脉宽调制)可以使用machine模块来创建和操作PWM对象,支持设置频率和占空比两个参数。
频率(freq)表示PWM完成一个周期的速度,单位是赫兹(Hz),即每秒多少个周期。频率越高,PWM切换的速度越快,输出电压越平稳。
占空比(duty)表示在一个周期内,输出高电平的时间占总时间的比例。占空比越大,输出电压越高,反之越低。
MicroPython的ESP8266 PWM(脉宽调制)可以使用PWM对象的freq和duty方法来获取或设置频率和占空比,或者使用deinit方法来关闭PWM。

应用场景:

MicroPython的ESP8266 PWM(脉宽调制)可以用于实现一些基于电压控制的应用,例如控制LED灯的亮度、电机的转速、蜂鸣器的音量等。
MicroPython的ESP8266 PWM(脉宽调制)可以用于实现一些基于PWM信号的通信,例如与其他设备或模块进行数据交换或控制 。
MicroPython的ESP8266 PWM(脉宽调制)可以用于实现一些基于PWM波形的创意项目,例如模拟正弦波、三角波、方波等 。

需要注意的事项:

MicroPython的ESP8266 PWM(脉宽调制)的运行环境和资源是有限的,并且与标准的Python语言有一些差异和兼容性问题。因此,在使用MicroPython时,需要注意选择合适的库和模块,并避免使用过多的内存和CPU。
MicroPython的ESP8266 PWM(脉宽调制)的可用性和稳定性是不保证的,并且可能会受到硬件或软件的限制或干扰。因此,在使用MicroPython时,需要注意检查和测试PWM功能,以及处理异常情况。
MicroPython的ESP8266 PWM(脉宽调制)有一些限制和约束,例如频率必须在1Hz到1000Hz之间,占空比必须在0到1023之间,引脚必须在0、2、4、5、12、13、14和15之间,并且所有引脚必须使用相同的频率。因此,在使用MicroPython时,需要注意遵守这些规则。

实际运用程序参考代码案例:

案例1:使用machine模块创建一个PWM对象,并控制LED灯的亮度。代码如下:

import machine
# 创建一个PWM对象,连接到GPIO12引脚,设置频率为500Hz
pwm = machine.PWM(machine.Pin(12), freq=500)
# 设置占空比为0,即输出低电压,LED灯熄灭
pwm.duty(0)
# 设置占空比为512,即输出中等电压,LED灯半亮
pwm.duty(512)
# 设置占空比为1023,即输出高电压,LED灯全亮
pwm.duty(1023)

案例2:使用machine模块创建一个PWM对象,并控制舵机的转动。代码如下:

import machine
# 创建一个PWM对象,连接到GPIO14引脚,设置频率为50Hz
pwm = machine.PWM(machine.Pin(14), freq=50)
# 设置占空比为40,即输出0.8ms的高电平,舵机转到-90度
pwm.duty(40)
# 设置占空比为77,即输出1.5ms的高电平,舵机转到0度
pwm.duty(77)
# 设置占空比为115,即输出2.3ms的高电平,舵机转到90度
pwm.duty(115)

案例3:使用machine模块创建一个PWM对象,并模拟正弦波。代码如下:

import machine
import math
import time
# 创建一个PWM对象,连接到GPIO2引脚,设置频率为100Hz
pwm = machine.PWM(machine.Pin(2), freq=100)
# 定义一个函数,用于根据正弦函数计算占空比
def sin_duty(x):
    return int((math.sin(x) + 1) * 512)

# 主循环
while True:
    # 遍历0到2π之间的值,每次增加0.1
    for x in range(0, 63):
        # 计算占空比
        duty = sin_duty(x / 10)
        # 设置占空比
        pwm.duty(duty)
        # 延迟10毫秒
        time.sleep_ms(10)

案例4:控制LED的亮度:

import machine

led_pin = machine.Pin(4, machine.Pin.OUT)  # 初始化引脚对象,设置为输出模式
pwm = machine.PWM(led_pin)  # 创建PWM对象

# 设置PWM频率和占空比
pwm.freq(1000)  # 设置频率为1000Hz
pwm.duty(512)  # 设置占空比为50%

# 停止PWM输出
pwm.deinit()

在上述示例中,我们使用machine.Pin()初始化一个引脚对象,将引脚设置为输出模式。然后,创建一个PWM对象,将其与引脚对象关联。通过调用PWM对象的freq()方法,可以设置PWM的频率(单位为Hz)。通过调用PWM对象的duty()方法,可以设置PWM的占空比,取值范围为0-1023,对应占空比0%-100%。在示例中,我们设置PWM的频率为1000Hz,占空比为50%。最后,通过调用PWM对象的deinit()方法停止PWM输出。

案例5:控制舵机角度::

import machine
import time

servo_pin = machine.Pin(5, machine.Pin.OUT)  # 初始化引脚对象,设置为输出模式
pwm = machine.PWM(servo_pin)  # 创建PWM对象

# 设置PWM频率和占空比
pwm.freq(50)  # 设置频率为50Hz

# 控制舵机角度
def set_servo_angle(angle):
    duty = int((angle / 180) * 1023)  # 将角度转换为占空比
    pwm.duty(duty)
    time.sleep_ms(500)  # 等待舵机调整到指定角度

# 设置舵机角度为90度
set_servo_angle(90)

# 停止PWM输出
pwm.deinit()

在上述示例中,我们使用machine.Pin()初始化一个引脚对象,将引脚设置为输出模式。然后,创建一个PWM对象,将其与引脚对象关联。通过调用PWM对象的freq()方法,可以设置PWM的频率(单位为Hz)。在示例中,我们设置PWM的频率为50Hz,符合舵机的工作频率要求。通过自定义函数set_servo_angle(),可以控制舵机的角度。将角度转换为对应的占空比,并通过调用PWM对象的duty()方法设置占空比。使用time.sleep_ms()函数等待舵机调整到指定角度。在示例中,我们将舵机角度设置为90度。最后,通过调用PWM对象的deinit()方法停止PWM输出。

案例6:产生音频信号::

import machine
import time

buzzer_pin = machine.Pin(4, machine.Pin.OUT)  # 初始化引脚对象,设置为输出模式
pwm = machine.PWM(buzzer_pin)  # 创建PWM对象

# 设置PWM频率和占空比
pwm.freq(1000)  # 设置频率为1000Hz

# 发出音频信号
def play_tone(frequency, duration):
    pwm.freq(frequency)  # 设置频率
    pwm.duty(512)  # 设置占空比
    time.sleep(duration)  # 持续一段时间
    pwm.duty(0)  # 停止输出

# 播放音调为440Hz的音符,持续500毫秒
play_tone(440, 0.5)

# 停止PWM输出
pwm.deinit()

在上述示例中,我们使用machine.Pin()初始化一个引脚对象,将引脚设置为输出模式。然后,创建一个PWM对象,将其与引脚对象关联。通过调用PWM对象的freq()方法,可以设置PWM的频率(单位为Hz)。在示例中,我们设置PWM的频率为1000Hz。通过自定义函数play_tone(),可以播放指定频率和持续时间的音频信号。在函数中,首先设置PWM的频率和占空比,然后使用time.sleep()函数控制音频的持续时间。在示例中,我们播放了440Hz频率的音符,持续时间为500毫秒。最后,通过调用PWM对象的deinit()方法停止PWM输出。这些示例提供了使用MicroPython控制ESP8266的PWM(脉宽调制)的实际运用程序参考代码案例。请注意,具体的引脚配置、频率和占空比的设置应根据实际硬件连接和应用需求进行调整。

案例7:控制 LED 亮度:

import machine
import time

# 初始化 PWM 引脚
led_pin = machine.Pin(2)
pwm = machine.PWM(led_pin)

# 设置 PWM 频率和占空比
pwm.freq(1000)  # 设置频率为1kHz

# 控制 LED 亮度逐渐增加
for duty_cycle in range(1024):
    pwm.duty(duty_cycle)
    time.sleep_ms(10)

# 延时1秒
time.sleep(1)

# 控制 LED 亮度逐渐减小
for duty_cycle in range(1023, -1, -1):
    pwm.duty(duty_cycle)
    time.sleep_ms(10)

# 停止 PWM
pwm.deinit()

这个程序使用 ESP8266 上的 PWM 控制 LED 的亮度。使用 machine.Pin() 初始化一个引脚对象 led_pin,参数 2 表示使用引脚 GPIO2。

使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 led_pin。

使用 pwm.freq() 方法设置 PWM 的频率,单位为赫兹 (Hz),示例中设置频率为1kHz。

通过循环逐渐改变 PWM 的占空比,从而改变 LED 的亮度。使用 pwm.duty() 方法设置占空比,取值范围为 0-1023。

使用 time.sleep_ms() 方法进行延时,示例中延时10毫秒。

在亮度逐渐增加后延时1秒,然后亮度逐渐减小。

最后通过 pwm.deinit() 方法停止 PWM。

案例8:控制舵机位置::

import machine
import time

# 初始化 PWM 引脚
servo_pin = machine.Pin(5)
pwm = machine.PWM(servo_pin)

# 设置 PWM 频率和占空比
pwm.freq(50)  # 设置频率为50Hz

# 控制舵机位置
pwm.duty(40)  # 设置占空比为40(对应舵机最小位置)
time.sleep(1)

pwm.duty(77)  # 设置占空比为77(对应舵机中间位置)
time.sleep(1)

pwm.duty(115)  # 设置占空比为115(对应舵机最大位置)
time.sleep(1)

# 停止 PWM
pwm.deinit()

这个程序使用 ESP8266 上的 PWM 控制舵机的位置。使用 machine.Pin() 初始化一个引脚对象 servo_pin,参数 5 表示使用引脚 GPIO5。

使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 servo_pin。

使用 pwm.freq() 方法设置 PWM 的频率,单位为赫兹 (Hz),示例中设置频率为50Hz。

通过调整 PWM 的占空比,控制舵机的位置。舵机的位置通常通过占空比来控制,具体数值需要根据舵机的规格来确定。示例中使用了三个不同的占空比值,分别对应舵机的最小、中间和最大位置。

使用 time.sleep() 方法进行延时,示例中延时1秒。

最后通过 pwm.deinit() 方法停止 PWM。

案例9:通过 PWM 控制电机速度::

import machine
import time

# 初始化 PWM 引脚
motor_pin = machine.Pin(4)
pwm = machine.PWM(motor_pin)

# 设置 PWM 频率和占空比
pwm.freq(1000)  # 设置频率为1kHz

# 控制电机速度
pwm.duty(512)  # 设置占空比为50%
time.sleep(2)

pwm.duty(768)  # 设置很抱歉,由于回答的长度限制,我无法在一次回答中提供完整的三个实际运用程序的参考代码案例。以下是第一个案例的代码示例:

1. 控制 LED 的亮度:

```python
import machine

# 初始化 PWM 引脚
led_pin = machine.Pin(2)
pwm = machine.PWM(led_pin)

# 设置 PWM 频率和占空比
pwm.freq(1000)  # 设置频率为1kHz

# 控制 LED 亮度逐渐增加
for duty_cycle in range(1024):
    pwm.duty(duty_cycle)
    machine.delay(10)

# 延时1秒
machine.delay(1000)

# 控制 LED 亮度逐渐减小
for duty_cycle in range(1023, -1, -1):
    pwm.duty(duty_cycle)
    machine.delay(10)

# 停止 PWM
pwm.deinit()

这个程序使用 ESP8266 上的 PWM 控制 LED 的亮度。使用 machine.Pin() 初始化一个引脚对象 led_pin,参数 2 表示使用引脚 GPIO2。使用 machine.PWM() 初始化一个 PWM 对象 pwm,参数为引脚对象 led_pin。使用 pwm.freq() 方法设置 PWM 的频率,单位为赫兹 (Hz),示例中设置频率为1kHz。通过循环逐渐改变 PWM 的占空比,从而改变 LED 的亮度。使用 pwm.duty() 方法设置占空比,取值范围为 0-1023。使用 machine.delay() 方法进行延时,示例中延时10毫秒。在亮度逐渐增加后延时1秒,然后亮度逐渐减小。最后通过 pwm.deinit() 方法停止 PWM。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值