从零开始的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是一个类,它定义了两个属性(name和age)和一个方法(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_POWER或Pin.HIGH_POWER。实际的当前驱动能力取决于端口。并非所有端口都实现此参数。alt为引脚指定一个备用功能,它可以采用的值取决于端口。此参数仅对Pin.ALT和Pin.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.SLEEPormachine.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 用法
一:功能 计算部分和,即遍历序列中每个元素,计算前 i 个元素的累加和,并将结果存在 i 的位置上。 二:用法 #include <iostream> #include <vector> #include <numeric>int main() {std::vector<…...
诚宜开张圣听不应妄自菲薄
拾人牙慧孜孜不倦 青山依旧在几度夕阳红朝闻道夕死可矣 青山依旧在几度夕阳红 安能以血补天我计不成乃天命也臣本布衣躬耕南阳大丈夫宁死不辱尔要试我宝剑是否锋利吗又待怎样休教天下人负我竖子不足与谋皇天不佑天下英雄唯使君与操尔青光殷殷其灿如炎备不量力欲申大义于天下我…...
Vue3 加载条(LoadingBar)
效果如下图:在线预览 APIs LoadingBar 参数说明类型默认值必传containerClass加载条容器的类名stringundefinedfalsecontainerStyle加载条容器的样式CSSProperties{}falseloadingBarSize加载条大小,单位 pxnumber2falsecolorLoading加载中颜色string‘…...
《CSS创意项目实战指南》:点亮网页,从实战中掌握CSS的无限创意
CSS创意项目实战指南 在数字时代,网页不仅是信息的载体,更是艺术与技术的融合体。通过CSS,你可以将平凡的网页转变为引人入胜的视觉盛宴,让用户体验跃升至全新高度。《CSS创意项目实战指南》正是这样一本引领你探索CSS无限可能的…...
[FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)
json格式输入ls出现index.php 这道题原本是给了源码的,BUUCTF没给 源码: <?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支持四种事务隔离级别: 读未提交:一个事务可以读取到另一个事务还未提交的数据;读已提交:一个事务可以读取到另一个事务已经提交的数据;可重复读:同一个事务中,无论读取…...
计算机体系结构:缓存一致性ESI
集中式缓存处理器结构(SMP) 不同核访问存储器时间相同。 分布式缓存处理器结构(NUMA) 共享存储器按模块分散在各处理器附近,处理器访问本地存储器和远程存储器的延迟不同,共享数据可进入处理器私有高速缓存…...
log4j2漏洞练习(未完成)
log4j2 是Apache的一个java日志框架,我们借助它进行日志相关操作管理,然而在2021年末log4j2爆出了远程代码执行漏洞,属于严重等级的漏洞。apache log4j通过定义每一条日志信息的级别能够更加细致地控制日志生成地过程,受影响的版本…...
常见网络攻击方法原理、应用场景和防御方法(一)
目录 1、SQL注入(SQL Injection)原理应用场景防御方法 2、跨站脚本攻击(XSS,Cross-Site Scripting)原理应用场景防御方法 3、跨站请求伪造(CSRF,Cross-Site Request Forgery)原理应用场景防御方法 4、文件上传漏洞原理应用场景防御方法 5、远程代码执行(…...
【leetcode十分钟】覆盖所有点的最少矩形数目(C++思路详解)
思路详解: 0. 题目情境并未限制矩形高度,故矩形数目的判断只和点的横坐标有关 1. 为了不重不漏地考虑到所有点,故笔者选择首先将二维数组中的点按横坐标的大小排序 //说明:本来笔者以为需要自定义sort排序,后来发现…...
【Vue3】默认插槽
【Vue3】默认插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内…...
华清day4 24-7-31
1> 使用父子进程完成两个文件的拷贝 父进程拷贝前一半内容,子进程拷贝后一半内容 子进程结束后退出,父进程回收子进程的资源 /* 使用父子进程完成两个文件的拷贝父进程拷贝前一半内容,子进程拷贝后一半内容 子进程结束后退出ÿ…...
搜维尔科技:Manus VR数据手套-适用于机器人、人工智能和机器学习解决方案
在劳动力短缺和工作环境日益严峻的今天,机器人技术正成为解决这些复杂问题的关键。MANUS™ 手指捕捉技术,结合先进的量子追踪技术,为机器人的精确操作和远程控制提供了准确且先进的解决方案。 技术亮点 实时数据捕捉:通过Quantum…...
知识文库杂志知识文库杂志社知识文库编辑部2024年第12期目录
文艺理论 现代高校书院对中国传统书院学术精神的汲取与转化 李奥楠;时新洁; 1-4 个案工作介入高中美术艺考生及家长心理调适的应用研究 魏星; 5-8《知识文库》投稿:cn7kantougao163.com 中华优秀传统文化视角下高校美育课程实践教学 李丛丛; 9-12 基…...
【Linux网络编程】套接字Socket
网络编程基础概念: ip地址和端口号 ip地址是网络协议地址(4字节32位,形式:xxx.xxx.xxx.xxx xxx在范围[0, 255]内),是IP协议提供的一种统一的地址格式,每台主机的ip地址不同,一个…...
es之must、filter、must_not、should
文章目录 概述mustfiltermust_notshouldmust和filter的区别 概述 在Elasticsearch中,布尔查询(bool query)是构建复杂查询的基本工具。它允许你组合多个查询子句,每个子句可以使用不同的逻辑操作符。常见的逻辑操作符包括 must、…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
PLC入门【4】基本指令2(SET RST)
04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C),从 文件 - 主画面,“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...
