代码配置参考ESP-IDF例程
这里会配置分辨率和衰减因子
基准电压是1100mv,衰减因子相当于将输入电压按倍数降低
选一个合适的,然后就可以使用这个函数获取原始数据:
当然,获取到的原始数据不能直接使用,需要一个公式转换,这是手册里写的:
手册里写得不详细,看不懂;还有一个无脑的办法:
调用这个函数,把刚才得到的adc原始数据传进去,在voltage_mv中就得到了测量的模拟电压数据,不过肯定不是百分百准确,多少有点误差。
贴一个代码:
/**
* @fn 获取当前电池的电压
*
* @param void
*
* @return 返回当前电池的电压,单位mv
*/
uint32_t fn_read_battery(void)
{
int adc_battery = 0;
int voltage_mv = 0;
int i = 0;
int out_raw = 0;
for(i = 0; i < NO_OF_SAMPLES; i++){
out_raw = 0;
if(adc_oneshot_read(adc1_handle, EXAMPLE_ADC1_CHAN1, &out_raw) == ESP_OK){
// ESP_LOGI(TAG, "read volt:%d", out_raw);
adc_battery += out_raw;
}else{
break;
}
}
if(i){
adc_battery /= i;
}
// ESP_LOGI(TAG, "ADC%d Channel[%d] Raw Data: %d", ADC_UNIT_1 + 1, EXAMPLE_ADC1_CHAN1, adc_battery);
if (do_calibration1_chan1) {
adc_cali_raw_to_voltage(adc1_cali_chan1_handle, adc_battery, &voltage_mv);//在调用完这个函数后就自动转换成模拟电压了,不需要再转
// ESP_LOGI(TAG, "ADC%d Channel[%d] Raw Data: %d, Cali Voltage: %d mV", ADC_UNIT_1 + 1, EXAMPLE_ADC1_CHAN1, adc_battery, voltage_mv);
}
return voltage_mv;
}