【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)  # 点亮LEDtime.sleep(0.1)  # 延时led.value(0)  # 关闭LED

总结

通过本教程,我们学习了如何在MicroPython环境下控制LED。首先,我们了解了如何连接开发板和LED。然后,我们使用MicroPython的GPIO模块初始化GPIO引脚,并将其配置为输出模式。接着,我们通过设置GPIO引脚的电平来点亮LED。最后,我们利用循环结构和延时函数实现了一个简单的流水灯效果。通过这个简单的例子,我们初步掌握了MicroPython的基本语法和GPIO控制方法,为进一步学习和应用MicroPython打下了坚实的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM(2)

JVM类加载 指的是java进程运行时,需要把.class文件从硬盘加载到内存,并进行一系列校验解析的过程. 核心: .class文件>类对象; 硬盘>内存. 类加载过程 在整个JVM的执行流程中,和程序员关系最密切的就是类加载的过程了,所以我们来看一下类加载的执行流程. 对于一个类…

使用Git从其他分支merge个别文件

项目背景 产品经理:我们本次开发三个功能,列表页功能、详情页功能、系统消息功能,分两次上线,先上列表功能,再上详情页和系统消息。 小明:好的吧。 紧接着,小明就将本次需求分为2个分支&…

camunda7流程跳转和流程退回的实现方法

我们在使用工作流的时候,常常有“流程退回”、“流程跳转”、“自由流”、“动态加签”等这样的需求。Camunda流程平台提供了这样的机制和接口,虽然流程模型定义活动执行顺序的序列流,但有时需要灵活地重新启动活动或取消正在运行的活动&…

k8s-项目测试环境部署

部署规划 概述 项目开发好后,我们需要部署,我们接下来就基于 阿里云云效 阿里云容器镜像服务 k8s 搭建部署环境 阿里云云效 : 放代码,可以做cicd(https://www.aliyun.com/product/yunxiao) 阿里云容器镜像服务 :…

Unity(第十六部)声音和视频

声音 1、听声音 创建相机的时候,相机自带Audio Listener 多个相机的时候,我们只保留一个Audio Listener就可以 2、声音源,环境音 添加Audio Source就行中文叫声音源 3、脚本执行的声音 using System.Collections; using System.Collection…

Servlet(1)Request 请求对象

1、接收请求数据的流程 浏览器发送HTTP请求到Tomcat服务器HTTP的请求中会包含很多请求数据(请求行请求头请求体)Tomcat服务器会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中所封装的对象即为Request对象,所以可以从Request对象中…

ubuntu安装新版本的CMake

来到cmake官网选择版本 我需要在嵌入式板子上的Ubuntu18安装使用 故我选择aarch64版本。 按F12进入检查模式得到下载链接。 在板子上运行以下命令,获取安装脚本 wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3-linux-aarch64.s…

OpenCV实现目标追踪

目录 准备工作 语言: 软件包: 效果演示 代码解读 (1)导入OpenCV库 (2)使用 cv2.VideoCapture 打开指定路径的视频文件 (3)使用 vid.read() 读取视频的第一帧,ret…

前端视角对Rust的浅析

概述 本文将从 Rust 的历史,前端的使用场景和业界使用案例一步步带你走进 Rust的世界。并且通过一些简单的例子,了解 Rust 如何应用到前端,提高前端的生产效率。 Rust简史 2006年,软件开发者Graydon Hoare在Mozilla工作期间&#…

队列的概念及使用

目录 一. 概念 二. 队列的使用 三. 队列模拟实现 四. 循环队列 五. 面试题 一. 概念 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操…

IDEA基础——Maven配置tomcat

配置方案 一、配置maven-tomcat plugin插件(只最高支持到tomcat 8)~~1.添加镜像源,获取tomcat 8插件配置~~~~1.1 在pom.xml里先添加镜像源~~~~1.2 添加tomcat插件配置~~ 2. 添加tomact官方发布的插件配置(无需添加镜像源&#xff…

本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法

aiboco团队荣获本届挑战赛季军。该团队来自亿阳信通。 方案介绍 本届挑战赛采用开放式赛题,基于建行云龙舟运维平台的稳定性工具和多维监控系统,模拟大型的生活服务APP的生产环境,提供端到端的全链路的日志、指标和调用链数据。参赛队伍在组…

vue中将某个不太规则的json转成对象,或者将对象转成json字符串

vue中将某个不太规则的json转成对象,或者将对象转成json字符串 以我自己做的项目某个不规则的json为例 将json对象转成json字符串: JSON.stringify(jsonData); 将不规则json字符串转成对象并获取对应的属性的值: JSON.parse(jsonData).Name…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声,以应用价值为中心的云原生时代已经到,所以IT人员学习云原生正当时!最近跟各位大神征集了云原生的教程,行业报告和最佳实践,总有一款适…

蓝桥杯_中断系统

一 中断 中断,即cpu暂停执行当前程序,转而执行另外一段特殊程序,处理结束后。返回之前暂停程序继续执行。 中断向量,中断服务程序的入口地址,每个中断源都对应一个固定的入口地址。 中断服务函数,内核响应中…

【亚马逊云科技】通过Amazon CloudFront(CDN)快速访问资源

文章目录 前言一、应用场景二、【亚马逊云科技】CloudFront(CDN)的优势三、入门使用总结 前言 前面有篇文章我们介绍了亚马逊云科技的云存储服务。云存储服务主要用于托管资源,而本篇文章要介绍的CDN则是一种对托管资源的快速访问服务&#…

Socket网络编程(二)——UDP快速入门

目录 UDP相关概念UDP是什么为什么不可靠UDP能做什么UDP包最大长度 UDP单播、广播、多播概念1. 单播、广播、多播模型图2. ip地址分类3. 子网掩码的作用:4. 广播地址5. 网段划分6. 变长子网掩码 UDP核心APIAPI-DatagramSocketDatagramSocket构造方法DatagramSocket常…

6.5 共享数据

本节介绍Android的四大组件之一ContentProvider的基本概念和常见用法:首先说明如何使用内容提供器封装内部数据的外部访问接口,然后阐述如何使用内容解析器通过外部接口操作内部数据,最后叙述如何利用内容解析器读写联系人信息,以…

10_Vue

文章目录 Vue快速入门Vue的指令Vue的插值表达式V指令v-bind(单向绑定)v-model(双向绑定)v-on(事件监听)v-for(循环)v-text、v-htmlv-show(显示/隐藏)v-if&…

了解GPT:ChatGPT的终极指南

在人工智能(AI)的世界里,有一颗冉冉升起的新星正在革命性地改变我们与机器的交互方式:ChatGPT。在本文中,我们将深入研究什么是ChatGPT,为什么底层技术GPT如此强大,以及它是如何实现其卓越功能的…