NodeMCU ESP8266 外设的 Arduino API 接口介绍

news2024/12/28 3:28:03

NodeMCU ESP8266 外设的 Arduino API 接口介绍

文章目录

  • NodeMCU ESP8266 外设的 Arduino API 接口介绍
  • 前言
  • 模块
    • 中断
    • 数字IO
    • 模拟输入
    • 模拟输出
    • 延时
    • 串口
  • 总结

前言

Arduino在硬件上做了相应的封装,新的硬件需要兼容Arduino的接口。比如NodeMCU ESP8266的底层硬件做一次封装,对用户需要开放出来规定好的接口。

下面Arduino的官方接口;

/**
	地址如下:
*/
https://www.arduino.cc/reference/en/

在这里插入图片描述

本文简单介绍一下ESP8266 Arduino Core库,相应拆分为几个常用的模块;

  • Interrupts:中断;
  • Digital IO :数字IO;
  • Analog input:模拟输入;
  • Analog output:模拟输出;
  • Timing and delays:定时和延迟;
  • Serial:串口;

下面我们进一步介绍。

模块

中断

ESP8266上使用中断,但必须谨慎使用,并且有几个限制:

  • 中断回调函数必须位于 IRAM 中,因为它们发生时闪存可能正在执行其他操作。IRAM_ATTR通过在函数定义上添加属性来完成此操作。如果此属性不存在,则草图在尝试执行此操作时将会崩溃 attachInterrupt并显示错误消息。
IRAM_ATTR void gpio_change_handler(void *data) {...
  • 中断不得调用delay()yield(),或调用任何内部使用delay()的例程yield()

  • 中断中长时间运行(>1ms)的任务会导致不稳定或崩溃。

  • 如果中断被长时间运行的中断阻止,WiFi 和核心的其他部分可能会变得不稳定。

  • 堆 API 操作可能很危险,应在中断中避免。

  • 应尽量减少对 的调用malloc,因为如果内存碎片,它们可能需要很长的运行时间。

  • C++ 的 newdelete运算符绝不能在 ISR 中使用。他们的调用路径不在 IRAM 中。

数字IO

Arduino 中的引脚编号直接对应于 ESP8266 GPIO 引脚编号。
pinModedigitalRead、 和digitalWrite函数可以工作;

如果要读取 GPIO2,就可以调用digitalRead(2);数字引脚 0—15 可以是INPUTOUTPUT、 或INPUT_PULLUP

引脚 16 可以是INPUT,OUTPUTINPUT_PULLDOWN_16

启动时,引脚配置为INPUT。

引脚还可以用于其他功能,例如串行、I2C、SPI。

这些功能通常由相应的库激活。下图显示了流行的 ESP-12 模块的引脚映射。


数字引脚 6-11 未在此图中显示,因为它们用于连接大多数模块上的闪存芯片。尝试将这些引脚用作 IO 可能会导致程序崩溃。

请注意,某些板和模块(ESP-12ED、NodeMCU 1.0)也会断开引脚 9 和 11。如果闪存芯片工作在 DIO 模式(与默认的 QIO 模式相反),则这些引脚可用作 IO。

attachInterrupt通过, 函数支持引脚中断detachInterrupt。中断可以附加到除 GPIO16 之外的任何 GPIO 引脚。支持标准 Arduino 中断类型: CHANGE、RISING、FALLING。ISR 需要位于 IRAM_ATTR函数定义之前。

模拟输入

ESP8266 有一个可供用户使用的 ADC 通道,即模数转换器,将模拟信号转换成数字信号。
具体的作用如下;

  • 可用于读取 ADC 引脚的电压,或读取模块电源电压 (VCC);
  • 要读取施加到 ADC 引脚的外部电压,请使用analogRead(A0)

ESP8266 的输入电压范围为 0~1.0V,但有些开发板板可能会在硬件上增加分压电路,从而增大测量范围。

为了安全起见,可以测试<1.0V的输入电压;

例如,因为10 bit精度的ADC,范围是0~1024,1024是2的10次幂,可以计算读取数值的大小反推输入电压的量程;

  • 那么测量0.5V电压,ADC会读取到 512 左右的值,则最大电压很可能为 1.0V,而 3.3V 可能会损害 ESP8266;

  • 如果测量0.5V电压,大约读取到 150 左右的值,则表明最大可以测量电压为 3.3V;

要读取VCC电压,使用ESP.getVcc()ADC引脚必须保持断开状态。

此外,必须将以下行添加到主程序中:

ADC_MODE(ADC_VCC);

注意:
调用analogRead()过于频繁会导致 WiFi 停止工作。
当 WiFi 运行时,analogRead()调用的有效结果可能会被缓存至少 5 毫秒。

模拟输出

analogWrite(pin, value)在给定引脚上启用软件 PWM。PWM 可用于引脚 0 至 16。调用以禁用引脚上的 PWM。

  • analogWrite(pin, value) :value范围可能是 0 到 255(这是 Arduino 的默认值);
  • analogWriteRange(new_range):可以通过调用或 来 更改 PWM 范围,new_range可能是从 15~65535
  • analogWriteResolution(bits):或bits可能是从 4~16
  • analogWriteMode(pin, value, openDrain):OUTPUT_OPEN_DRAINOUTPUT
  • analogWriteFreq(new_frequency):PWM 频率默认为 1K 赫兹,这个函数可以更改频率。有效值从 100Hz 到 40000Hz。

注意:如果没有硬件PWM,PWM输出是通过软件实现的。1 个 40KHz 的 PWM 输出,CPU 的负载已经相当大了。
使用的 PWM 输出越多,其频率越高,就越接近 CPU 限制,导致可用于主函数执行的 CPU 资源就越少。

延时

  • millis()micros()分别返回复位后经过的毫秒数和微秒数。
  • delay(ms)将系统延时给定的毫秒数,但是允许 WiFiTCP/IP 任务后台运行。
  • delayMicroseconds(us)将系统暂停给定的微秒数。

注意:当WiFi 连接时,除了主程序之外,芯片上还需要运行很多代码。
如果我们的程序中某处有一个循环,在不调用delay的情况下,需要花费大量时间(>50ms),我们可以考虑调用delay函数,以保证 WiFi 堆栈可以顺利运行。

  • delay(0)yield()函数等效 。

  • delayMicroseconds 该函数不会让出其他任务,因此不建议将其用于延迟超过 20 毫秒的情况。

串口

ESP8266 中 Serial对象的工作方式与常规 Arduino 上的工作方式非常相似。

  • 额外硬件 FIFO(128 字节用于 TX 和 RX);
  • 额外的可定制 256 字节 RX 缓冲区;

我们可以更改该软件缓冲区的大小。

setRxBufferSize(size_t size)函数可以设置我们所需的RX缓冲区大小;

在更高的接收速度下建议使用更大的缓冲区空间;

通常串口的使用如下的程序;

// Set Baud rate to 57600
Serial.begin(57600);

// Get current baud rate
int br = Serial.baudRate();

// Will print "Serial is 57600 bps"
Serial.printf("Serial is %d bps", br);

这个后面我们还会详细介绍。

总结

本文介绍了NodeMCU ESP8266外设的常用API接口,在这里可以简单了解一下,后面章节会深入进行介绍。

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

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

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

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

相关文章

【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】

GUI系列操作 1.枚举菜单实现文件1&#xff1a;Assets/MyScript/Test1.cs代码如下&#xff1a; 文件2&#xff1a;Assets/MyScript/Editor/Test1Editor.cs代码如下&#xff1a; 测试一下新建一个场景&#xff0c;新建一个Empty 节点&#xff0c;用来测试枚举组件将文件1&#xf…

百面机器学习书刊纠错

百面机器学习书刊纠错 P243 LSTM内部结构图 2023-10-7 输入门的输出 和 candidate的输出 进行按元素乘积之后 要和 遗忘门*上一层的cell state之积进行相加。

格雷希尔针对汽车空调高压管异型管口快速密封的G72R高压连接器

汽车散热是汽车热管理的重要部件&#xff0c;不管是燃油车还是新能源车&#xff0c;散热都是必不可少的零部件&#xff0c;从散热水箱、到车用空调冷凝器、蒸发器、空调高压管件等&#xff0c;由于位置和固定方式等影响&#xff0c;虽然管件直径比较标准&#xff0c;但接口部分…

Python3操作文件系列(一):判断文件|目录是否存在三种方式

Python3操作文件系列(一):判断文件|目录是否存在三种方式 Python3操作文件系列(二):文件数据读写|二进制数据读写 Python3数据文件读取与写入 一: 文件操作认知: 提升认知&#xff1a;Python判断文件是否存在的三种方法1.使用os模块2.判断文件是否可做读写操作3.使用Try语句…

二、Excel VBA 简单使用

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…

学习笔记|ADC|NTC原理|测温程序|STC32G单片机视频开发教程(冲哥)|第十九集:ADC应用之NTC

文章目录 1.NTC的原理开发板上的NTC 2.NTC的测温程序编写3.实战小练总结课后练习 1.NTC的原理 NTC&#xff08;Negative Temperature Coefficient&#xff09;是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌…

经典算法-----01背包问题(动态规划)

目录 前言 01背包问题 问题描述 ​编辑 动态规划 基本概念 怎么理解动态规划? 解决01背包问题 代码实现 前言 今天我们学习一种新的算法---动态规划&#xff0c;这种算法思想是属于枚举的一种&#xff0c;下面我就通过01背包问题来说明这种算法的解决思路。 01背包问…

GEE17: 基于Theil-Sen Median斜率估计和Mann-Kendall趋势分析方法分析四川省2022年NDVI变化情况

Theil-Sen Median Mann-Kendall 1. Theil-Sen Median Mann-Kendall 原理1.1 Theil-Sen Median1.2 Mann-Kendall 2. GEE code 1. Theil-Sen Median Mann-Kendall 原理 1.1 Theil-Sen Median Theil-Sen Median方法又称为Sen斜率估计&#xff0c;是一种稳健的非参数统计的趋势…

LeakyReLU激活函数

nn.LeakyReLU 是PyTorch中的Leaky Rectified Linear Unit&#xff08;ReLU&#xff09;激活函数的实现。Leaky ReLU是一种修正线性单元&#xff0c;它在非负数部分保持线性&#xff0c;而在负数部分引入一个小的斜率&#xff08;通常是一个小的正数&#xff09;&#xff0c;以防…

JVM(八股文)

目录 一、JVM简介 二、JVM中的内存区域划分 三、JVM加载 1.类加载 1.1 加载 1.2 验证 1.3 准备 1.4 解析 1.5 初始 1.6 总结 2.双亲委派模型 四、JVM 垃圾回收&#xff08;GC&#xff09; 1.确认垃圾 1.1 引用计数 1.2 可达性分析&#xff08;Java 采用的方案&a…

BI系统有哪些?新手怎么选?

从本土化服务以及契合中国企业使用习惯等方面来看&#xff0c;建议采用国产BI系统。国内比较知名的BI工具有很多&#xff0c;比如亿信华辰BI(亿信ABI)、思迈特BI(Smartbi)、奥威BI(OurwayBISpeedBI)、帆软BI(FineBI)等。 这些BI系统在操作上都比较简单&#xff0c;比如像奥威B…

Vue中...(扩展运算符)的作用

对数组和对象而言&#xff0c;就是将运算符后面的变量里东西每一项拆下来。 &#xff08;一&#xff09;操作数组 // 1.把数组中的元素孤立起来 let iArray [1, 2, 3]; console.log(...iArray); // 打印结果 1 2 3// 2.在数组中添加元素 let iArray [1, 2, 3]; console.log…

拉取公司前端项目本地运行结果Bug频出,看我是如何一步一步成功解决的

文章目录 前端项目运行Bug记录问题背景npm install 报错问题1&#xff1a;npm install 报错ERESOLVE could not resolve问题2&#xff1a;npm install 报错 Cannot read properties of null问题3&#xff1a;node安装了npm没安装问题4&#xff1a;npm和node不兼容问题5&#xf…

新文件覆盖旧文件还能复原吗,3个方法快速恢复覆盖文件!

iPhone在解压压缩文件时&#xff0c;不小心将同名文件进行了覆盖&#xff0c;怎么撤回&#xff1f; 在使用U盘转移文档时&#xff0c;意外将同名文档进行了替换&#xff0c;怎么恢复&#xff1f; 当误将重名文件进行了替换&#xff0c;如何找回这些被覆盖的旧文件&#xff1f;…

Vue中的数据绑定

一、v-bind单向数据绑定 单向数据绑定中&#xff0c;数据只能由data流向页面。 v-bind:属性名"data变量" 或简写为 :属性名"data变量" 我们修改data中的iptvalue值&#xff0c;页面input框中的value值改变。 而我们修改input框中的value值&#xff0…

【C++初阶(二)C——C++过渡必看】

文章目录 前言一、C关键字&#x1f34e;二、命名空间&#x1f345;1.命名空间的定义&#x1f352;2.命名空间使用&#x1f353; 三、C输入&输出&#x1f351;四、缺省参数&#x1fad1;1. 缺省参数概念&#x1f349;2. 缺省参数分类&#x1f95d; 五、函数重载&#x1f965…

【Vue面试题五】说说你对Vue生命周期的理解?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;请描述下你对vue生命周期…

八、互联网技术——物联网

文章目录 一、智慧物联案例分析二、M2M技术三、数据保护综合案例分析一、智慧物联案例分析 智能物流是一种典型的物联网应用。一个物流仓储管理系统架构如下图所示: [问题1] 图中的三层功能:仓库物品识别、网络接入、物流管理中心,分别可对应到物联网基本架构中的哪一层? …

金九银十,刷完这个笔记,17K不能再少了....

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿到理想…

MybatisPlus01

MybatisPlus01 1.MybatisPlus初体验 1.1首先要引入MybatisPlus的依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency>1.2定义Mapp…