Added power factor and current functions
This commit is contained in:
parent
c5952386ea
commit
c7718c80d4
@ -57,7 +57,7 @@ uint32_t read_vrms() {
|
||||
int len = uart_receive_response(response, sizeof(response));
|
||||
if (len > 0 ) {
|
||||
vrms_value = (response[2] << 8) | response[3]; // Extract VRMS value
|
||||
ESP_LOGI(TAG, "VRMS: %lu", vrms_value);
|
||||
// ESP_LOGI(TAG, "VRMS: %lu", vrms_value);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Failed to receive complete VRMS data");
|
||||
}
|
||||
@ -77,27 +77,83 @@ uint32_t read_active_power() {
|
||||
int len = uart_receive_response(response, sizeof(response));
|
||||
if (len >= 7) {
|
||||
power_value = (response[2] << 24) | (response[3] << 16) | (response[4] << 8) | response[5]; // Extract Power
|
||||
ESP_LOGI(TAG, "Active Power: %d", power_value);
|
||||
// ESP_LOGI(TAG, "Active Power: %lu", power_value);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Failed to receive complete power data");
|
||||
ESP_LOGE(TAG, "Failed to receive complete active power data");
|
||||
}
|
||||
|
||||
return power_value;
|
||||
}
|
||||
|
||||
void idle_message() {
|
||||
uint8_t command[] = {0xA4}; // Example command to check acknowledge
|
||||
// uint8_t command[] = { 0xA5, 0x07, 0x41, 0x00, 0x02, 0x52, 0x41 }; // find System version
|
||||
uart_send_command(command, sizeof(command));
|
||||
|
||||
uint8_t response[1];
|
||||
// Read Current RMS value
|
||||
uint32_t read_current()
|
||||
{
|
||||
uint8_t current_cmd[] = { 0xA5, 0x07, 0x41, 0x00, 0x04, 0x44, 0x035 }; // Command for Current
|
||||
uint8_t response[8];
|
||||
uint32_t current_value = 0;
|
||||
|
||||
uart_send_command(current_cmd, sizeof(current_cmd));
|
||||
vTaskDelay(pdMS_TO_TICKS(50));
|
||||
|
||||
int len = uart_receive_response(response, sizeof(response));
|
||||
if (len >= 7) {
|
||||
current_value = (response[2] << 24) | (response[3] << 16) | (response[4] << 8) | response[5]; // Extract Power
|
||||
// ESP_LOGI(TAG, "Active Power: %lu", current_value);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Failed to receive complete current data");
|
||||
}
|
||||
|
||||
return current_value;
|
||||
}
|
||||
|
||||
//Read Power factor
|
||||
|
||||
uint32_t read_power_factor(){
|
||||
|
||||
|
||||
uint8_t power_factor_cmd[] = { 0xA5, 0x07, 0x41, 0x00, 0x16, 0x52, 0x055 }; // Command for Current
|
||||
uint8_t response[8];
|
||||
uint32_t power_factor = 0;
|
||||
|
||||
uart_send_command(power_factor_cmd, sizeof(power_factor_cmd));
|
||||
vTaskDelay(pdMS_TO_TICKS(50));
|
||||
|
||||
int len = uart_receive_response(response, sizeof(response));
|
||||
if (len > 0) {
|
||||
ESP_LOGI(TAG, "Received %d bytes", len);
|
||||
for (int i = 0; i < len; i++) {
|
||||
ESP_LOGI(TAG, "0x%02X", response[i]);
|
||||
}
|
||||
power_factor = ((response[2] << 8) | response[3]); // Extract Power
|
||||
// ESP_LOGI(TAG, "====>>> Power Factor: 0x%0X", (unsigned int) power_factor);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Failed to receive complete power factor data");
|
||||
}
|
||||
|
||||
return power_factor;
|
||||
|
||||
}
|
||||
|
||||
// Read reactive power
|
||||
|
||||
uint32_t reactive_power(){
|
||||
|
||||
|
||||
uint8_t r_power_cmd[] = { 0xA5, 0x07, 0x41,0x00, 0x0E, 0x44, 0x3F}; // Command for Reactive power
|
||||
uint8_t response[8];
|
||||
uint32_t r_power_value = 0;
|
||||
|
||||
uart_send_command( r_power_cmd, sizeof(r_power_cmd));
|
||||
vTaskDelay(pdMS_TO_TICKS(50));
|
||||
|
||||
int len = uart_receive_response(response, sizeof(response));
|
||||
|
||||
ESP_LOGI(TAG, "Active Power length : %d", len);
|
||||
|
||||
if (len > 0 ) {
|
||||
r_power_value = (response[2] << 24) | (response[3] << 16) | (response[4] << 8) | response[5]; // Extract Power
|
||||
// ESP_LOGI(TAG, "Active Power: %lu", current_value);
|
||||
} else {
|
||||
ESP_LOGE(TAG, "Failed to receive complete Reactive power data ");
|
||||
}
|
||||
|
||||
return r_power_value;
|
||||
}
|
||||
|
||||
// Main application
|
||||
@ -113,10 +169,23 @@ void app_main(void) {
|
||||
while (1) {
|
||||
uint32_t vrms = read_vrms();
|
||||
uint32_t power = read_active_power();
|
||||
uint32_t current = read_current();
|
||||
uint32_t p_factor = read_power_factor();
|
||||
uint32_t r_power = reactive_power();
|
||||
|
||||
|
||||
|
||||
ESP_LOGI(TAG, "Voltage RMS: %.2f V", vrms / 10.0);
|
||||
ESP_LOGI(TAG, "Active Power: %.3f W", power / 100.0);
|
||||
|
||||
ESP_LOGI(TAG, "Voltage RMS : %.2f V", vrms / 10.0);
|
||||
ESP_LOGI(TAG, "Active Power : %.3f W", power / 100.0);
|
||||
ESP_LOGI(TAG, "Current (RMS): %.3f A", current / 10000.0);
|
||||
ESP_LOGI(TAG, "Power factor : %.3f Pf", p_factor / 32768.0); // MCP39F501 typically represents Power Factor as a signed 16-bit integer (int16_t),
|
||||
// The range is -1.000 to +1.000,
|
||||
// The scaling factor is 32768 (i.e., 0x8000 = -1, 0x7FFF = +1)..
|
||||
|
||||
ESP_LOGI(TAG, "Reactive Power : %.3f ", r_power / 100.0);
|
||||
|
||||
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(2000)); // Read every 2 seconds
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user