Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CONNECT THE RS485 MODULE RX->RX, TX->TX.
- // Disconnect when uploading code.
- #include <ArduinoOTA.h>
- #include <BlynkSimpleEsp8266.h>
- #include <SimpleTimer.h>
- #include <ModbusMaster.h>
- #include <ESP8266WiFi.h>
- WidgetTerminal terminal(V0);
- #define WIFI_SSID "fghgfhfghgfh"
- #define WIFI_PASS "ghghfgh"
- #define AUTH "fdfsdfsf"
- #define USE_LOCAL_SERVER
- #define SERVER IPAddress(192, 168, 1, 2)
- #define OTA_HOSTNAME "Power-MONITOR"
- /*
- Virtual Pins - Base
- */
- #define vPIN_PV_POWER V1
- #define vPIN_PV_CURRENT V2
- #define vPIN_PV_VOLTAGE V3
- #define vPIN_LOAD_CURRENT V4
- #define vPIN_LOAD_POWER V5
- #define vPIN_BATT_TEMP V6
- #define vPIN_BATT_VOLTAGE V7
- #define vPIN_BATT_REMAIN V8
- #define vPIN_CONTROLLER_TEMP V9
- const int debug = 1;
- #define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))
- int timerTask1, timerTask2, timerTask3;
- float battBhargeCurrent, bvoltage, ctemp, btemp, bremaining, lpower, lcurrent, pvvoltage, pvcurrent, pvpower;
- float stats_today_pv_volt_min, stats_today_pv_volt_max;
- // uint8_t result;
- uint8_t result;
- // this is to check if we can write since rs485 is half duplex
- bool rs485DataReceived = true;
- float data[100];
- ModbusMaster node;
- SimpleTimer timer;
- // tracer requires no handshaking
- void preTransmission() {}
- void postTransmission() {}
- // a list of the regisities to query in order
- typedef void (*RegistryList[])();
- RegistryList Registries = {
- AddressRegistry_0001 // samo potrosnju
- };
- // keep log of where we are
- uint8_t currentRegistryNumber = 0;
- // function to switch to next registry
- void nextRegistryNumber() {
- currentRegistryNumber = (currentRegistryNumber + 1) % ARRAY_SIZE( Registries);
- }
- void setup()
- {
- // Serial.begin(115200);
- Serial.begin(9600, SERIAL_8E1); //, SERIAL_8E1
- // Serial.print("Setup faza u procesu.");
- // Modbus slave ID 1
- node.begin(1, Serial);
- node.preTransmission(preTransmission);
- node.postTransmission(postTransmission);
- // WiFi.mode(WIFI_STA);
- Blynk.begin(AUTH, WIFI_SSID, WIFI_PASS, "blynk.reflect.ba", 8442);
- while (Blynk.connect() == false) {}
- ArduinoOTA.setHostname(OTA_HOSTNAME);
- ArduinoOTA.begin();
- timerTask1 = timer.setInterval(9000, updateBlynk);
- Serial.print("Šaljem podatke na Blynk server...");
- timerTask2 = timer.setInterval(9000, doRegistryNumber);
- timerTask3 = timer.setInterval(9000, nextRegistryNumber);
- }
- // --------------------------------------------------------------------------------
- void updateBlynk() {
- Blynk.virtualWrite(vPIN_PV_POWER, pvpower);
- Blynk.virtualWrite(vPIN_PV_CURRENT, pvcurrent);
- Blynk.virtualWrite(vPIN_PV_VOLTAGE, pvvoltage);
- Blynk.virtualWrite(vPIN_LOAD_CURRENT, lcurrent);
- Blynk.virtualWrite(vPIN_LOAD_POWER, lpower);
- Blynk.virtualWrite(vPIN_BATT_TEMP, btemp);
- Blynk.virtualWrite(vPIN_BATT_VOLTAGE, bvoltage);
- Blynk.virtualWrite(vPIN_BATT_REMAIN, bremaining);
- Blynk.virtualWrite(vPIN_CONTROLLER_TEMP, ctemp);
- }
- void doRegistryNumber() {
- Registries[currentRegistryNumber]();
- }
- void AddressRegistry_0001() {
- uint8_t j;
- uint16_t dataval[2];
- result = node.readHoldingRegisters(0x00, 2);
- if (result == node.ku8MBSuccess)
- {
- for (j = 0; j < 2; j++) // set to 0,1 for two datablocks
- {
- dataval[j] = node.getResponseBuffer(j);
- }
- String myValuea = String(dataval[0], HEX); //Convert it into Hexadecimal
- String myValueb = String(dataval[1], HEX); //Convert it into Hexadecimal
- terminal.println("---------- Normalno ---------");
- terminal.println("Prvi: ");
- terminal.println(dataval[0]);
- terminal.println("Drugi: ");
- terminal.println(dataval[1]);
- terminal.println("---------- HEX ---------");
- terminal.println("Prvi: ");
- terminal.println(myValuea);
- terminal.println("Drugi: ");
- terminal.println(myValueb);
- // dole je staro, a gore je novo
- terminal.println("Show result for fist register:");
- terminal.println(node.getResponseBuffer(0));
- // uint32_t ChrgStatus = node.getResponseBuffer(0);
- //
- // ChrgStatus = ChrgStatus >> 2;// shift right 2 places to get bits D3 D2 into D1 D0
- // ChrgStatus = ChrgStatus & 3; // and it, bit wise with, 0000000000000011, to get just D1 D0, loose th rest
- // terminal.println("Mozda ovaj: ");
- // terminal.println(ChrgStatus);
- //
- // data[0] = node.getResponseBuffer(0, 2);
- // data[1] = node.getResponseBuffer(1);
- // //uint32_t lw = (uint32_t)data[0] + (uint32_t)data[1]*65536;
- // uint32_t lw = (uint32_t)data[0];
- // float fval = *((float*)&lw);
- terminal.println("-----------------------");
- terminal.flush();
- node.clearResponseBuffer();
- node.clearTransmitBuffer();
- } else {
- rs485DataReceived = false;
- }
- }
- void loop()
- {
- Blynk.run();
- // ArduinoOTA.handle();
- timer.run();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement