来填(一)中埋下的坑了。今天我们利用Arduino+ESP32实现最简单的AD转化。
所谓AD,其实就是将模拟量转化为数字量的技术。我们今天用自己设计的分压模块来测试这一转化过程。
目录
一、ESP32中的ADC口
二、Arduino实现ESP32的AD转化
1.代码实现
2.硬件检测
三、结果验证
一、ESP32中的ADC口
查询ESP32的datasheet即可知道它的ADC口有哪些。下图1即为手册截图。
图1 ESP32的ADC口分布
或者我们也可以在网站上进行搜索,例如我就找到了一张很棒的图,总结了ESP32的各个GPIO口的功能,如下图2所示。
图2 GPIO口功能(图片来源网络,网址见参考资料)
所以,总结为:ESP32有两组ADC口
ADC1共8个通道:GPIO32 - GPIO39
ADC2共10个通道:GPIO0、GPIO2、GPIO4、GPIO12 - GPIO15、GOIO25 - GPIO27
需要注意的是,ADC2与WIFI功能共用口,所以使用WIFI时避免使用ADC2。
二、Arduino实现ESP32的AD转化
1.代码实现
ESP32在Arduino上实现AD只需一个语句: analogRead();
代码如下:
//ESP32+Arduino 12-bit ADC
//Voltage:0-3.3V
#define ANALOG_PIN_0 4
void setup(){
Serial.begin(115200);
pinMode(ANALOG_PIN_0,INPUT);
}
void loop() {
int analog_value = 0;
analog_value = analogRead(ANALOG_PIN_0);
delay(1000);
Serial.printf("Current Reading on Pin(%d)=%d\n",ANALOG_PIN_0,analog_value);
delay(3000);
}
在这里我们采用了GPIO4作为ADC检测口。利用Serial.printf()函数进行结果的输出(在串口监视器中)。
2.硬件检测
有了AD的代码,还要有相应的硬件作为电压输出对其进行检测。故设计分压模块如下:
图3 分压模块
这其实就是一个滑动变阻器,将其三个引脚接出。我们利用ESP32的3V3引脚作为输入电压,利用该模块进行分压即可得到检测电压。简单电路图如下:
图(a)仿真连接图 |
图(b)自己绘制的连接图 |
图4 分压模块连接图
注意这里一定接地,否则输出错误,一直是0或者4095。
ESP32的ADC精度为12位,故其检测到的值在0-4095()之间。所以,检测我们的AD结果是否正确,只需对当前引脚输出电压与串口输出值对比。若:
串口输出值/4095 ≈ 电压表测得引脚电压/3.3
则AD结果正确。
三、结果验证
我们将开发板与硬件连接,运行代码,观察串口监视器输出。结果如下:
图5 连接与测量
图6 引脚电压检测
图7 监视器输出
监视器平均值约为2444,电压表测得结果为2.08V,故:
二者相对误差为:
该误差可能由ESP32输出电压不稳定等原因引起,有待改进。
如果想要使其输出电压值,只需利用上述数学关系进行修改即可。
参考资料:
1. 图2所示GPIO功能引脚:https://www.cnblogs.com/chengwh/p/15424087.html文章来源:https://www.toymoban.com/news/detail-635286.html
2. ESP32仿真网址:Wokwi - Online Arduino and ESP32 Simulator文章来源地址https://www.toymoban.com/news/detail-635286.html
到了这里,关于Arduino+ESP32-WROOM-32UE(二)-AD电压转化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!