请注意
esp8266的ADC引脚受wifi模块影响,会导致不准确,具体请查看这里:https://github.com/esp8266/Arduino/issues/2070
简单说一下解决方案:
①如果不是频繁的读取数据,可以在wifi连接前读取数据然后存储到缓存;
②或者在读取数据前将wifi关闭,然后再打开wifi;
③如果有足够的引脚,可以使用外部ADC
正文开始
该模块5v时输出1v,因esp8266 ADC引脚(A0)支持电压范围是0v-1v,所以该方案仅支持0-5v电压检测
接线:
- 接 esp8266GND
+ 可不接
S 接 ADC esp8266 为 A0
VCC 被检测直流电+
GND 被检测直流电-
#include <Wire.h>const int adcPin = A0; // ADC引脚float calculateVoltage(int adcReading) {// ADC最小读数int minADC = 12;// ADC最大读数int maxADC = 338;// 338 = 5.045v最大值float maxADCVlotage = 5.045;float normalizedReading = static_cast<float>(adcReading - minADC) / (maxADC - minADC);float voltage = normalizedReading * maxADCVlotage;return voltage;
}void setup() {Serial.begin(115200); // 初始化串口通信
}void loop() {// 读取ADC值int adcReading = analogRead(adcPin);// 计算电压float voltage = calculateVoltage(adcReading);// 输出结果Serial.print("ADC读数: ");Serial.print(adcReading);Serial.print("\t电压: ");Serial.print(voltage);Serial.println("V");delay(1000); // 延时1秒
}
如果您有更好的方案,请评论交流。