ESP8266_MicroPython——GPIO_LED_KEY_外部中断

news2024/9/29 7:16:42

MicroPython

文章目录

  • MicroPython
  • 前言
  • 一、安装软件
  • 二、点亮第一颗LED灯
  • 三、KEY按键
  • 四、外部中断
  • 总结


前言

MicroPython比较简单但是没有系统的更新过文章,准备写一下ESP8266——MicroPython的文章做一个系列。

一、安装软件

安装开发软件 Thonny,安装这个软件就可以了,网上资料有很多就不重复造轮子了。

二、点亮第一颗LED灯

ESP8266 上有 1 个 LED(GPIO2),控制 LED 使用 machine 中的 Pin 对
象,其构造函数和使用方法如下:

led=machine.Pin(id,mode,pull)

构建 led 对象。id:引脚编号;mode:输入输出方式;pull:上下拉电阻配置。

led.value([x])
引脚电平值。输出状态:x=0 表示低电平,x=1 表示高电平;输入状态:无须参数,返回当前引脚值。
led.on()
使引脚输出高电平“1”。
led.off()
使引脚输出低电平“0”。

machine 是大模块,Pin 是 machine 下面的其中一个小模块,在 python 编程里有两种方式引用相关模块:
方式 1 是:import machine,然后通过 machine.Pin 来操作;
方式 2 是:from machine import Pin,意思是直接从 machine 中引入 Pin 模块,然后直接通过构建 led 对象来操作。显然方式 2 会显得更直观和方便。
在这里插入图片描述
在这里插入图片描述
这是ESP8266led灯的原理图 很明显低电平点亮 ESP32是高电平点亮

from machine import Pin #导入 Pin 模块
led=Pin(2,Pin.OUT) #构建 led 对象,GPIO2,输出
led.value(0) #点亮 LED

在这里插入图片描述

三、KEY按键

构造函数的使用方式是一样的,只是输入/输出状态的一个改变。
在这里插入图片描述
按键被按下时候可能会发生抖动,抖动如下图,有可能造成误判,因此需要使用延时函数来进行消抖
在这里插入图片描述
是当检测按键值为 0 时,延时一段时间,大约 10ms,再判断按键引脚值仍然是 0,是的话说明按键被按下。延时使用 time 模块

from machine import Pin
import time
LED=Pin(2,Pin.OUT,value=1) #构建LED对象,开始熄灭
KEY=Pin(0,Pin.IN,Pin.PULL_UP) #构建KEY对象
state=1 #LED引脚状态
while True:
    if KEY.value()==0:   #按键被按下
        time.sleep_ms(10) #消除抖动
        if KEY.value()==0: #确认按键被按下
            state=not state  #使用not语句而非~语句
            LED.value(state) #LED状态翻转
            while not KEY.value(): #检测按键是否松开
                pass

这里注意使用了not语句,每次按键按下后通过使用 not 来改变。这里注意的是在 python 里使用‘not’而不是‘~’的方式。not 返回的是 True 和 False,即 0,1。而~ 是数值取反操作,会导致出错。

四、外部中断

我们在做普通的 GPIO 时候,虽然能实现 IO 口输入输出功能,但代码是一直在检测 IO 输入口的变化,因此效率不高,特别是在一些特定的场合,比如某个按键,可能 1 天才按下一次去执行相关功能,这样我们就浪费大量时间来实时检测按键的情况。为了解决这样的问题,我们引入外部中断概念,顾名思义,就是当按键被按下(产生中断)时,我们才去执行相关功能。这大大节省了 CPU 的资源。利用中断方式来检查按键 KEY 状态,被按键被按下(产生外部中断)后使 LED的亮灭状态翻转。
外部中断也是通过 machine 模块的 Pin 子模块来配置

KEY=machine.Pin(id,mode,pull)
构建按键对象。id:引脚编号;mode:输入输出方式;pull:上下拉电阻配置。
KEY.irq(handler,trigger)
配置中断模式。
handler:中断执行的回调函数;
trigger: 触发中断的方式,共 4 种,分别是 Pin.IRQ_FALLING(下降沿触发)、
Pin.IRQ_RISING(上升沿触发)、Pin.IRQ_LOW_LEVEL(低电平触发)、
Pin.IRQ_HIGH_LEVEL(高电平触发)。

上升沿和下降沿触发统称边沿触发。按键被按下时一个引脚值从 1 到 0 变化的过程,边沿触发就是指这个过程
在这里插入图片描述
高低电平就更好理解了
在这里插入图片描述

from machine import Pin
import time

LED=Pin(2,Pin.OUT,value=1) #构建LED对象,开始熄灭
KEY=Pin(0,Pin.IN,Pin.PULL_UP) #构建KEY对象
state=1  #LED引脚状态

#LED状态翻转函数
def fun(KEY):
    global state
    time.sleep_ms(10) #消除抖动
    if KEY.value()==0: #确认按键被按下
        state = not state
        LED.value(state)

KEY.irq(fun,Pin.IRQ_FALLING) #定义中断,下降沿触发

global关键字用于在函数内部声明一个变量是全局的,即它引用的是函数外部的变量,而不是创建一个新的局部变量。这允许你在函数中修改全局变量的值。
state 是全局变量,因此在 fun 函数里面用该变量必须添加 global state 代码,否则会在函数里面新建一样的变量造成冲突。这里要和普通C语言单片机区分一下

在定义回调函数 fun 的时候,需要将引脚对象 KEY 传递进去。

KEY.irq(fun,Pin.IRQ_FALLING) #定义中断,下降沿触发

总结

可以看出MicroPython还是比较简单的,当你想使用GPIO时导入machine 包就可以了,可以配置输入、输出、外部中断等等

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

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

相关文章

豆包MarsCode编程助手:产品功能解析与应用场景探索!

随着现代技术的不断进化升级,人工智能正在逐步改变着我们的日常工作方式。特别是对于复杂的项目,代码编写、优化、调试、测试等环节充满挑战。为了简化这些环节、提高开发效率,许多智能编程工具应运而生,豆包MarsCode 编程助手就是…

瑞芯微Android6 内核编译报错解决方案

1、报错内容如下图所示 错误内容: Kernel: arch/arm/boot/zImage is ready make: *** [kernel.img] Error 127 2、分析与解决方法 由于之前在ubuntu环境下编译没问题,现在是在centos环境下重新编译的时候报错,所以经过分析对比两个环境的…

非关系型数据库Redis

文章目录 一,关系型数据库和非关系型数据可区别1.关系型数据库2.非关系型数据库3.区别3.1存储方式3.2扩展方式3.2事务性的支持 二,非关系型数据为什么产生三,Redis1.Redis是什么2.Redis优点3.Redis适用范围4. Redis 快的原因4.1 基于内存运行…

1-4微信小程序基础

模板配置 🌮🌮目标 1.能够使用WXML模板语法渲染页面结构2.能够使用WXSS样式渲染标签样式3.能够使用app.json对小程序进行全局配置4.能够使用page.json对小程序页面进行个性化配置5.如何发起网络数据请求 数据绑定的基本原则 在data中定义数据在WXML中…

(论文解读)Visual-Language Prompt Tuning with Knowledge-guided Context Optimization

Comment: accepted by CVPR2023 基于知识引导上下文优化的视觉语言提示学习 摘要 提示调优是利用任务相关的可学习标记将预训练的视觉语言模型(VLM)适应下游任务的有效方法。基于CoOp的代表性的工作将可学习的文本token与类别token相结合,…

Linux环境使用Git同步教程

📖 前言:由于CentOS 7已于2024年06月30日停止维护,为了避免操作系统停止维护带来的影响,我们将把系统更换为Ubuntu并迁移数据,在此之前简要的学习Git的上传下载操作。 目录 🕒 1. 连接🕘 1.1 配…

Effective C++笔记之二十二:C++临时变量的析构

先来看段代码 #include <iostream> #include <string>std::string myBlog() {return "https://blog.csdn.net/caoshangpa"; }int main() {const char *p myBlog().c_str();std::cout << p << std::endl;return 0; } 预期输出&#xff1a;…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

【新片场-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…

饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

摘要&#xff1a;本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online&#xff08;Paimon x StarRocks&#xff0c;共话实时湖仓架构&#xff09;上的分享。主要分为以下三个内容&#xff1a; 饿了么实时数仓演进之…

GHOST重装后DEF盘数据救援指南

一、现象解析&#xff1a;GHOST重装后的DEF盘失踪之谜 在计算机维护的日常中&#xff0c;GHOST重装因其快速便捷的特点&#xff0c;成为众多用户解决系统问题的首选方法。然而&#xff0c;这一操作虽能迅速恢复系统至初始状态&#xff0c;却也暗藏风险&#xff0c;尤其是当不慎…

火语言RPA流程组件介绍--单选/复选框

&#x1f6a9;【组件功能】&#xff1a;勾选页面单选/复选框元素 配置预览 配置说明 丨目标元素 支持T或# 默认FLOW输入项 通过自动捕获工具捕获(选择元素工具使用方法)或手动填写网页元素的css,xpath&#xff0c;指定对应网页元素作为操作目标 丨操作 对目标元素进行的勾…

分布式中间件-redis相关概念介绍

文章目录 什么是redis?示意图Redis的主要特点Redis的主要用途Redis的工作原理Redis的持久化与备份 redis 6.x新增特性多线程数据加载客户端缓存新的 RESP 3 协议支持ACL&#xff08;Access Control List&#xff09;功能新增数据类型性能改进配置文件的改进其他改进 redis数据…

MySQL:表中的数据类型

数值类型 int类型 int类型包含以下五种&#xff1a; 类型大小tinyint1 bytesmallint2 bytemediumint3 byteint4 bytebigint8 byte 表t1的num列的类型就是tinyint&#xff0c;我们尝试对其插入数据&#xff0c;来测试其范围。tinynt占1 byte&#xff0c;那么就可以表示256个数…

opengl学习6

理解glVertexAttribPointer()函数 OpenGL glVertexAttribPointer&#xff08;&#xff09;函数解析-CSDN博客 难理解的是最后一个参数。 这个参数指明了&#xff0c;顶点属性的数据从哪里获取。 # 如果是(void*) 0&#xff0c;则表示数据从已绑定的VBO中获取&#xff0c;从…

Flutter Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;justify-content: center;ali…

使用Ubuntu耳机输出正弦波信号

最近有一个项目想使用喇叭发出一个标准的正弦波测试信号&#xff0c;故记录下操作过程 sudo apt install libasound2-dev 否则有可能会报错&#xff1a; alsaaudio.c:28:10: fatal error: alsa/asoundlib.h: No such file or directory 安装pyalsaaudio&#xff1a; pip …

《 C++ 修炼全景指南:六 》深入探索 C++ 标准库中的 stack 与 queue 容器适配器

1、引言 1.1、容器适配器的概念与应用 容器适配器&#xff08;Container Adapters&#xff09;是 C 标准库提供的一种特殊容器&#xff0c;它不是一种独立的容器&#xff0c;而是对其他标准容器的封装&#xff0c;用来实现特定的数据结构如栈&#xff08;stack&#xff09;和…