Advertisement
Guest User

Untitled

a guest
May 25th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1.  
  2. // CONNECT THE RS485 MODULE RX->RX, TX->TX.
  3. // Disconnect when uploading code.
  4. #include <ArduinoOTA.h>
  5. #include <BlynkSimpleEsp8266.h>
  6. #include <SimpleTimer.h>
  7. #include <ModbusMaster.h>
  8. #include <ESP8266WiFi.h>
  9.  
  10. WidgetTerminal terminal(V0);
  11.  
  12. #define WIFI_SSID "fghgfhfghgfh"
  13. #define WIFI_PASS "ghghfgh"
  14. #define AUTH "fdfsdfsf"
  15.  
  16. #define USE_LOCAL_SERVER
  17. #define SERVER IPAddress(192, 168, 1, 2)
  18. #define OTA_HOSTNAME "Power-MONITOR"
  19. /*
  20. Virtual Pins - Base
  21. */
  22. #define vPIN_PV_POWER V1
  23. #define vPIN_PV_CURRENT V2
  24. #define vPIN_PV_VOLTAGE V3
  25. #define vPIN_LOAD_CURRENT V4
  26. #define vPIN_LOAD_POWER V5
  27. #define vPIN_BATT_TEMP V6
  28. #define vPIN_BATT_VOLTAGE V7
  29. #define vPIN_BATT_REMAIN V8
  30. #define vPIN_CONTROLLER_TEMP V9
  31.  
  32. const int debug = 1;
  33.  
  34. #define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))
  35.  
  36. int timerTask1, timerTask2, timerTask3;
  37. float battBhargeCurrent, bvoltage, ctemp, btemp, bremaining, lpower, lcurrent, pvvoltage, pvcurrent, pvpower;
  38. float stats_today_pv_volt_min, stats_today_pv_volt_max;
  39. // uint8_t result;
  40. uint8_t result;
  41.  
  42.  
  43.  
  44. // this is to check if we can write since rs485 is half duplex
  45. bool rs485DataReceived = true;
  46.  
  47. float data[100];
  48.  
  49. ModbusMaster node;
  50. SimpleTimer timer;
  51.  
  52. // tracer requires no handshaking
  53. void preTransmission() {}
  54. void postTransmission() {}
  55.  
  56. // a list of the regisities to query in order
  57. typedef void (*RegistryList[])();
  58. RegistryList Registries = {
  59. AddressRegistry_0001 // samo potrosnju
  60. };
  61. // keep log of where we are
  62. uint8_t currentRegistryNumber = 0;
  63. // function to switch to next registry
  64. void nextRegistryNumber() {
  65. currentRegistryNumber = (currentRegistryNumber + 1) % ARRAY_SIZE( Registries);
  66. }
  67.  
  68. void setup()
  69. {
  70. // Serial.begin(115200);
  71. Serial.begin(9600, SERIAL_8E1); //, SERIAL_8E1
  72. // Serial.print("Setup faza u procesu.");
  73. // Modbus slave ID 1
  74. node.begin(1, Serial);
  75. node.preTransmission(preTransmission);
  76. node.postTransmission(postTransmission);
  77. // WiFi.mode(WIFI_STA);
  78.  
  79. Blynk.begin(AUTH, WIFI_SSID, WIFI_PASS, "blynk.reflect.ba", 8442);
  80.  
  81. while (Blynk.connect() == false) {}
  82. ArduinoOTA.setHostname(OTA_HOSTNAME);
  83. ArduinoOTA.begin();
  84.  
  85. timerTask1 = timer.setInterval(9000, updateBlynk);
  86. Serial.print("Šaljem podatke na Blynk server...");
  87. timerTask2 = timer.setInterval(9000, doRegistryNumber);
  88. timerTask3 = timer.setInterval(9000, nextRegistryNumber);
  89. }
  90.  
  91. // --------------------------------------------------------------------------------
  92.  
  93. void updateBlynk() {
  94. Blynk.virtualWrite(vPIN_PV_POWER, pvpower);
  95. Blynk.virtualWrite(vPIN_PV_CURRENT, pvcurrent);
  96. Blynk.virtualWrite(vPIN_PV_VOLTAGE, pvvoltage);
  97. Blynk.virtualWrite(vPIN_LOAD_CURRENT, lcurrent);
  98. Blynk.virtualWrite(vPIN_LOAD_POWER, lpower);
  99. Blynk.virtualWrite(vPIN_BATT_TEMP, btemp);
  100. Blynk.virtualWrite(vPIN_BATT_VOLTAGE, bvoltage);
  101. Blynk.virtualWrite(vPIN_BATT_REMAIN, bremaining);
  102. Blynk.virtualWrite(vPIN_CONTROLLER_TEMP, ctemp);
  103. }
  104.  
  105.  
  106. void doRegistryNumber() {
  107. Registries[currentRegistryNumber]();
  108. }
  109.  
  110.  
  111. void AddressRegistry_0001() {
  112.  
  113. uint8_t j;
  114. uint16_t dataval[2];
  115.  
  116. result = node.readHoldingRegisters(0x00, 2);
  117. if (result == node.ku8MBSuccess)
  118. {
  119. for (j = 0; j < 2; j++) // set to 0,1 for two datablocks
  120. {
  121. dataval[j] = node.getResponseBuffer(j);
  122. }
  123.  
  124. String myValuea = String(dataval[0], HEX); //Convert it into Hexadecimal
  125. String myValueb = String(dataval[1], HEX); //Convert it into Hexadecimal
  126. terminal.println("---------- Normalno ---------");
  127. terminal.println("Prvi: ");
  128. terminal.println(dataval[0]);
  129. terminal.println("Drugi: ");
  130. terminal.println(dataval[1]);
  131.  
  132. terminal.println("---------- HEX ---------");
  133. terminal.println("Prvi: ");
  134. terminal.println(myValuea);
  135. terminal.println("Drugi: ");
  136. terminal.println(myValueb);
  137.  
  138.  
  139.  
  140. // dole je staro, a gore je novo
  141. terminal.println("Show result for fist register:");
  142. terminal.println(node.getResponseBuffer(0));
  143.  
  144. // uint32_t ChrgStatus = node.getResponseBuffer(0);
  145. //
  146. // ChrgStatus = ChrgStatus >> 2;// shift right 2 places to get bits D3 D2 into D1 D0
  147. // ChrgStatus = ChrgStatus & 3; // and it, bit wise with, 0000000000000011, to get just D1 D0, loose th rest
  148. // terminal.println("Mozda ovaj: ");
  149. // terminal.println(ChrgStatus);
  150. //
  151. // data[0] = node.getResponseBuffer(0, 2);
  152. // data[1] = node.getResponseBuffer(1);
  153. // //uint32_t lw = (uint32_t)data[0] + (uint32_t)data[1]*65536;
  154. // uint32_t lw = (uint32_t)data[0];
  155. // float fval = *((float*)&lw);
  156.  
  157. terminal.println("-----------------------");
  158. terminal.flush();
  159. node.clearResponseBuffer();
  160. node.clearTransmitBuffer();
  161. } else {
  162. rs485DataReceived = false;
  163. }
  164.  
  165. }
  166.  
  167. void loop()
  168. {
  169. Blynk.run();
  170. // ArduinoOTA.handle();
  171. timer.run();
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement