NodeMCU ESP8266 GPIO使用详解(图文并茂)

NodeMCU ESP8266 GPIO使用详解


文章目录

  • NodeMCU ESP8266 GPIO使用详解
    • 前言
    • 什么是GPIO?
    • GPIO 的使用
    • GPIO模式
    • 作为输出
      • 输出高电平
      • 输出低电平
    • 作为输入
      • 上拉输入
      • 下拉输入
      • 读取输入值
    • 总结

前言

前面的文章中我们已经学习了如何点亮一个LED灯,在嵌入式的世界里,这个相当于我们初学一门编程语言,写下的Hello World程序。

为了让LED闪烁,我们需要操作芯片的GPIO,这是硬件最底层的概念,只不过Arduino的编程中,底层的库函数已经为我们做好了硬件的封装,只要调用相应的API接口就对GPIO进行操作。

如果是更纯粹的单片机开发,我们可能还需要读写各种寄存器,通常这些会出现在单片机的裸机代码或者驱动程序中。

我们在嵌入式开发的过程中,也有必要学习和了解GPIO的相关硬件知识和概念,下面我们会进一步学习。

什么是GPIO?

GPIO叫通用输入输出(General Purpose Input Output),它在集成电路中扮演着非常重要的角色;

  • 可以读取输入信号;
  • 可以输出信号;
  • 接收外部的中断信号;

在NodeMCU ESP8266上的GPIO,简单整理了一下,具体如下所示;

Alt text

开发板的引脚名称ESP8266 内部引脚名称
D0GPIO16
D1GPIO5
D2GPIO4
D3GPIO0
D4GPIO2
D5GPIO14
D6GPIO12
D7GPIO13
D8GPIO15
D9/RXGPIO3
D10/TXGPIO1
D11/SD2GPIO9
D12/SD3GPIO10

再复杂一点的话,会有特定时序的信号,比如串口,I2C总线,SPI等等;

GPIO 的使用

GPIO模式通常分为以下几种;

  • 输出模式;
  • 输入模式;
  • 模拟模式;
  • 功能复用模式;

前面小节中有实现用GPIO让LED闪烁的代码,具体如下所示;

void setup() {// put your setup code here, to run once:pinMode(2, OUTPUT);digitalWrite(2,LOW);
}void loop() {// put your main code here, to run repeatedly:delay(2000);digitalWrite(2,LOW);  // 2 表示D2/GPIO4 开发板上连接的是LEDdelay(2000);digitalWrite(2,HIGH);
}

GPIO模式

下面是Arduino.h头文件中定义的几种GPIO模式,基本上是输出和输入两种模式,通常在嵌入式的开发中还有复用模式以及高阻抗的状态,下面我们先介绍输入和输出模式的几种情况,具体定义如下所示;

#define INPUT             0x00
#define INPUT_PULLUP      0x02
#define INPUT_PULLDOWN_16 0x04 // PULLDOWN only possible for pin16
#define OUTPUT            0x01
#define OUTPUT_OPEN_DRAIN 0x03

通常我们要看一下芯片的用户手册;举个例子,看一下相应的GPIO是否支持内部上拉或者内部下拉的输入;上述代码中,我可以使用pinMode函数来指定具体的GPIO的工作模式。

下面我们进一步介绍,会涉及到一些硬件方面的知识,遇到相关不懂的概念,可以先记下来,后面慢慢消化。

作为输出

下面的函数可以让D2接口作为默认输出输出,具体的输出模式需要参考用户手册,一般来说是推挽输出模式;

pinMode(2,OUTPUT);

下面的函数可以让D2接口作为开漏输出模式,具体如下所示;

pinMode(2,OUTPUT_OPEN_DRAIN);

这种输出模式有个特点就是可以输出低电平,但是不能输出高电平,通常要在外部增加上拉电阻。

这里已经设置了输出的模式,如何输出就需要用函数digitalWrite(GPIO, STATE);

  • GPIO:具体的引脚;
  • STATE:具体的输出状态,通常是HIGHLOW

输出高电平

D2硬件接口输出为高电平,具体如下所示;

digitalWrite(2, HIGH);`

输出低电平

D2硬件接口输出为低电平,具体如下所示;

digitalWrite(2, LOW);`

作为输入

D2硬件接口输出设置为输入模式,具体如下所示;

pinMode(2, INPUT);

上拉输入

D2硬件接口设置为上拉输入模式,具体如下所示;

pinMode(2, INPUT_PULLUP);

下拉输入

D2硬件接口设置为下拉输入模式,具体如下所示;

pinMode(2, INPUT_PULLDOWN_16);

读取输入值

读取相应的硬件引脚上的状态需要用到函数digitalRead(),函数原型如下;

extern int digitalRead(uint8_t pin) __attribute__ ((weak, alias("__digitalRead"), nothrow));

D2硬件接口的状态读取到变量 pinState 中,高电平返回1,低电平返回0,具体如下所示;

pinState = digitalRead(2);

总结

本文简单介绍GPIO的一些基本概念,以及NodeMCU ESP8266 基于 Arduino接口的GPIO函数操作。

由于作者能力有限,文章中难免存在错误和纰漏,请大胆指正,如果对于文章中存在疑惑或者问题,欢迎在评论区进行留言。

如果文章帮到了你,请帮忙点赞,三连支持👍👍👍。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D 生成重建007-Fantasia3D和Magic3d两阶段玩转文生3D

3D生成重建3D 生成重建007-Fantasia3D和magic3d 文章目录 0 论文工作1 论文方法1.1 magic3d1.2 Fantasia3D 2 效果2.1 magic3d2.2 fantasia3d 0 论文工作 两篇论文都是两阶段法进行文生3d,其中fantasia3D主要对形状和外表进行解耦,然后先对geometry进行…

UGUI不规则响应区域(例如多个按钮重叠,避免点击错误)

1、UI的默认响应区域是UI元素所在的矩形框线内的区域。这也就意味着,当UI的图形为不规则形状时,点击图形的外部也可能会触发事件。 2、但其实Unity自带了一种不规则区域点击策略。要想使用它,我们首先要将精灵的「Read/Write」属性设置为开启…

虚拟机独立 IP 配置

虚拟机独立 IP 配置 1. 点击虚拟网络编辑器 2. 点击更改设置 3. 查看本地电脑网卡型号并设置虚拟网络编辑器桥接网卡为同型号网卡 4. 设置有限网络信息 5. 点击网络编辑按钮并点击身份 6. 编辑名称并选择MAC地址 7. 配置 IPv4 地址后点击应用即可

计算机毕业设计选什么题目好?springboot 高校就业管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【Java 进阶篇】JavaScript变量详解

JavaScript是一门广泛应用于网页开发的脚本语言,而变量则是JavaScript编程中不可或缺的一部分。在这篇博客中,我们将深入探讨JavaScript变量,包括其定义、命名规则、数据类型、作用域、声明关键字和最佳实践。我们将尽可能以通俗易懂的方式向…

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…

Nacos安装

Nacos安装 1.Windows安装 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载页:https://github.co…

C++的指针简明教程

C的指针简明教程 【C的指针权威文档 英文 https://en.cppreference.com/w/cpp/language/pointer 中文 https://zh.cppreference.com/w/cpp/language/pointer 】 在C中,地址和指针是紧密相关的。地址是一个变量或对象在内存中的位置,而指针是一个变量&…

Excel——对其他工作表和工作簿的引用

一、引用其他sheet页表区域 若希望在公式中引用其他工作表的单元格区域,可以在公式编辑状态下,通过鼠标单击相应的工作表标签,然后选择相应的单元格区域。 例1 跨sheet页引用其他工作表区域 如图1所示的工作表Sheet2为工资表。 在Sheet1表…

高效数据传输:Java通过绑定快速将数据导出至Excel

摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 把数据导出至 Excel 是很常见的需求,而数据的持久化,往往又放在…

入行CSGO游戏搬砖项目前,这些问题一定要了解

最近咨询的人也不少,针对大家平时问到的问题,在这里做一个统一汇总和解答。 1、什么是国外steam游戏装备汇率差项目? 通俗易懂的理解就是,从国外steam游戏平台购买装备,再挂到国内网易buff平台上进行售卖。充值汇率差…

接口测试总结及其用例设计方法

接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍为什…