【Micropython教程】点亮第一个LED与流水灯

文章目录

  • 前言
  • 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打下了坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/415879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年2月深度学习的论文推荐

我们这篇文章将推荐2月份发布的10篇深度学习的论文 Beyond A*: Better Planning with Transformers via Search Dynamics Bootstrapping. https://arxiv.org/abs/2402.14083 Searchformer是一个基于Transformer架构的人工智能模型,经过训练可以模拟A星寻路算法&a…

博途V18界面的各变量用途

在编程的时候会用到相关的变量包括: 1.在程序块中新建的“数据块” DB 。 在此建立的 变量数据块,它可以是自建在PLC数据类型的变量类型,也可以是各种标准的数据类型,且在DB数据块中的变量一般为全局变量,在整个项目…

nginx------------缓存功能 (六)

一、http 协议反向代理 (一)反向代理示例:缓存功能 缓存功能可以加速访问,如果没有缓存关闭后端服务器后,图片将无法访问,缓存功能默认关闭,需要开启。 ​ proxy_cache zone_name | off; 默认off #指明调…

[Tomcat] 控制台日志乱码,快速解决

启动tomcat之后,控制台打印的日志中出现了中文乱码的情况 解决方法 找到tomcat下的conf目录下的logging.properties文件,地址一般为:C:\apache-tomcat-9.0.17\conf 将logging.properties打开,将java.util.logging.ConsoleHandler…

向量数据库PGVECTOR,AI浪潮下崛起的新秀!

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

Javaweb day7

Ajax 写法 (比较落后) 简化版:AXIOS 写法 简化 案例: 基础代码 写法

项目流程图

实现便利店自助付款项目 服务器: 1、并发服务器(多进程、多线程、IO多路复用) 2、SQL数据库的创建和使用(增删改查) 3、以模块化编写项目代码,按照不同模块编写.h/.c文件 客户端: 1、QT客户端界…

AI智能电销机器人效果怎么样?呼叫部署

我们的生活早已变得无处不智能,从智能手机到无人车、虚拟VR到智能家居,你迎接的每一个清晨、享受的每一个夜晚,可能都离不开智能设备的服务。 工作中,智能化产业也正在影响着企业,电销机器人正在帮助各大企业获得更高的…

input css padding

这样控件会跑出外套控件在HTML JSP里面是经常出现的。但有些外国adobe的as控件不存在这种情况,这是因为内层控件定义的时候不能超出外层控件的范围。 修改下:去掉原来css padding,然后加上宽度和高度

Win UI3开发笔记(四)设置主题续

上文讲到过关于界面和标题栏以及普通文本的主题设置,这篇说一下关于对话框的主题设置。 我最终没找到办法,寻求办法的朋友可以不用接着看了,以下只是过程。 一个对话框包括标题部分、内容部分和按钮部分,其中,在Cont…

windows IIS 申请和配置https(SSL)的工具 win-acme

win-acme 是一个为Windows平台设计的工具,用于从Lets Encrypt自动获取和续期SSL/TLS证书,特别适合用于IIS(Internet Information Services)服务器。它的使用相对简单,提供了一个用户友好的命令行界面,以及一…

HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例

组网需求 如 图 2-15 所示,用户网络 1 通过 LSW1 与 Switch 相连, Switch 的接口为 GE0/0/1 。用户网络2通过 LSW2 与 Switch 相连, Switch 的接口为 GE0/0/2 。 GE0/0/1 、 GE0/0/2 同属于 VLAN2。为控制接入用户数,对 VLAN2 进…

解决鸿蒙模拟器卡顿的问题

缘起 最近在学习鸿蒙的时候,发现模拟器非常卡,不要说体验到鸿蒙的丝滑,甚至到严重影响使用的程度。 根据我开发Android的经验和在论坛翻了一圈,最终总结出了以下几个方案。 创建模拟器 1、在DevEco Virtual Device Configurat…

工业锅炉物联网:HiWoo Cloud为工业能源转型注入新动力

随着全球工业化的快速发展,工业锅炉作为工业生产的“心脏”,其能源效率和运行安全性越来越受到关注。然而,传统的工业锅炉管理往往依赖于人工监控和定期维护,这种方式不仅效率低下,而且难以确保设备的持续高效运行。在…

物联网通信协议介绍

为了方便,将物联网通信协议分为两大类,一类是接入协议,一类是通讯协议。接入协议一般负责子网内设备间的组网及通信;通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通…

PDF Expert for Mac v3.9.2中文激活版下载

PDF Expert for Mac是一款易于使用的 PDF 编辑器和注释器,专为 Mac 设备设计。它允许用户轻松查看、编辑、签名、注释和共享 PDF。该软件使用户能够向他们的 PDF 添加文本、图像、链接和形状,突出显示和标记文本,填写表格以及签署数字文档。它…

WebServer -- 日志系统(下)

目录 🌼整体思路 🎂基础API fputs 可变参数宏 __VA_ARGS__ fflush 🚩流程图与日志类定义 流程图 日志类定义 🌼功能实现 生成日志文件 && 判断写入方式 日志分级与分文件 🌼整体思路 日志系统分两部…

追踪Jira中项目成本与工时,更符合国人使用习惯——TimeWise工时管理

近日,龙智联合Atlassian举办的DevSecOps研讨会年终专场“趋势展望与实战探讨:如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队,以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0…

ABAP - OOALV 双击事件

OOALV的双击事件通过cl_gui_alv_grid内置事件double_click实现,效果如下图显示 实现步骤:不需要像单击事件那样需要热点 定义一个事件处理类及其操作处理 CLASS cl_event DEFINITION.PUBLIC SECTION.METHODS handle_double_click FOR EVENT double_clickOF cl_gui…

MyBatis-Plus 快速入门

介绍 j​​​​​MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 官网:MyBatis-Plus (baomidou.com) 1.…