remove PZEM support and add bliking LED
This commit is contained in:
parent
6ca29dff8e
commit
2a842d6bbd
128
main.c
128
main.c
|
@ -44,7 +44,6 @@
|
|||
#include "global.h" // board definitions
|
||||
//#include "usart.h" // USART utilities
|
||||
#include "usb_cdcacm.h" // USB CDC ACM utilities
|
||||
#include "sensor_pzem.h" // PZEM electricity meter utilities
|
||||
#include "sensor_sdm120.h" // SDM120 electricity meter utilities
|
||||
#include "radio_esp8266.h" // ESP8266 WiFi SoC utilities
|
||||
|
||||
|
@ -273,6 +272,7 @@ void main(void)
|
|||
|
||||
// setup board
|
||||
board_setup();
|
||||
led_on();
|
||||
|
||||
// setup USART and USB for user communication
|
||||
//usart_setup(); // setup USART (for printing)
|
||||
|
@ -348,11 +348,6 @@ void main(void)
|
|||
timer_enable_counter(TIM(DDM100TC_TIMER)); // enable timer
|
||||
printf("OK\n");
|
||||
|
||||
// setup PZEM electricity meter
|
||||
printf("setup PZEM-004 electricity meter: ");
|
||||
sensor_pzem_setup(); // setup PZEM electricity meter
|
||||
printf("OK\n");
|
||||
|
||||
// setup SDM120 electricity meter
|
||||
printf("setup SDM120 electricity meter: ");
|
||||
sensor_sdm120_setup(9600); // setup SDM120 electricity meter (get baud rate by scrolling through the menu on the device)
|
||||
|
@ -371,11 +366,6 @@ void main(void)
|
|||
bool char_flag = false; // a new character has been received
|
||||
led_on(); // indicate setup is complete
|
||||
|
||||
// variables for PZEM-004T meter measurements
|
||||
struct sensor_pzem_measurement_t pzem_measurements[3][SENSOR_PZEM_MAX]; // PZEM-004T measurements (2 meters, all measurements)
|
||||
uint8_t pzem_meter = 0; // PZEM-004T meter index (add to prefix)
|
||||
uint8_t pzem_measurement = 0; // PZEM-004T measurement index (matches the type)
|
||||
|
||||
// variables for SDM120 meter measurements
|
||||
float sdm120_measurements[3][SENSOR_SDM120_MEASUREMENT_MAX]; // SDM120 measurements (2 meters, all measurements)
|
||||
uint8_t sdm120_meter = 0; // SDM120 meter index (add to 1 to get ID)
|
||||
|
@ -409,59 +399,6 @@ void main(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
while (sensor_pzem_measurement_received) { // measurement from electricity meter received
|
||||
sensor_pzem_measurement_received = false; // clear flag
|
||||
struct sensor_pzem_measurement_t measurement = sensor_pzem_measurement_decode(); // decode measurement
|
||||
if (measurement.type>=SENSOR_PZEM_MAX) {
|
||||
fprintf(stderr,"unknown measurement type: %u\n", measurement.type);
|
||||
while (true); // unhandled error
|
||||
}
|
||||
if (measurement.valid) { // only show valid measurement
|
||||
printf("PZEM-004T meter %u ", pzem_meter);
|
||||
switch (measurement.type) {
|
||||
case SENSOR_PZEM_VOLTAGE:
|
||||
printf("voltage: %.01f V\n", measurement.value.voltage); // display measurement
|
||||
break;
|
||||
case SENSOR_PZEM_CURRENT:
|
||||
printf("current: %.02f A\n", measurement.value.current);
|
||||
break;
|
||||
case SENSOR_PZEM_POWER:
|
||||
printf("power: %u W\n", measurement.value.power);
|
||||
break;
|
||||
case SENSOR_PZEM_ENERGY:
|
||||
printf("energy: %lu Wh\n", measurement.value.energy);
|
||||
break;
|
||||
/* not used for this application
|
||||
case SENSOR_PZEM_ADDRESS:
|
||||
printf("address set\n");
|
||||
break;
|
||||
case SENSOR_PZEM_ALARM:
|
||||
printf("alarm threshold set\n");
|
||||
break;
|
||||
*/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (measurement.type!=pzem_measurement) {
|
||||
fprintf(stderr, "PZEM-004T measurement mismatch: expected %u, got %u\n", pzem_measurement, measurement.type);
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request same measurement
|
||||
} else if (pzem_measurement<SENSOR_PZEM_MAX-1) { // not all measurement types requested
|
||||
pzem_measurements[pzem_meter][pzem_measurement] = measurement; // save measurement (the type matches the index)
|
||||
pzem_measurement++; // go to next measurement
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request next measurement
|
||||
} else { // all measurement types requested
|
||||
pzem_measurements[pzem_meter][pzem_measurement] = measurement; // save measurement (the type matches the index)
|
||||
pzem_meter++; // got to next meter
|
||||
pzem_measurement = 0; // restart measurements
|
||||
if (pzem_meter<LENGTH(pzem_measurements)) { // ensure next meter exists
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request measurement for next meter
|
||||
}
|
||||
}
|
||||
} else { // measurement not valid
|
||||
fprintf(stderr, "PZEM-004T measurement invalid\n");
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request same measurement
|
||||
}
|
||||
}
|
||||
while (sensor_sdm120_measurement_received) { // measurement from electricity meter received
|
||||
float measurement = sensor_sdm120_measurement_decode(); // decode measurement
|
||||
if (isnan(measurement)) {
|
||||
|
@ -530,6 +467,7 @@ void main(void)
|
|||
}
|
||||
while (rtc_internal_tick_flag) { // the internal RTC ticked
|
||||
rtc_internal_tick_flag = false; // reset flag
|
||||
led_toggle(); // toggle LED to indicate if main function is stuck
|
||||
gpio_toggle(GPIO(LED_HEARTBEAT_PORT), GPIO(LED_HEARTBEAT_PIN)); // toggle heart beat LED to indicate if main function is stuck (do not toggle onboard the LED on PC13 on the blue pill board since this heavily influences the RTC)
|
||||
ticks_time = rtc_get_counter_val(); // copy time from internal RTC for processing
|
||||
action = true; // action has been performed
|
||||
|
@ -540,10 +478,6 @@ void main(void)
|
|||
printf("query meter measurements (%lu.%02lu:%02lu:%02lu)\n", ticks_time/(60*60*24), (ticks_time/(60*60))%24, (ticks_time%(60*60))/60, (ticks_time%60));
|
||||
gpio_clear(GPIO(LED_QUERY_PORT), GPIO(LED_QUERY_PIN)); // switch on query LED
|
||||
|
||||
// start getting all PZEM-004T measurements from all meters
|
||||
pzem_meter = 0; // reset PZEM meter number
|
||||
pzem_measurement = 0; // reset PZEM measurement index
|
||||
sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request first measurement
|
||||
// start getting all SDM120 measurements from all meters
|
||||
sdm120_meter = 0; // reset SDM120 meter number
|
||||
sdm120_measurement = 0; // reset SDM120 measurement index
|
||||
|
@ -560,17 +494,11 @@ void main(void)
|
|||
printf("DDM100TC meter power: %lu W\n", ddm100tc_value_power);
|
||||
}
|
||||
}
|
||||
while (pzem_meter>=LENGTH(pzem_measurements) && sdm120_meter>=LENGTH(sdm120_measurements)) { // all measurements received for all meter
|
||||
while (sdm120_meter>=LENGTH(sdm120_measurements)) { // all measurements received for all meter
|
||||
action = true; // action has been performed
|
||||
printf("saving measurements to database: ");
|
||||
gpio_set(GPIO(LED_QUERY_PORT), GPIO(LED_QUERY_PIN)); // switch off query LED
|
||||
gpio_clear(GPIO(LED_SUBMIT_PORT), GPIO(LED_SUBMIT_PIN)); // switch off submit LED
|
||||
const char* pzem_strings[SENSOR_PZEM_MAX] = {
|
||||
"voltage,meter=PZEM-004T,phase=%u value=%.1f\n",
|
||||
"current,meter=PZEM-004T,phase=%u value=%.2f\n",
|
||||
"power,meter=PZEM-004T,phase=%u value=%u\n",
|
||||
"energy,meter=PZEM-004T,phase=%u value=%lu\n"
|
||||
};
|
||||
const char* sdm120_strings[SENSOR_SDM120_MEASUREMENT_MAX] = {
|
||||
"voltage,meter=SDM120,phase=%u value=%.3f\n",
|
||||
"current,meter=SDM120,phase=%u value=%.3f\n",
|
||||
|
@ -592,29 +520,6 @@ void main(void)
|
|||
// calculate length for text to POST
|
||||
char line[256] = {0}; // measurement line to send
|
||||
size_t data_length = 0; /**< length of the data string to send */
|
||||
for (pzem_meter = 0; pzem_meter<LENGTH(pzem_measurements); pzem_meter++) {
|
||||
for (pzem_measurement = 0; pzem_measurement<SENSOR_PZEM_MAX; pzem_measurement++) {
|
||||
struct sensor_pzem_measurement_t measurement = pzem_measurements[pzem_meter][pzem_measurement]; // get measurement
|
||||
if (measurement.valid) { // only use valid measurements
|
||||
switch (measurement.type) { // get the size (hope no error is occurring)
|
||||
case SENSOR_PZEM_VOLTAGE:
|
||||
data_length += snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.voltage);
|
||||
break;
|
||||
case SENSOR_PZEM_CURRENT:
|
||||
data_length += snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.current);
|
||||
break;
|
||||
case SENSOR_PZEM_POWER:
|
||||
data_length += snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.power);
|
||||
break;
|
||||
case SENSOR_PZEM_ENERGY:
|
||||
data_length += snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.energy);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (sdm120_meter = 0; sdm120_meter<LENGTH(sdm120_measurements); sdm120_meter++) {
|
||||
for (sdm120_measurement = 0; sdm120_measurement<SENSOR_SDM120_MEASUREMENT_MAX; sdm120_measurement++) {
|
||||
if (sdm120_measurement<SENSOR_SDM120_ENERGY_ACTIVE_IMPORT) {
|
||||
|
@ -631,31 +536,6 @@ void main(void)
|
|||
if (!http_post_header(DATABASE_HOST, DATABASE_PORT, data_length)) { // send header
|
||||
fprintf(stderr,"could not sent HTTP POST header\n");
|
||||
} else {
|
||||
// send PZEM-004T values
|
||||
for (pzem_meter = 0; pzem_meter<LENGTH(pzem_measurements); pzem_meter++) {
|
||||
for (pzem_measurement = 0; pzem_measurement<SENSOR_PZEM_MAX; pzem_measurement++) {
|
||||
struct sensor_pzem_measurement_t measurement = pzem_measurements[pzem_meter][pzem_measurement]; // get measurement
|
||||
if (measurement.valid) { // only use valid measurements
|
||||
switch (measurement.type) { // make line (hope no error is occurring)
|
||||
case SENSOR_PZEM_VOLTAGE:
|
||||
snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.voltage);
|
||||
break;
|
||||
case SENSOR_PZEM_CURRENT:
|
||||
snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.current);
|
||||
break;
|
||||
case SENSOR_PZEM_POWER:
|
||||
snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.power);
|
||||
break;
|
||||
case SENSOR_PZEM_ENERGY:
|
||||
snprintf(line, LENGTH(line), pzem_strings[pzem_measurement], pzem_meter, measurement.value.energy);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
http_send((uint8_t*)line, 0); // don't care about the result
|
||||
}
|
||||
}
|
||||
}
|
||||
// send SDM120 values
|
||||
for (sdm120_meter = 0; sdm120_meter<LENGTH(sdm120_measurements); sdm120_meter++) {
|
||||
for (sdm120_measurement = 0; sdm120_measurement<SENSOR_SDM120_MEASUREMENT_MAX; sdm120_measurement++) {
|
||||
|
@ -670,6 +550,7 @@ void main(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
// send DM100TC values
|
||||
if (snprintf(line, LENGTH(line), ddm100tc_string_energy, ddm100tc_value_energy)>0) {
|
||||
http_send((uint8_t*)line, 0); // don't care about the result
|
||||
}
|
||||
|
@ -681,7 +562,6 @@ void main(void)
|
|||
printf("OK\n");
|
||||
}
|
||||
|
||||
pzem_meter = 0; // reset meter
|
||||
sdm120_meter = 0; // reset meter
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue