0°

(三)ESPlorer系列:NodeMCU ADC使用方法

介绍

模数转换器(ADC)用于将模拟信号转换为数字形式。ESP8266内置10位ADC,只有一个ADC通道,即它只有一个ADC输入引脚,用于读取外部器件/传感器的模拟电压。

NodeMCU DevKit上的ADC引脚

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

NodeMCU上的ADC引脚

ESP8266上的ADC通道与电池电压复用。因此,我们可以将其设置为测量板载电源电压或外部模拟电压。读取外部模拟电压时,ADC引脚的输入电压范围为0-1.0V。

固件的“esp_init_data_default.bin”(0-127字节)的第107个字节中提供了ADC模式的设置,即是否正在测量系统电压或外部电压。

esp_init_data_default.bin(0 – 127字节)的第107个字节是“vdd33_const”。它必须设置为0xFF,即255才能读取系统电压,即ESP8266的VDD引脚上的电压。

要读取ADC引脚上的外部电压,必须将其设置为ESP8266的VDD引脚上的电源电压。ESP8266的工作电源电压范围为1.8V至3.6V,“vdd33_const”的单位为0.1V,因此“vdd33_const”的取值范围为18至36。

请注意,下图所示的NodeMCU Dev Kit具有板载寄存器分配器网络,可从3.3V向ESP8266的ADC引脚提供1.0V电压。因此,我们可以将0-3.3V范围用于NodeMCU Dev Kit的ADC输入电压。由于10位分辨率,它将为Dev Kit上的ADC输入电压0-3.3V提供0-1023的值范围。

adc.force_init_mode()(如下所述)功能用于选择模式,即ADC读取系统电压或ADC读取外部电压。

如果模式改变,则必须重新启动系统(例如,使用电源循环,复位按钮,node.restart())。

NodeMCU ADC功能

我们来看看用于访问NodeMCU Dev Kit上的ADC的ADC函数。

adc.force_init_mode()

检查并在必要时重新配置ESP init数据块中的ADC模式设置。

句法

adc.force_init_mode(mode_value)

参数

mode_value或者是adc.INIT_ADC于外部电压或adc.INIT_VDD33在船上系统电压。

返回

如果函数必须更改模式,则返回true;如果已配置模式,则返回fals。在真正的返回时,ESP需要重新启动才能使更改生效。

if adc.force_init_mode(adc.INIT_VDD33)
then
  node.restart()
  return
end

adc.read()

该功能读取ADC引脚上的模拟电压。

句法

adc.read(channel)

参数

ADC channel只有1,ESP8266总是0

返回:采样数字值。

请注意,如果ESP8266已配置为使用ADC读取系统电压,则此功能将始终返回65535.这是硬件和/或SDK限制。

ADC value = adc.read(0)

adc.readvdd33()

该功能读取系统电压。

句法

adc.readvdd33()

参数:无

返回:以毫伏(数字)返回系统电压

如果ESP8266已配置为使用ADC对引脚上的外部电压进行采样,则此功能将始终返回65535.这是硬件和/或SDK限制。

print("System voltage (mV):", adc.readvdd33(0))

让我们写一个Lua脚本来读取NodeMCU的ADC引脚上的模拟电压。这里我们使用电位器在Dev Kit的ADC引脚上提供0-3.3V的可变电压。连接如下图所示。

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

NodeMCU ADC

现在编写Lua脚本来读取ADC通道并在ESPlorer的串行监视器上打印数字值。

用于读取外部电压的Lua脚本

print("ADC value:", adc.read(0)) -- print external voltage

输出窗口

下图显示了ESPlorer IDE的串行监视器上的输出

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

ESPlorer的串行输出窗口

用于读取系统电压的Lua脚本

print("System voltage (mV):", adc.readvdd33(0)) -- print system voltage

输出窗口

下图显示了ESPlorer IDE的串行监视器上的输出

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

系统电压(电源电压)值稍微偏离其实际值。关于系统电压读数的这个问题在ESP8266 github页面的#721给出。

根据ESP8266的数据表,TOUT(ESP8266的ADC引脚)引脚必须悬空(浮动),同时通过ADC测量电源电压。但是在NodeMCU开发套件/模块上,为了支持外部电压范围(0-3.3V),它连接到电阻分压器网络(100Kohm和220Kohm),如下图所示。

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

NodeMCU ADC分压器网络

现在,如果我们移除电阻分压器n / w和ADC引脚(TOUT)悬空,那么我们得到的结果如下面的系统电压读数的输出窗口图像所示。即3521 mV。

(三)ESPlorer系列:带有ESPlorer IDE的NodeMCU ADC

本教程完整代码下载:

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论