文章目录
- 前言
- MicroPython在线仿真
- GPIO的工作模式
- 一、有哪些工作模式?
- 1.1 GPIO的详细介绍
- 1.2 GPIO的内部框图
- 输入模式
- 输出部分
- 一、machine.Pin类
- 1.1 machine.Pin 类的构造对象
- 1.2 machine.Pin 类的方法
- init方法
- value方法
- 设置高低电平方法
- 二、延时函数
- 三、流水灯
- 总结
前言
MicroPython是一种精简版的Python 3编程语言,专为微控制器和嵌入式系统设计。它提供了一个简洁而强大的工具集,使得开发者可以轻松地在微控制器上编写Python代码,实现各种功能。本教程将介绍如何使用MicroPython点亮第一个LED,并实现一个简单的流水灯效果,帮助初学者快速入门MicroPython的基础知识。
MicroPython在线仿真
Micropython在线仿真
GPIO的工作模式
GPIO是"General Purpose Input/Output"(通用输入/输出)的缩写。它是现代微控制器(MCU)或嵌入式系统中的一种重要接口,用于连接外部设备和传感器。每个GPIO引脚可以被配置为输入或输出,并且可以通过软件控制其电平状态。
GPIO就是我们开发板上的针脚
以下内容引用自我的博客GPIO
一、有哪些工作模式?
1.1 GPIO的详细介绍
GPIO是General-purpose and alternate-function I/Os的缩写
他的含义是:通用和复用的引脚
GPIO是分组的,每一组有很多引脚
比如说PA0、PA1…PA15,一组GPIO有16个引脚
组数是由芯片决定的,具体的组数可以看对应的芯片的原理图
1.2 GPIO的内部框图
我们可以在芯片手册中找到GPIO的对应框图,他说对于某一个引脚的:
他可以分为两部分,上部分就是输入,下部分就是输出
输入模式
输入模式的框图如下:
要理解他,我们可以看下面的图:
我们通过配置pin1让他为输入,然后我们读某个寄存器就可以得到他的状态。
当k1按下,接到电源,那么pin肯定状态是1高电平,如果没有按下,相当于这个引脚是悬空状态
那么你读这个值,你知道他是什么状态吗,可能读出来是1,可以是0
再比如,我们配置pin2让他为输入,和上面一样,我们也去读,按下时为0,那么没有按下是什么状态呢,就和上面的是一样的了
那么我们怎么解决他这个问题呢
对于pin1我们可以加一个下拉电阻
那么他按下时就就会是高电平,没按就是低电平
同样的对于pin2,就需要加上拉电阻了
那么他按下时就就会是低电平,没按就是高电平
所以上下拉电阻是需要看实际的情况来选择的。
这些电阻集成到了芯片,我们可以直接设置他,是上拉还是下拉,我们就不用每一个都搞一个电阻了
回到框图:
其中,里面的VDD为上拉电阻
Vss为下拉电阻,他在芯片中已经设计好的了
还有一种输入就是 Analog Input
,模拟输入,那么模拟输入的话,他需要得到具体的电压值,所以我们不能设置上下拉电阻,完全由外部电路控制,要不然模拟输入和直接输入没两样了
那么输入就是这几部分:上拉输入、下拉输入、浮空输入、模拟输入
在最后我们通过读取输入寄存器:Input data register
,得到1/0
如果说他有毛刺怎么办:他会在某一个范围电压内为1,某一个电压范围为0
输出部分
他这个GPIO可以接到一个灯,或者其他的芯片
如果是点灯,那么电压肯定是越高越好
如果是关灯,电压肯定是越低越好
当输出1时,I/O pin连接到P-MOS的VDD,然后就能点灯了
如果输出0,P-MOS断开,连接地,所以就关灯
推挽输出:当你要高电平,就推到VDD,如果要低电平,就推到VSS这样就是推挽输出,可以输出高低电平
开漏输出:
在开漏输出中,有两种状态:开和关。当开漏输出为开启状态时,它会将电路连接到地(或负极),使得电路的输出变为低电平。而当开漏输出为关闭状态时,它不会连接到任何地方,使得电路的输出由外部设备或其他电路来控制。
开漏输出一般是用来解决两个芯片通信的问题的
不至于把两个芯片搞坏
一、machine.Pin类
1.1 machine.Pin 类的构造对象
在MicroPython中,machine.Pin类用于与硬件引脚进行交互,包括读取和设置引脚状态。下面是关于machine.Pin类的构造和参数的介绍:
构造对象的方式:
pin_object = machine.Pin(pin_number, mode, pull, value)
参数说明:
pin_number(必需): 这是一个整数,代表硬件引脚的编号。这个参数指定了我们要控制的具体引脚。
mode(可选,默认为machine.Pin.OUT): 这是一个整数,表示引脚的模式。可以是以下几个常量之一:
machine.Pin.IN:输入模式。
machine.Pin.OUT:输出模式。
machine.Pin.OPEN_DRAIN:开漏输出模式。
pull(可选,默认为None): 这是一个整数,表示引脚的上下拉设置。可以是以下几个常量之一:
machine.Pin.PULL_UP:上拉。
machine.Pin.PULL_DOWN:下拉。
None:无上下拉。
value(可选,默认为None): 这是一个整数,表示引脚的初始值。对于输出模式,可以是以下几个常量之一:
machine.Pin.LOW:低电平。
machine.Pin.HIGH:高电平。 对于输入模式,这个参数通常被忽略。
示例:
import machine
# 构造一个引脚对象,设置为输出模式,无上下拉,初始值为低电平
led_pin = machine.Pin(26, mode=machine.Pin.OUT, pull=None, value=1)
在这个示例中,我们创建了一个machine.Pin对象,代表硬件引脚编号为26的引脚。该引脚被配置为输出模式,无上下拉,初始电平为低电平。这样,我们就可以通过led_pin.value(1)将引脚电平设置为高,从而点亮与该引脚连接的LED。
1.2 machine.Pin 类的方法
init方法
我们可以使用init
方法重新初始化引脚:
led.init(mode=-1, pull=-1,value=None)
value方法
我们可以使用value
方法设置/获取引脚高低电平
led.value([x])
当无参数时,放回当前的高低电平
如果写了x,则设置高低电平
设置高低电平方法
设置引脚高电平:
led.on()
设置引脚低电平:
led.off()
二、延时函数
在 MicroPython 中,系统延时需要用到 time/utime 模块。该模块下有三个 sleep 方法:
time.sleep(seconds):秒级的延时
time.sleep_ms(ms):毫秒的延时
time.sleep_us(us):微秒的延时
我们有延时函数就可以实现灯的闪烁了:
import machine
import time
# 构造一个引脚对象,设置为输出模式,无上下拉,初始值为低电平
led_pin = machine.Pin(26, mode=machine.Pin.OUT, pull=None, value=1)
while True:
led_pin.off()
time.sleep_ms(500)
led_pin.on()
time.sleep_ms(500)
三、流水灯
import machine
import time
# 定义LED连接的引脚
led_pins = [2, 3, 4, 5]
# 初始化引脚对象
led_objects = [machine.Pin(pin, machine.Pin.OUT) for pin in led_pins]
# 流水灯效果
while True:
for led in led_objects:
led.value(1) # 点亮LED
time.sleep(0.1) # 延时
led.value(0) # 关闭LED
总结
通过本教程,我们学习了如何在MicroPython环境下控制LED。首先,我们了解了如何连接开发板和LED。然后,我们使用MicroPython的GPIO模块初始化GPIO引脚,并将其配置为输出模式。接着,我们通过设置GPIO引脚的电平来点亮LED。最后,我们利用循环结构和延时函数实现了一个简单的流水灯效果。通过这个简单的例子,我们初步掌握了MicroPython的基本语法和GPIO控制方法,为进一步学习和应用MicroPython打下了坚实的基础。