当前位置: 首页 > news >正文

从零开始的MicroPython(二) GPIO及代码应用

上一篇:http://t.csdnimg.cn/mg2Qt

文章目录

    • ESP32(NodeMCU-32S)
      • 简介
      • 引脚
      • 注意事项
    • 类与对象的概念
    • MicroPython的GPIO使用
      • 文档解释
        • machine.Pin
        • Pin.irq
    • 点灯

ESP32(NodeMCU-32S)

简介

NodeMCU-32S 是安信可基于 ESP32-32S 模组所设计的核心开发板。该开发板延续了 NodeMCU 1.0经典设计,引出大部分I/O至两侧的排针,开发者可以根据自己的需求连接外设。使用面包板进行开发和调试时,两侧的标准排针可以使操作更加简单方便。

引脚

注意事项

Flash标注的是bin烧录引脚不做他用。

UART0与电脑通讯。

类与对象的概念

​ 类是一种抽象的概念,用于描述具有相似属性和行为的对象的集合。对象则是类的具体实例,它具体化了类定义的属性和行为。下面通过一个简单的Python例程来进一步解释:

# 定义一个名为Person的类
class Person:# 初始化方法,当创建对象时会自动调用def __init__(self, name, age):self.name = name  # 设置名字属性self.age = age    # 设置年龄属性# 定义一个打招呼的方法def say_hello(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")# 创建一个Person类的对象
person1 = Person("Alice", 25)# 访问对象的方法
person1.say_hello()

​ 在这个例子中,Person是一个类,它定义了两个属性(nameage)和一个方法(say_hello)。我们通过这个类创建了一个名为person1的对象,并为其设置了名字为“Alice”和年龄为25。然后,我们调用该对象的say_hello方法,它会输出对应的问候语。

简单来说,就是有一个“类”,是Person,有一个“对象”属于这个“类”,是他的“对象”,就有对应的“方法”和“属性”。

MicroPython的GPIO使用

基于machine.Pin模块实现,注意Pin首字母大小写。Python书写要注意缩进等语法。

from machine import Pin# create an output pin on pin #0
p0 = Pin(0, Pin.OUT)# set the value low then high
p0.value(0)
p0.value(1)# create an input pin on pin #2, with a pull up resistor
p2 = Pin(2, Pin.IN, Pin.PULL_UP)# read and print the pin value
print(p2.value())# reconfigure pin #0 in input mode with a pull down resistor
p0.init(p0.IN, p0.PULL_DOWN)# configure an irq callback
p0.irq(lambda p:print(p))

我们可以从中观察到引脚的写法与对象的声明、调用写法。

p0 = Pin(0, Pin.OUT)

GPIO0被设置为输出。

p2 = Pin(2, Pin.IN, Pin.PULL_UP)

GPIO2被设置为上拉输入

注意这里的GPIO几是由Pin()里面的数字决定的

文档解释

machine.Pin

class machine.Pin(id, mode=-1, pull=- 1, *, value, drive, alt)

访问与给定 id. 如果在构造函数中给出了额外的参数,那么它们将用于初始化引脚。任何未指定的设置将保持其先前状态。

论据是:

  • id 是强制性的,可以是任意对象。可能的值类型包括:int(内部 Pin 标识符)、str(Pin 名称)和元组([port, pin] 对)。
  • mode 指定引脚模式,可以是以下之一:
    • Pin.IN - 引脚配置为输入。如果将其视为输出,则该引脚处于高阻抗状态。
    • Pin.OUT - 引脚配置为(正常)输出。
    • Pin.OPEN_DRAIN - 引脚配置为开漏输出。开漏输出的工作方式如下:如果输出值设置为0,则该引脚处于低电平有效;如果输出值为 1,则引脚处于高阻抗状态。并非所有端口都实现此模式,或者某些端口可能仅在某些引脚上。
    • Pin.ALT - 引脚配置为执行特定于端口的替代功能。对于以这种方式配置的引脚,任何其他引脚方法(除了 Pin.init())都不适用(调用它们将导致未定义或特定于硬件的结果)。并非所有端口都实现此模式
    • Pin.ALT_OPEN_DRAIN - 与 相同 Pin.ALT,但引脚配置为开漏。并非所有端口都实现此模式。
  • pull指定引脚是否连接了(弱)上拉电阻,并且可以是以下之一:
    • None - 没有上拉或下拉电阻。
    • Pin.PULL_UP - 上拉电阻使能。
    • Pin.PULL_DOWN - 下拉电阻启用。
  • value仅对 Pin.OUT 和 Pin.OPEN_DRAIN 模式有效,如果给定,则指定初始输出引脚值,否则引脚外设的状态保持不变。
  • drive 指定引脚的输出功率,可以是以下之一: Pin.LOW_POWER, Pin.MED_POWERPin.HIGH_POWER。实际的当前驱动能力取决于端口。并非所有端口都实现此参数。
  • alt为引脚指定一个备用功能,它可以采用的值取决于端口。此参数仅对Pin.ALTPin.ALT_OPEN_DRAIN 模式有效。当一个引脚支持多个备用功能时,可以使用它。如果仅支持一个引脚备用功能,则不需要此参数。并非所有端口都实现此参数。

如上所述,Pin 类允许为特定的 pin 设置备用功能,但它没有指定对此类 pin 的任何进一步操作。在交替功能模式下配置的引脚通常不用作 GPIO,而是由其他硬件外设驱动。此类引脚支持的唯一操作是通过调用构造函数或 Pin.init() 方法重新初始化。如果在复用功能模式下配置的引脚用Pin.IN, Pin.OUT、 或 重新初始化,复用 Pin.OPEN_DRAIN功能将从引脚中删除。

Pin.irq

Pin.irq(handler=None, trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, *, priority=1, wake=None, hard=False)

配置在引脚的触发源处于活动状态时要调用的中断处理程序。如果引脚模式为,Pin.IN 则触发源为引脚上的外部值。如果引脚模式为,Pin.OUT 则触发源为引脚的输出缓冲器。否则,如果引脚模式是,Pin.OPEN_DRAIN则触发源是状态“0”的输出缓冲器和状态“1”的外部引脚值。

论据是:

  • handler是中断触发时要调用的可选函数。处理程序必须只采用一个参数,即 Pin实例。

  • trigger 配置可以产生中断的事件。可能的值为:

    • Pin.IRQ_FALLING 下降沿中断。
    • Pin.IRQ_RISING上升沿中断。
    • Pin.IRQ_LOW_LEVEL 低电平中断。
    • Pin.IRQ_HIGH_LEVEL高电平中断。

    这些值可以通过“或”运算来触发多个事件。

  • priority设置中断的优先级。它可以采用的值是特定于端口的,但更高的值总是代表更高的优先级。

  • wake选择此中断可以唤醒系统的电源模式。它可以是 machine.IDLE, machine.SLEEP or machine.DEEPSLEEP. 。也可以将这些值进行“或”运算,使一个引脚在一种以上的电源模式下产生中断。

  • hard 如果为真,则使用硬件中断。这减少了引脚更改和被调用的处理程序之间的延迟。硬中断处理程序可能不分配内存;请参阅 编写中断处理程序.。并非所有端口都支持此参数。

此方法返回一个回调对象。

点灯

嵌入式学习少不了点灯代码。

from machine import Pin
import time# 定义LED连接的GPIO针脚编号
led_pin = 2# 初始化LED引脚为输出模式
led = Pin(led_pin, Pin.OUT)while True:# 点亮LEDled.value(1)time.sleep(1)  # 延时1秒# 熄灭LEDled.value(0)time.sleep(1)  # 延时1秒

相关文章:

从零开始的MicroPython(二) GPIO及代码应用

上一篇:http://t.csdnimg.cn/mg2Qt 文章目录 ESP32(NodeMCU-32S)简介引脚注意事项 类与对象的概念MicroPython的GPIO使用文档解释machine.PinPin.irq 点灯 ESP32(NodeMCU-32S) 简介 NodeMCU-32S 是安信可基于 ESP32-32S 模组所设计的核心开发板。该开发板延续了 N…...

嵌入式day15

数组指针 能够指向整个数组 一维数组: &a,考察a的数据类型 int(*p)[10]:表示一个指向长度为10的一维整型数组的指针 二维数组: 指向函数的指针 函数的函数名,即为函数的入口地址&#x…...

【电池管理系统(BMS)-01】 | 电池管理系统简介,动力电池和储能电池区别

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...

C++ STL partial_sum 用法

一&#xff1a;功能 计算部分和&#xff0c;即遍历序列中每个元素&#xff0c;计算前 i 个元素的累加和&#xff0c;并将结果存在 i 的位置上。 二&#xff1a;用法 #include <iostream> #include <vector> #include <numeric>int main() {std::vector<…...

诚宜开张圣听不应妄自菲薄

拾人牙慧孜孜不倦 青山依旧在几度夕阳红朝闻道夕死可矣 青山依旧在几度夕阳红 安能以血补天我计不成乃天命也臣本布衣躬耕南阳大丈夫宁死不辱尔要试我宝剑是否锋利吗又待怎样休教天下人负我竖子不足与谋皇天不佑天下英雄唯使君与操尔青光殷殷其灿如炎备不量力欲申大义于天下我…...

Vue3 加载条(LoadingBar)

效果如下图&#xff1a;在线预览 APIs LoadingBar 参数说明类型默认值必传containerClass加载条容器的类名stringundefinedfalsecontainerStyle加载条容器的样式CSSProperties{}falseloadingBarSize加载条大小&#xff0c;单位 pxnumber2falsecolorLoading加载中颜色string‘…...

《CSS创意项目实战指南》:点亮网页,从实战中掌握CSS的无限创意

CSS创意项目实战指南 在数字时代&#xff0c;网页不仅是信息的载体&#xff0c;更是艺术与技术的融合体。通过CSS&#xff0c;你可以将平凡的网页转变为引人入胜的视觉盛宴&#xff0c;让用户体验跃升至全新高度。《CSS创意项目实战指南》正是这样一本引领你探索CSS无限可能的…...

[FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)

json格式输入ls出现index.php 这道题原本是给了源码的&#xff0c;BUUCTF没给 源码&#xff1a; <?phpputenv(PATH/home/rceservice/jail);if (isset($_REQUEST[cmd])) {$json $_REQUEST[cmd];if (!is_string($json)) {echo Hacking attempt detected<br/><br/…...

vue3后台管理系统 vue3+vite+pinia+element-plus+axios上

前言 项目安装与启动 使用vite作为项目脚手架 # pnpm pnpm create vite my-vue-app --template vue安装相应依赖 # sass pnpm i sass # vue-router pnpm i vue-router # element-plus pnpm i element-plus # element-plus/icon pnpm i element-plus/icons-vue安装element-…...

Mysql的事务隔离级别实现原理

一、事务隔离级别 mysql支持四种事务隔离级别&#xff1a; 读未提交&#xff1a;一个事务可以读取到另一个事务还未提交的数据&#xff1b;读已提交&#xff1a;一个事务可以读取到另一个事务已经提交的数据&#xff1b;可重复读&#xff1a;同一个事务中&#xff0c;无论读取…...

计算机体系结构:缓存一致性ESI

集中式缓存处理器结构&#xff08;SMP&#xff09; 不同核访问存储器时间相同。 分布式缓存处理器结构&#xff08;NUMA&#xff09; 共享存储器按模块分散在各处理器附近&#xff0c;处理器访问本地存储器和远程存储器的延迟不同&#xff0c;共享数据可进入处理器私有高速缓存…...

log4j2漏洞练习(未完成)

log4j2 是Apache的一个java日志框架&#xff0c;我们借助它进行日志相关操作管理&#xff0c;然而在2021年末log4j2爆出了远程代码执行漏洞&#xff0c;属于严重等级的漏洞。apache log4j通过定义每一条日志信息的级别能够更加细致地控制日志生成地过程&#xff0c;受影响的版本…...

常见网络攻击方法原理、应用场景和防御方法(一)

目录 1、SQL注入(SQL Injection)原理应用场景防御方法 2、跨站脚本攻击(XSS&#xff0c;Cross-Site Scripting)原理应用场景防御方法 3、跨站请求伪造(CSRF&#xff0c;Cross-Site Request Forgery)原理应用场景防御方法 4、文件上传漏洞原理应用场景防御方法 5、远程代码执行(…...

【leetcode十分钟】覆盖所有点的最少矩形数目(C++思路详解)

思路详解&#xff1a; 0. 题目情境并未限制矩形高度&#xff0c;故矩形数目的判断只和点的横坐标有关 1. 为了不重不漏地考虑到所有点&#xff0c;故笔者选择首先将二维数组中的点按横坐标的大小排序 //说明&#xff1a;本来笔者以为需要自定义sort排序&#xff0c;后来发现…...

【Vue3】默认插槽

【Vue3】默认插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…...

华清day4 24-7-31

1> 使用父子进程完成两个文件的拷贝 父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容 子进程结束后退出&#xff0c;父进程回收子进程的资源 /* 使用父子进程完成两个文件的拷贝父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容 子进程结束后退出&#xff…...

搜维尔科技:Manus VR数据手套-适用于机器人、人工智能和机器学习解决方案

在劳动力短缺和工作环境日益严峻的今天&#xff0c;机器人技术正成为解决这些复杂问题的关键。MANUS™ 手指捕捉技术&#xff0c;结合先进的量子追踪技术&#xff0c;为机器人的精确操作和远程控制提供了准确且先进的解决方案。 技术亮点 实时数据捕捉&#xff1a;通过Quantum…...

知识文库杂志知识文库杂志社知识文库编辑部2024年第12期目录

文艺理论 现代高校书院对中国传统书院学术精神的汲取与转化 李奥楠;时新洁; 1-4 个案工作介入高中美术艺考生及家长心理调适的应用研究 魏星; 5-8《知识文库》投稿&#xff1a;cn7kantougao163.com 中华优秀传统文化视角下高校美育课程实践教学 李丛丛; 9-12 基…...

【Linux网络编程】套接字Socket

网络编程基础概念&#xff1a; ip地址和端口号 ip地址是网络协议地址&#xff08;4字节32位&#xff0c;形式&#xff1a;xxx.xxx.xxx.xxx xxx在范围[0, 255]内&#xff09;&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;每台主机的ip地址不同&#xff0c;一个…...

es之must、filter、must_not、should

文章目录 概述mustfiltermust_notshouldmust和filter的区别 概述 在Elasticsearch中&#xff0c;布尔查询&#xff08;bool query&#xff09;是构建复杂查询的基本工具。它允许你组合多个查询子句&#xff0c;每个子句可以使用不同的逻辑操作符。常见的逻辑操作符包括 must、…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...