#include "esp_log.h"
#include "driver/uart.h"
#define CONFIG_LOG_MAXIMUM_LEVEL ESP_LOG_VERBOSE
#define PZEM_UART_NUM UART_NUM_0
#define PZEM_TX_PIN 21
#define PZEM_RX_PIN 20
static const char *TAG = "Main";
static const uint8_t command[8] = { 0x01, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x70, 0x0D};
void app_main(void) {
esp_log_level_set(TAG, ESP_LOG_VERBOSE);
const uart_config_t uart_cfg = {
.baud_rate = 9600,
.data_bits = UART_DATA_8_BITS,
.parity = UART_PARITY_DISABLE,
.stop_bits = UART_STOP_BITS_1,
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
.source_clk = UART_SCLK_DEFAULT,
};
uart_driver_install(PZEM_UART_NUM, 256, 0, 0, NULL, 0);
uart_param_config(PZEM_UART_NUM, &uart_cfg);
uart_set_pin(PZEM_UART_NUM, PZEM_TX_PIN, PZEM_RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
uint8_t response[25];
while (1) {
uart_flush_input(PZEM_UART_NUM);
uart_write_bytes(PZEM_UART_NUM, command, sizeof(command));
ESP_LOGD(TAG, "Sending Request");
ESP_LOG_BUFFER_HEX_LEVEL(TAG, command, sizeof(command), ESP_LOG_DEBUG);
int len = uart_read_bytes(PZEM_UART_NUM, response, sizeof(response), pdMS_TO_TICKS(1000));
if (len > 0) {
if (response[1]<0x80) {
ESP_LOGI(TAG, "Receiving Data (%d Byte)", len);
ESP_LOG_BUFFER_HEX(TAG, response, len);
} else {
ESP_LOGW(TAG, "Receiving Error Reply (%d Byte)", len);
ESP_LOG_BUFFER_HEX_LEVEL(TAG, response, len, ESP_LOG_WARN);
}
} else ESP_LOGE(TAG, "No Reply from PZEM.");
vTaskDelay(pdMS_TO_TICKS(5000));
}
}