27 #include <libopencmsis/core_cm3.h> 28 #include <libopencm3/cm3/nvic.h> 29 #include <libopencm3/stm32/rcc.h> 30 #include <libopencm3/stm32/gpio.h> 31 #include <libopencm3/stm32/usart.h> 32 #include <libopencm3/stm32/timer.h> 41 #define SENSOR_PZEM_USART 2 47 #define SENSOR_PZEM_TIMER 2 52 static volatile uint8_t
rx_i = 0;
54 static volatile uint8_t
tx_i = 0;
61 rcc_periph_clock_enable(RCC_AFIO);
102 if (type>=SENSOR_PZEM_MAX) {
131 measurement.
valid =
false;
138 if ((
rx_buffer[0]&0x0f)>=SENSOR_PZEM_MAX) {
141 uint8_t checksum = 0;
148 measurement.
valid =
true;
150 switch (measurement.
type) {
151 case SENSOR_PZEM_VOLTAGE:
154 case SENSOR_PZEM_CURRENT:
157 case SENSOR_PZEM_POWER:
160 case SENSOR_PZEM_ENERGY:
169 measurement.
valid =
false;
library to query measurements from peacefair PZEM-004 and PZEM-004T electricity meter (API) ...
#define TIM_ISR(x)
get interrupt service routine for timer base on TIM identifier
void sensor_pzem_setup(void)
setup peripherals to communicate with electricity meter
measurement returned by electricity meter
enum sensor_pzem_measurement_type_t type
measurement type
#define USART_ISR(x)
get interrupt service routine for USART based on USART identifier
void sensor_pzem_measurement_request(uint32_t address, enum sensor_pzem_measurement_type_t type)
request measurement from electricity meter
#define NVIC_TIM_IRQ(x)
get NVIC IRQ for timer base on TIM identifier
static volatile uint8_t rx_i
current position of read received data
global definitions and methods (API)
#define SENSOR_PZEM_USART
USART peripheral.
#define RCC_TIM(x)
get RCC for timer based on TIM identifier
struct sensor_pzem_measurement_t sensor_pzem_measurement_decode(void)
decode received measurement
#define SENSOR_PZEM_TIMER
timer peripheral
static uint8_t tx_buffer[7]
buffer for request to transmit
static volatile uint8_t tx_i
current position of transmitted data
#define USART_IRQ(x)
get NVIC IRQ for USART based on USART identifier
#define USART(x)
get USART based on USART identifier
#define USART_PORT(x)
get port for USART based on USART identifier
#define USART_PORT_RCC(x)
get RCC for USART port based on USART identifier
uint32_t energy
measured energy in watts/hour (24 bits)
sensor_pzem_measurement_type_t
measurements (and configurations) offered by electricity meter
volatile bool sensor_pzem_measurement_received
a measurement response has been received
bool valid
is the measurement valid (e.g.
uint16_t power
measured power in watts
#define LENGTH(x)
get the length of an array
union sensor_pzem_measurement_t::measurement_t value
measurement value
float current
measured current in amperes
float voltage
measured voltage in volts
#define USART_RCC(x)
get RCC for USART based on USART identifier
#define TIM(x)
get TIM based on TIM identifier
#define USART_PIN_RX(x)
get receive pin for USART based on USART identifier
#define USART_PIN_TX(x)
get transmit pin for USART based on USART identifier
static uint8_t rx_buffer[7]
buffer for received response