【ESP32最全学习笔记(基础篇)——7.ESP32 ADC – 使用 Arduino IDE 读取模拟值】

关于本教程:

ESP32 基础篇                                

1.ESP32简介                                                                

2.ESP32 Arduino 集成开发环境

3.VS 代码和 PlatformIO

4.ESP32 引脚

5.ESP32 输入输出

6.ESP32 脉宽调制

7.ESP32 模拟输入 ☑

8.ESP32 中断定时器

9.ESP32 深度睡眠

ESP32 协议篇

ESP32 网络服务器

ESP32 LoRa

ESP32 BLE

ESP32 BLE 客户端-服务器

ESP32 蓝牙

ESP32 MQTT

ESP32 ESP-NOW

ESP32 Wi-Fi

ESP32 WebSocket

ESP32 ESP-MESH

ESP32 邮箱

ESP32 短信

ESP32 HTTP 获取 POST

HTTP GET Web APIs

HTTP POST Web APIs

 ESP32 服务器篇

持续更新,关注博主不迷路!!!

 ESP32 传感器模块篇

持续更新,关注博主不迷路!!!

ESP32 终极实战篇

百余项ESP32实战项目,敬请关注!!!

本文介绍如何使用 Arduino IDE 通过 ESP32 读取模拟输入。模拟读数对于从可变电阻器(如电位器或模拟传感器)读取值很有用。

模拟输入 (ADC)

使用 ESP32 读取模拟值意味着您可以测量 0 V 到 3.3 V 之间的变化电压电平。

然后将测得的电压分配给一个介于 0 和 4095 之间的值,其中 0 V 对应于 0,3.3 V 对应于 4095。任何介于 0 V 和 3.3 V 之间的电压将被赋予介于两者之间的相应值。

ADC 是非线性的

理想情况下,您会期望在使用 ESP32 ADC 引脚时具有线性行为。但是,这不会发生。您将获得如下表所示的行为:

这种行为意味着您的 ESP32 无法区分 3.3 V 和 3.2 V。两种电压的值相同:4095。

对于非常低的电压值也会发生同样的情况:对于 0 V 和 0.1 V,您将获得相同的值:0。使用 ESP32 ADC 引脚时需要牢记这一点。

analogRead() 函数

使用 Arduino IDE 通过 ESP32 读取模拟输入就像使用 模拟读取()功能。它接受您要读取的 GPIO 作为参数:

 analogRead(GPIO);

ESP32 支持 18 个不同通道的测量。DEVKIT V1 DOIT板(具有 30 个 GPIO 的版本)中只有 15 个可用。

抓住你的 ESP32 板引脚排列并找到 ADC 引脚。这些在下图中用红色边框突出显示。

了解有关 ESP32 GPIO 的更多信息:ESP32 引脚参考。

这些模拟输入引脚具有 12 位分辨率。这意味着当您读取模拟输入时,其范围可能从 0 到 4095 不等。

注意:使用 Wi-Fi 时不能使用 ADC2 引脚。因此,如果您使用 Wi-Fi 并且无法从 ADC2 GPIO 获取值,您可以考虑改用 ADC1 GPIO,这应该可以解决您的问题。

还有其他更高级的功能可与 ADC 引脚一起使用,这些功能可用于其他项目。

  • analogReadResolution(分辨率):设置样本位和分辨率。它可以是 9 (0 – 511) 和 12 位 (0 – 4095) 之间的值。默认为 12 位分辨率。
  • 模拟设置宽度(宽度):设置样本位和分辨率。它可以是 9 (0 – 511) 和 12 位 (0 – 4095) 之间的值。默认为 12 位分辨率。
  • analogSetCycles(周期):设置每个样本的循环数。默认值为 8。范围:1 到 255。
  • 模拟集样本(样本):设置范围内的样本数。默认为 1 个样本。有增加敏感度的效果。
  • analogSetClockDiv(衰减): 设置 ADC 时钟的分频器。默认值为 1。范围:1 到 255。
  • analogSetAttenuation(衰减):设置所有 ADC 引脚的输入衰减。默认是ADC_11db. 接受的值:
    • ADC_0db:不设置衰减。ADC 可以测量高达约 800 mV(1V 输入 = 1088 的 ADC 读数)。
    • ADC_2_5db:ADC 的输入电压将被衰减,从而将测量范围扩展至约 1100 毫伏。(1V 输入 = ADC 读数 3722)。
    • ADC_6db:ADC 的输入电压将被衰减,从而将测量范围扩展至约 1350 毫伏。(1V 输入 = ADC 读数 3033)。
    • ADC_11db:ADC 的输入电压将被衰减,从而将测量范围扩展至约 2600 毫伏。(1V 输入 = 1575 的 ADC 读数)。
  • analogSetPinAttenuation(引脚,衰减):设置指定引脚的输入衰减。默认是ADC_11db. 衰减值与之前的函数相同。
  • adcAttachPin(引脚):将一个引脚连接到 ADC(也清除任何其他可能打开的模拟模式)。返回 TRUE 或 FALSE 结果。
  • adcStart(引脚),adcBusy(引脚)结果adcEnd(引脚):在附加引脚的总线上启动 ADC 转换。检查引脚的 ADC 总线上的转换当前是否正在运行(返回 TRUE 或 FALSE)。获取转换结果:返回 16 位整数。

使用 ESP32 从电位器读取模拟值

为了了解一切如何联系在一起,我们将举一个简单的例子来从电位器读取模拟值。

对于此示例,您需要以下部分:

ESP32 DOIT DEVKIT V1
电位器
面包板
跳线

原理图

将电位器连接到 ESP32。电位器中间引脚应连接到GPIO 34。您可以使用以下原理图作为参考。

代码

我们将使用 Arduino IDE 对 ESP32 进行编程,因此请确保在继续之前安装了 ESP32 插件:

打开您的 Arduino IDE 并复制以下代码。

// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) 
const int potPin = 34;

// variable for storing the potentiometer value
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // Reading potentiometer value
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

此代码只是从电位器读取值并在串行监视器中打印这些值。

在代码中,您首先定义电位器所连接的 GPIO。在这个例子中,GPIO 34.

const int potPin = 34;

在里面setup(), 以 115200 的波特率初始化串行通信。

Serial.begin(115200);

在里面loop(), 使用模拟读取()函数从读取模拟输入

potValue = analogRead(potPin);

最后,打印从串行监视器中的电位器读取的值。

Serial.println(potValue);

上传提供给您的 ESP32 的代码。确保在“工具”菜单中选择了正确的电路板和 COM 端口。

测试示例

上传代码并按下 ESP32 复位按钮后,以 115200 的波特率打开串口监视器。旋转电位器并查看值的变化。

您将获得的最大值为 4095,最小值为 0。

 总结

        在本文中,您学习了如何使用 ESP32 和 Arduino IDE 读取模拟输入。总之:

  • ESP32 DEVKIT V1 DOIT 开发板(30 引脚版本)有 15 个 ADC 引脚,可用于读取模拟输入。
  • 这些引脚的分辨率为 12 位,这意味着您可以获得 0 到 4095 之间的值。
  • 要在 Arduino IDE 中读取一个值,您只需使用模拟读取()功能。
  • ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要牢记这一点。

猜你喜欢

转载自blog.csdn.net/m0_46509684/article/details/129112612