Unit VMeter 组件通过 I2C 读取电压测量数据。
| 项目 | 信息 |
|---|---|
| 产品名称 | Unit VMeter |
| SKU | U087 |
| 主要功能 | 直流电压测量 |
| 通信接口 | I2C |
| 默认 I2C 地址 | ADS1115:0x49;EEPROM:0x53 |
| ESPHome 组件 | ads1115、template |
| ESPHome 版本要求 | / |
Unit VMeter 使用 ESPHome 官方 ADS1115 传感器读取差分电压,并结合 I2C Device 读取 EEPROM 校准参数,最后通过 Template 传感器换算输入电压。
Unit VMeter 配置范例:
ads1115:
- address: 0x49
sensor:
- platform: ads1115
multiplexer: "A0_A1"
gain: 1.024
sample_rate: 128
name: "Unit VMeter A0_A1 Ref"
id: diff
update_interval: 10sAIN0 和 AIN1 两个通道,所以最多可以使用 3 个 multiplexer: "A0_A1"、"A0_GND"、"A1_GND";而此处测量电压,仅用到了 A0_A1 参与电压计算。Template Sensor 创建电压实体。以下 sensor 条目应与前面的 ADS1115 条目合并到同一个列表中:i2c_device:
id: eeprom
address: 0x53
sensor:
- platform: template
name: "Input Voltage"
id: input_volt
unit_of_measurement: "V"
icon: "mdi:flash"
accuracy_decimals: 2
update_interval: 10s
lambda: |-
float d = id(diff).state;
if (isnan(d)) return NAN;
const float PRESSURE_COEFF = 0.015918958f;
// 修改 gain 后,请同步修改 EEPROM_REG
const uint8_t EEPROM_REG = 0xE8;
uint8_t calib[8];
uint16_t hope, actual;
// 读取 EEPROM
if (id(eeprom).read_register(EEPROM_REG, calib, 8) != i2c::ERROR_OK) {
ESP_LOGD("vmeter.sensor", "Failed to read from EEPROM..");
return NAN;
}
uint8_t xor_result = 0x00;
for (uint8_t i = 0; i < 5; i++) {
xor_result ^= calib[i];
}
if (xor_result != calib[5]) {
return NAN;
}
hope = (calib[1] << 8) | calib[2];
actual = (calib[3] << 8) | calib[4];
float calibration_ratio = (float) hope / actual;
ESP_LOGD("vmeter.sensor", "Factory calibration factor: %f", calibration_ratio);
float vin = -d / PRESSURE_COEFF;
vin = vin * calibration_ratio;
return vin;gain 值,修改 lambda 表达式中 EEPROM_REG 读取地址:// 在 lambda 表达式中
// 修改 gain 后,请同步修改 EEPROM_REG
// 例如 gain 为 1.024 时
const uint8_t EEPROM_REG = 0xE8;| ADS1115 Gain | EEPROM Data Register | Max Input Voltage (theory) |
|---|---|---|
| 6.144 | 0xD0 | - |
| 4.096 | 0xD8 | - |
| 2.048 | 0xE0 | - |
| 1.024 | 0xE8 | 64 V |
| 0.512 | 0xF0 | 32 V |
| 0.256 | 0xF8 | 16 V |
推荐的 gain 值为 0.256, 0.512 和 1.024; 其中,在测量 16V 以下电压分辨率为 1mV,16V 以上电压分辨率为 7.9 mV,请根据被测对象电压选择最合适的 gain 值,以及读取 EEPROM 中合适的校准参数。为了数据精准,仅能测量 AIN0 或 AIN1 其中一路,请勿将两路都接上电压输入。
当添加至 Dashboard 之后,您可以在 Home Assistant 中查看传感器数据。