NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)


1 前言

ESP8266如何检测外部信号的输入,通常可以检测到TTL电平的高电平和低电平。

TTL(Transistor-Transistor Logic)电平是一种常用的数字电平标准,通常用于数字电路和逻辑电路中。TTL电平具有以下特征和定义:

  • 输出状态
    • L:低于 0.8V
    • H:高于 2.4V
  • 输入状态:
    • L:低于 1.2V
    • H:高于 2.0V

下面我们需要通过构造外围的硬件电路来做外部信号输入的测试。

嵌入式开发中,读取按键输入通常涉及到与硬件交互,具体的实现方式取决于我们使用的嵌入式平台和硬件,通常我们需要注意的是;

  1. 了解硬件接口: 查阅嵌入式系统的文档,了解按键连接到哪些引脚,以及硬件产生的信号是怎样的。这可能涉及到GPIO(通用输入/输出)引脚、中断引脚等。

  2. 配置GPIO引脚: 如果按键连接到GPIO引脚,你需要配置这些引脚为输入模式。这通常需要设置相应的寄存器,具体的方法取决于你使用的微控制器或处理器。

  3. 轮询或中断处理: 有两种主要的按键读取方法:轮询和中断。在轮询中,你会周期性地检查按键状态,而中断则是当按键状态发生变化时触发相应的中断处理函数。

    • 轮询方法: 在主循环中,不断读取按键的状态。例如,使用一个函数检查GPIO引脚的状态,如果检测到按键按下,则执行相应的操作。
    // 伪代码,具体实现取决于硬件和编程语言
    while (1) {
         
        if (read_button_state() == BUTTON_PRESSED) {
         
            // 处理按键按下的操作
        }
        // 可以添加延时以避免过于频繁地检查
        delay(100);
    }
    
    • 中断方法: 配置相应的中断,并在中断服务程序中处理按键事件。
    // 伪代码,具体实现取决于硬件和编程语言
    void button_interrupt_handler() {
         
        // 处理按键事件
    }
    
    int main() {
         
        // 配置GPIO引脚和中断
        configure_button_interrupt();
    
        while (1) {
         
            // 主循环中可以执行其他任务
        }
    }
    
  4. 防抖动处理: 在读取按键输入时,通常需要考虑防抖动。防抖动是指在按键被按下或释放时,由于机械原因可能导致的信号不稳定性。可以通过在软件中添加延时或使用硬件滤波器来处理防抖动。

注意,以上代码是伪代码,实际的实现可能会有所不同,arduino 在底层做了封装,可以直接使用API进行读写,下面我们进一步介绍;

2 常用接口

pinMode

这里我们需要将D2引脚作为输入,具体接口使用如下所示;

pinMode(2, INPUT); 

digitalRead

这里需要使用接口digitalRead来获取GPIO输入的信号状态,可以读取高电平和低电平,

int buttonState = 0;            // 存储按钮状态,0表示未按下,1表示按下
buttonState = digitalRead(2);   // 读取按钮状态

3 项目示例

为了更加直观地展示检测到外部按键的信号输入情况,这里可以搭配LED作为检测输入信号的指示灯,具体流程如下所示;

  • 按键按下,LED灯亮起;
  • 按键松开,LED灯熄灭;

3.1 原理图

通常我们可以使用外部按键作为信号输入的元器件,这里接一个上拉电阻之后连接一个按键,我们可以通过面包板来构建电路;
这里所需要的电子元器件如下;

  • NodeMCU ESP8266 开发板;
  • 直插LED灯;
  • 330欧姆电阻,10K欧姆电阻;
  • 直插按键;
  • 面包板和跳线;

具体电路图如下所示;

3.2 示例代码

这段代码会将D2配置为输入引脚,D4配置为输出引脚。当按下按钮时(D2引脚为高电平),LED(D4引脚)会亮起,当释放按钮时(D2引脚为低电平),LED会熄灭。

const int buttonPin = D2;
const int ledPin = D4;

void setup() {
   
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
   
  int buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
   
    digitalWrite(ledPin, HIGH);
  } else {
   
    digitalWrite(ledPin, LOW);
  }
}

4 结论

本文简单介绍了NodeMCU ESP8266获取外部信号的方法,并给出相应的实验,通过按键控制LED灯的亮和灭。

相关推荐

  1. QT写Windows按键输出外挂

    2023-12-12 07:30:02       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 07:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 07:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 07:30:02       82 阅读
  4. Python语言-面向对象

    2023-12-12 07:30:02       91 阅读

热门阅读

  1. Docker与K8s的区别

    2023-12-12 07:30:02       69 阅读
  2. x的平方根算法(leetcode第69题)

    2023-12-12 07:30:02       63 阅读
  3. Flask存储在内存中的密钥被读取

    2023-12-12 07:30:02       57 阅读
  4. MATLAB 2021b 安装教程

    2023-12-12 07:30:02       78 阅读
  5. 微服务学习二

    2023-12-12 07:30:02       72 阅读
  6. 洛谷 P8628 [蓝桥杯 2015 国 AC] 穿越雷区

    2023-12-12 07:30:02       70 阅读
  7. 【Fiddler】IDEA配置Fiddler

    2023-12-12 07:30:02       52 阅读
  8. 面试经典150题(14)

    2023-12-12 07:30:02       62 阅读