NodeMCU ESP8266 中断介绍以及使用详解

这篇具有很好参考价值的文章主要介绍了NodeMCU ESP8266 中断介绍以及使用详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

今天,我们将学习中断和定时器的相关概念,并且基于NodeMCU ESP8266 12E开发板搭建硬件电路,通过使用中断和定时器实现我们想要实现的功能。

中断介绍

中断在嵌入式开发中是很常见的功能,特别是在单片机的开发中。通常GPIO引脚可以接收外部的信号,根据不同的信号类型,可以触发中断,进入中断服务函数。

那什么是中断?整个流程又是怎么样的?下面做个形象的类比。

  • 上学两年半的学生正在看书;(程序执行主任务,arduino中可以认为在执行loop里的程序);
  • 电话忽然响起;(GPIO上有信号,触发了中断)
  • 上学两年半的学习放下手里的书,跑去接电话;(响应中断,执行中断服务函数)

1 看书
esp8266中断,ESP8266学习教程⭐⭐,单片机,嵌入式硬件,ESP8266


2 电话响起
esp8266中断,ESP8266学习教程⭐⭐,单片机,嵌入式硬件,ESP8266


3 响应中断,去接电话
esp8266中断,ESP8266学习教程⭐⭐,单片机,嵌入式硬件,ESP8266

通过中断,我们不需要一直去检查当前的引脚状态,这种定时去检查引脚状态的机制一般叫做轮询

相比较于中断,轮询的响应会慢很多,并且占用CPU资源;

当检测到变化时,就会触发一个事件——调用一个函数。该函数称为中断服务程序(ISR);

当中断发生时,处理器停止主程序的执行以执行任务,然后回到主程序,如下图所示。

esp8266中断,ESP8266学习教程⭐⭐,单片机,嵌入式硬件,ESP8266

如何使用

AttachInterrupt() 函数

要在 Arduino IDE 中设置中断,我们可以使用attachInterrupt()函数,接受以下参数作为参数:GPIO 中断引脚、要执行的函数的名称和模式:

attachInterrupt(digitalPinToInterrupt(GPIO), ISR, mode);

GPIO中断引脚

第一个参数是 GPIO 中断。你应该使用digitalPinToInterrupt(GPIO)函数 将实际 GPIO 设置为中断引脚。

例如,如果我们想使用 GPIO 14 作为中断,请使用:

digitalPinToInterrupt(14)

ESP8266 支持除 GPIO16 之外的任何 GPIO 中断。

中断服务函数 ISR

该的第二个函数参数是 attachInterrupt() 是每次触发中断时将调用的函数的名称——中断服务例程(ISR)。

ISR 函数应该尽可能简单,以便处理器快速返回主程序的执行。

最好的方法是通过使用全局变量并在loop()检查并清除该标志,然后执行代码。

ISR 需要具备ICACHE_RAM_ATTR在函数定义之前运行 RAM 中的中断代码。

中断触发类型

第三个参数是模式,有 3 种不同的模式:

  • CHANGE:每当引脚改变值时触发中断 - 例如从高到低或从低到高;
  • FALLING:当引脚从高电平变为低电平时;
  • RISING:当引脚从低电平变为高电平时触发。

对于我们的示例,将使用 RISING 模式,因为当 PIR 运动传感器检测到运动时,它所连接的 GPIO 从低电平变为高电平。

硬件电路

这里我们需要搭建一个硬件实验电路,将运动传感器和 LED集成到面包板上。

我们将 LED 连接到通用输入输出口12(D6)和 运动传感器数据引脚通用输入输出口14(D5)。

具体如下所示;

esp8266中断,ESP8266学习教程⭐⭐,单片机,嵌入式硬件,ESP8266

示例代码

按照原理图连接电路后,将提供的代码复制到 Arduino IDE。

您可以按原样上传代码,也可以修改检测到运动后 LED 点亮的秒数。只需更改timeSeconds变量与我们想要的秒数。

#define timeSeconds 10

// Set GPIOs for LED and PIR Motion Sensor
const int led = 12;
const int motionSensor = 14;

// Timer: Auxiliary variables
unsigned long now = millis();
unsigned long lastTrigger = 0;
boolean startTimer = false;

// Checks if motion was detected, sets LED HIGH and starts a timer
ICACHE_RAM_ATTR void detectsMovement() {
  Serial.println("MOTION DETECTED!!!");
  digitalWrite(led, HIGH);
  startTimer = true;
  lastTrigger = millis();
}

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);
  
  // PIR Motion Sensor mode INPUT_PULLUP
  pinMode(motionSensor, INPUT_PULLUP);
  // Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
  attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);

  // Set LED to LOW
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
}

void loop() {
  // Current time
  now = millis();
  // Turn off the LED after the number of seconds defined in the timeSeconds variable
  if(startTimer && (now - lastTrigger > (timeSeconds*1000))) {
    Serial.println("Motion stopped...");
    digitalWrite(led, LOW);
    startTimer = false;
  }
}

结论

本文简单介绍了ESP8266的中断和相关概念,通过实现运动红外传感器的检测来实验中断的功能。文章来源地址https://www.toymoban.com/news/detail-762505.html

到了这里,关于NodeMCU ESP8266 中断介绍以及使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NodeMCU ESP8266开发流程详解(图文并茂)

    NodeMCU ESP8266基于Arduino IDE的开发相对来说还是比较容易上手的,我们基本需要以下几个东西; 一台安装好Arduino IDE的PC,并且已经部署环境(安装好开发板的串口驱动); NodeMCU ESP8266 开发板; USB线(根据实际开发板的情况,本文需要Micro-USB的线); 具体如下图所示; 本文默

    2024年02月06日
    浏览(54)
  • 【NodeMCU-ESP8266】Arduino环境下建立UDP服务器及WiFiUDP库常用函数详解

    目录 一、UDP协议概述         1、UDP基本概念         2、UDP的主要特点         3、UDP的基本报文格式 ​二、ESP8266官方UDP库相关函数详解 三、建立UDP服务器的一般流程 四、ESP8266官方库 UDP 示例程序演示 五、ESP8266官方库 UDP 程序运行说明         1、将程序编译并

    2024年04月24日
    浏览(38)
  • ESP8266/ESP32 NodeMCU接入阿里云物联网平台

    阿里云物联网平台公共实例是免费的,且不像然也等服务器一样无法区分不同用户发布的话题。本文采用常规的pubsubclient库连接阿里云。ESP8266/ESP32用pubsubclient接入阿里云平台截至写稿的现在,网上有的资源较少,现在我就来介绍一下使用方法 1.登录阿里云官网https://www.aliyu

    2024年02月02日
    浏览(56)
  • Arduino + ESP8266 NodeMcu(超详细)

            从计算机学院入坑工学院,第一次学习Arduino+ESP8266 NodeMcu( CH340驱动版 )开发板的学习         本着小白上道,才发现各种开源项目和一些包在到处割韭菜,记录一下第一次学习安装遇到的坑 (本次记录所有下载链接和我上传在CSDN上的下载项目全部免费提供

    2023年04月08日
    浏览(48)
  • 01-ESP8266 NodeMCU 物联网开发初识

    Author:teacherXue ESP8266 是 Espressif Systems 生产的 Wi-Fi 片上系统 (SoC)。它非常适合物联网和家庭自动化项目,目前有非常高的市场普及率,还有更加高端的同时支持wifi和蓝牙的双核心芯片ESP32,可以在乐鑫官网查看完整的芯片列表。 ESP8266芯片的技术特性 处理器: L106 32 位 RISC 微

    2024年02月11日
    浏览(49)
  • NodeMCU ESP8266硬件开发板的熟悉

    什么是 ESP8266 NodeMCU? ESP8266 是乐鑫开发的一款低成本 Wi-Fi 芯片。 ESP8266可以作为一共独立的设备进行运行,也可以作为一款WiFi模块,通过AT指令进行控制。 例如,您可以将 ESP8266 连接到 单片机,通过串口AT指令实现增加 Wi-Fi 的功能。最实际的应用是将它其用作独立设备。

    2024年02月06日
    浏览(62)
  • 使用arduino IDE开发ESP8266NodeMCU连接DHT11实现温湿度检测并上传onenet官网

            本篇博客记录一下以arduino IDE来开发一下ESP8266NodeMCU,实现用DHT11进行温湿度检测,并且上传新版的onenet官网;我在实现这个小项目的时候,发现网上资料有关onenet的资料都是旧版的,这就有点难受了,本着开源的精神,这篇博客就来弥补一下这方面资料的缺失。  

    2024年02月09日
    浏览(62)
  • NodeMCU ESP8266构建Web Server网页端控制设备

    NodeMCU ESP8266 内部集成了 TCP/IP 协议栈,可以快速构建网络功能,搭建联网应用的硬件平台; ESP8266可以作为WiFi接入点( Station ),这样可以方便连接互联网,通过HTTP协议和云端服务器进行连接,数据处理; ESP8266可以作为热点( Access Point ),这样方便其他设备的接入,可以

    2024年02月05日
    浏览(44)
  • NodeMCU ESP8266 的PWM波形输出教程(图文并茂)

    PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种用于控制电子设备的技术。 PWM的基本原理是周期性地改变信号的脉冲宽度,通常以一个固定的 周期 ( Period )为基准,然后在每个周期内调整脉冲的占空比( Duty ),即高电平和低电平的时间比例。 可以通过调整脉冲信号的

    2024年01月17日
    浏览(54)
  • ESP8266 NodeMCU连接阿里云(从环境搭建到代码实现)

    ESP8266 NodeMCU是一款基于ESP8266芯片的开发板,因其体积小、功耗低、易于编程和扩展等特点,在物联网领域得到了广泛应用。阿里云IoT平台则为开发者提供了稳定可靠的物联网服务,包括设备接入、数据管理、远程控制等功能。本教程将指导你如何将ESP8266 NodeMCU连接到阿里云

    2024年04月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包