new upgrade
This commit is contained in:
@@ -53,7 +53,7 @@ static void meter_ade7758_post_event(const meter_ade7758_internal_data_t *data)
|
||||
memcpy(evt.irms, data->irms, sizeof(evt.irms));
|
||||
memcpy(evt.watt, data->watt, sizeof(evt.watt));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), portMAX_DELAY);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ static void serial_mdb_task(void *param)
|
||||
memcpy(evt.irms, current, sizeof(evt.irms));
|
||||
memcpy(evt.watt, watt, sizeof(evt.watt));
|
||||
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), portMAX_DELAY);
|
||||
vTaskDelay(UPDATE_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ static void meter_dts6619_post_event(float *voltage, float *current, int *power_
|
||||
memcpy(evt.watt, power_w, sizeof(evt.watt));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY,
|
||||
&evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
&evt, sizeof(evt), portMAX_DELAY);
|
||||
if (err != ESP_OK)
|
||||
{
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
|
||||
@@ -1,35 +1,32 @@
|
||||
#ifndef METER_EA777_H_
|
||||
#define METER_EA777_H_
|
||||
#ifndef METER_DTS6619_H_
|
||||
#define METER_DTS6619_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "esp_err.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Inicializa o driver do medidor EA777 (UART RS485, Modbus, registradores).
|
||||
* @brief Inicializa o driver do medidor dts6619 (SPI, mutex, registradores).
|
||||
*
|
||||
* @return esp_err_t Retorna ESP_OK se a inicialização for bem-sucedida, caso contrário retorna um erro.
|
||||
*/
|
||||
esp_err_t meter_ea777_init(void);
|
||||
esp_err_t meter_dts6619_init(void);
|
||||
|
||||
/**
|
||||
* @brief Inicia a tarefa de leitura de dados do medidor EA777.
|
||||
* @brief Inicia a tarefa de leitura de dados do medidor DTS6619.
|
||||
*
|
||||
* @return esp_err_t Retorna ESP_OK se a tarefa for iniciada com sucesso, caso contrário retorna um erro.
|
||||
*/
|
||||
esp_err_t meter_ea777_start(void);
|
||||
esp_err_t meter_dts6619_start(void);
|
||||
|
||||
/**
|
||||
* @brief Para a tarefa de leitura e limpa os dados internos do medidor EA777.
|
||||
* @brief Para a tarefa de leitura e limpa os dados internos do medidor DTS6619.
|
||||
*/
|
||||
void meter_ea777_stop(void);
|
||||
void meter_dts6619_stop(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* METER_EA777_H_ */
|
||||
#endif /* METER_DTS6619_H_ */
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "driver/uart.h"
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include "meter_ea777.h"
|
||||
|
||||
#define TAG "serial_mdb_ea777"
|
||||
|
||||
@@ -148,7 +149,7 @@ static void meter_ea777_post_event(float *voltage, float *current, int *power_w,
|
||||
memcpy(evt.watt, power_w, sizeof(evt.watt));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY,
|
||||
&evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
&evt, sizeof(evt), portMAX_DELAY);
|
||||
if (err != ESP_OK)
|
||||
{
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
|
||||
@@ -1,32 +1,35 @@
|
||||
#ifndef METER_DTS6619_H_
|
||||
#define METER_DTS6619_H_
|
||||
#ifndef METER_EA777_H_
|
||||
#define METER_EA777_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "esp_err.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Inicializa o driver do medidor dts6619 (SPI, mutex, registradores).
|
||||
* @brief Inicializa o driver do medidor EA777 (UART RS485, Modbus, registradores).
|
||||
*
|
||||
* @return esp_err_t Retorna ESP_OK se a inicialização for bem-sucedida, caso contrário retorna um erro.
|
||||
*/
|
||||
esp_err_t meter_dts6619_init(void);
|
||||
esp_err_t meter_ea777_init(void);
|
||||
|
||||
/**
|
||||
* @brief Inicia a tarefa de leitura de dados do medidor DTS6619.
|
||||
* @brief Inicia a tarefa de leitura de dados do medidor EA777.
|
||||
*
|
||||
* @return esp_err_t Retorna ESP_OK se a tarefa for iniciada com sucesso, caso contrário retorna um erro.
|
||||
*/
|
||||
esp_err_t meter_dts6619_start(void);
|
||||
esp_err_t meter_ea777_start(void);
|
||||
|
||||
/**
|
||||
* @brief Para a tarefa de leitura e limpa os dados internos do medidor DTS6619.
|
||||
* @brief Para a tarefa de leitura e limpa os dados internos do medidor EA777.
|
||||
*/
|
||||
void meter_dts6619_stop(void);
|
||||
|
||||
void meter_ea777_stop(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* METER_DTS6619_H_ */
|
||||
#endif /* METER_EA777_H_ */
|
||||
@@ -8,11 +8,12 @@
|
||||
|
||||
#define TAG "serial_mdb_orno513"
|
||||
|
||||
|
||||
#define MB_PORT_NUM 2
|
||||
#define MB_DEV_SPEED 9600
|
||||
#define MB_UART_TXD 17
|
||||
#define MB_UART_RXD 16
|
||||
#define MB_UART_RTS 5
|
||||
#define MB_UART_RTS 2
|
||||
#define UPDATE_INTERVAL (3000 / portTICK_PERIOD_MS)
|
||||
#define POLL_INTERVAL (100 / portTICK_PERIOD_MS)
|
||||
|
||||
@@ -129,7 +130,7 @@ static void serial_mdb_task(void *param) {
|
||||
memcpy(evt.irms, current, sizeof(evt.irms));
|
||||
memcpy(evt.watt, watt, sizeof(evt.watt));
|
||||
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), portMAX_DELAY);
|
||||
|
||||
|
||||
vTaskDelay(UPDATE_INTERVAL);
|
||||
|
||||
@@ -91,7 +91,7 @@ static void meter_orno516_post_event(float *voltage, float *current, int *power)
|
||||
memcpy(evt.watt, power, sizeof(evt.watt));
|
||||
|
||||
esp_err_t err = esp_event_post(METER_EVENT, METER_EVENT_DATA_READY,
|
||||
&evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
&evt, sizeof(evt), portMAX_DELAY);
|
||||
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
|
||||
@@ -207,7 +207,7 @@ static void serial_mdb_task(void *param)
|
||||
memcpy(evt.irms, current, sizeof(evt.irms));
|
||||
memcpy(evt.watt, watt, sizeof(evt.watt));
|
||||
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), pdMS_TO_TICKS(10));
|
||||
esp_event_post(METER_EVENT, METER_EVENT_DATA_READY, &evt, sizeof(evt), portMAX_DELAY);
|
||||
vTaskDelay(UPDATE_INTERVAL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#define TAG "meter_zigbee"
|
||||
|
||||
// UART config
|
||||
#define UART_PORT UART_NUM_1
|
||||
#define UART_PORT UART_NUM_2
|
||||
#define TXD_PIN GPIO_NUM_17
|
||||
#define RXD_PIN GPIO_NUM_16
|
||||
#define UART_BUF_SIZE 128
|
||||
@@ -85,7 +85,7 @@ static void meter_zigbee_post_event(void) {
|
||||
METER_EVENT_DATA_READY,
|
||||
&evt,
|
||||
sizeof(evt),
|
||||
pdMS_TO_TICKS(10));
|
||||
portMAX_DELAY);
|
||||
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Falha ao emitir evento: %s", esp_err_to_name(err));
|
||||
@@ -94,8 +94,8 @@ static void meter_zigbee_post_event(void) {
|
||||
|
||||
|
||||
static void handle_zigbee_frame(const uint8_t *buf, size_t len) {
|
||||
ESP_LOGI(TAG, "Received UART frame (%d bytes):", len);
|
||||
ESP_LOG_BUFFER_HEX(TAG, buf, len);
|
||||
ESP_LOGD(TAG, "Received UART frame (%d bytes):", len);
|
||||
//ESP_LOG_BUFFER_HEX(TAG, buf, len);
|
||||
|
||||
if (len < RX_FRAME_SIZE) {
|
||||
ESP_LOGW(TAG, "Invalid frame: too short (len = %d)", len);
|
||||
@@ -118,7 +118,7 @@ static void handle_zigbee_frame(const uint8_t *buf, size_t len) {
|
||||
float current = current_raw / 1000.0f;
|
||||
float power = power_raw;
|
||||
|
||||
ESP_LOGI(TAG, "Parsed Attr 0x%04X: V=%.1fV I=%.2fA P=%.1fW", attr, volt, current, power);
|
||||
ESP_LOGD(TAG, "Parsed Attr 0x%04X: V=%.1fV I=%.2fA P=%.1fW", attr, volt, current, power);
|
||||
|
||||
if (xSemaphoreTake(meter_mutex, pdMS_TO_TICKS(10)) == pdTRUE) {
|
||||
switch (attr) {
|
||||
@@ -224,13 +224,8 @@ esp_err_t meter_zigbee_start(void) {
|
||||
|
||||
|
||||
|
||||
|
||||
void meter_zigbee_stop(void) {
|
||||
|
||||
//send_stop_command();
|
||||
|
||||
//vTaskDelay(pdMS_TO_TICKS(100)); // Aguarda o outro lado processar
|
||||
|
||||
if (meter_zigbee_task) {
|
||||
vTaskDelete(meter_zigbee_task);
|
||||
meter_zigbee_task = NULL;
|
||||
|
||||
Reference in New Issue
Block a user