123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include <stdio.h>
- #include "sdkconfig.h"
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "esp_system.h"
- #include "esp_spi_flash.h"
- #include "freertos/queue.h"
- #include "driver/ledc.h"
- #include "driver/pcnt.h"
- #include "esp_attr.h"
- #include "esp_log.h"
- #include "config.h"
- #include "wifi.h"
- #include "uart.h"
- #include "serial.h"
- // Externs
- extern void ledc_init(void);
- extern void init_pcnt_unit();
- extern double getkWh(uint32_t *bigCnt, int32_t *cnt);
- extern void mqtt_init();
- extern void sendMQTTMessage(const char * topic, const char * data);
- extern void sendHTTPMessage(const double inData, const uint32_t bigCnt, const int32_t cnt);
- // Chip info:
- // This is esp32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 4MB external flash
- /** Electric meter:
- * 10000 impulses per kWh
- * Some normal max number could be 120 kWh/24h = 5 kWh/hour = 50000 pulses/hour = 833 pulses/min = 14 pulses/sec
- *
- * Counter is 16 bit signed = Max 32768 pulses = Will NOT work for one hour !!!!!
- * So we need some other way of counting higher numbers that will last for one h
- * Probably we need to use interrupts !
- */
- void app_main(void)
- {
- ESP_LOGI("MAIN", "HomeEnergyMeter ESP32");
-
- init_pcnt_unit();
- ledc_init();
- #ifdef WIFI_ENABLED
- initWifi(); // Init WIFI
- #endif
- #ifdef MQTT_ENABLED
- mqtt_init();
- #endif
- #ifdef SERIAL_ENABLED
- initUart();
- xTaskCreate(serialRxTask, "Serial_RX_Task", 10000, NULL, 10, NULL);
- #endif
- char dataStr[100];
- double kWh = 0.0;
- uint32_t bigCnt = 0;
- int32_t cnt = 0;
- while( true ) {
- kWh = getkWh(&bigCnt, &cnt);
- sprintf(dataStr,"%.5f",kWh);
- // @TODO This is changed for testing
- #ifdef MQTT_ENABLED
- sendMQTTMessage("/sensors/TEST/energy/electricalTotal", dataStr);
- #endif
- #ifdef WIFI_ENABLED
- sendHTTPMessage(kWh, bigCnt, cnt);
- #endif
- ESP_LOGI("MAIN", "%.4f %u %d",kWh,bigCnt,cnt);
- vTaskDelay(60000 / portTICK_PERIOD_MS);
- }
- esp_restart();
- }
|