文章目录
- 前言
- 原理介绍
- 准备知识
- ADC分辨率
- 输入电压范围
- Analog Pin
- 电路搭建
- 示例代码
- 结论
前言
NodeMCU ESP8266
上有一个引脚可以快速采集模拟信号,并将其转成数字信号。
这就是我们经常听到的模数转换器(ADC
, Analog-to-Digital Converter
),今天我们将介绍如何使用NodeMCU ESP8266
上的ADC进行模拟信号的采集。
原理介绍
什么是ADC
?在真实的世界中,到处都是模拟信号,比如声波,水波,电流,这些都是模拟信号,而在计算机世界里,如果需要处理这些数据,就需要进行量化。
在计算机中是识别0
和1
的数字信号,这里1
是逻辑高电平,0
是逻辑低电平。
对于模拟电信号,这里就需要ADC将模拟信号转换成计算机可以识别的逻辑数字信号。具体如下所示;
ADC的原理比较复杂,由于篇幅原因,这里不予介绍。
准备知识
在使用ADC之前,有一些相关的概念和术语,我们需要提前了解,在NodeMCU ESP8266 12-E
中,会经常提到这些术语:
- ADC 的概念;
- TOUT;
- A0引脚;
- Analog Pin 0;
下面我们会进行相关知识的介绍;
ADC分辨率
ESP8266 中的 ADC 具有 10 位分辨率,因为在微控制器或者计算机系统中,以二进制进行计算,10位相当于2的10次幂,10 位分辨率意味着输出值的范围为 0 到 1023。具体如下所示;
输入电压范围
ESP8266芯片内部的ADC的电压输入范围0V~1V
,不过一般开发板上都集成了电阻进行分压,所以输入范围可以到0~3.3V
。
这一点需要慎重,输入电压过高会直接烧毁芯片。
这里有个简单的办法去反推输入电压的范围。
设置1V
的输入电压,然后读取ADC的值大小;
- 如果ADC的值接近
1023
,则输入电压的范围是0V~1V
; - 如果ADC的值接近
310
,则输入电压的范围是0V~3.3V
;
Analog Pin
Analog Pin
是模拟输入的引脚,在NodeMCU ESP8266 12-E
开发板上可以非常轻松地将这个引脚使用起来,这里已经用插针引出,是A0
引脚,具体如下所示;
电路搭建
在搭建电路之前,我们在这里先列一下所需要的清单,具体如下;
NodeMCU ESP8266
开发板;- 电位器;
- 100Ω电阻,220Ω电阻;
- 面包板;
- 跳线;
因为前面提到过输入电压的范围,保险起见,我们在面包板上用220Ω和100Ω搭建一个分压器,这样保证输入的电压范围在0到1V之间,避免烧毁芯片;
这里大致可以计算出分压的值,具体公式如下所示;
V
O
U
T
=
R
2
R
1
+
R
2
V_{OUT} = \cfrac{R_2}{R_1+R_2}
VOUT=R1+R2R2
示例代码
这里简单写一个代码进行ADC的测试,具体如下所示;
const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0
int sensorValue = 0;
void setup() {
// initialize serial communication at 115200
Serial.begin(115200);
}
void loop() {
// read the analog in value
sensorValue = analogRead(analogInPin);
// print the readings in the Serial Monitor
Serial.print("sensor = ");
Serial.print(sensorValue);
delay(1000);
}
-
首先,开发板的ADC引脚是A0,这个在前面已经介绍过,所以我们定义一个变量保存ADC引脚;
const int analogInPin = A0;
-
输入的电压值会随着电位器旋转而变化,实际上改变的是分压的大小;
int sensorValue = 0;
-
初始化串口,将传感器的数值上传到PC,方便观察实验结果;
void setup() { Serial.begin(115200); }
-
最后在循环里,不断读取ADC的值,并通过串口发送到PC进行打印;
void loop() { // read the analog in value sensorValue = analogRead(analogInPin); // print the readings in the Serial Monitor Serial.print("sensor = "); Serial.print(sensorValue); delay(1000); }
最终的实验结果,先旋转电位器,这时候观察串口上报的ADC值,发现随着电位器的旋转,输入电压的变化,ADC值也发生了变化,具体如下所示;
结论
本文介绍了使用 NodeMCU ESP8266 开发板的 ADC 进行模拟信号采集的教程。简单介绍 ESP8266EX SoC 中 ADC 的一些重要规格、ADC 的输入电压范围、如何使用分压器来扩展输入电压范围、以及 ESP8266 ADC 采集信号的演示,并在串行监视器上打印输出值。