GenStart.ino 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include <Wire.h>
  2. #include "DFRobot_INA219.h"
  3. #include <ESP8266WiFi.h>
  4. #include <ArduinoMqttClient.h>
  5. #include <ArduinoJson.h>
  6. #include "secrets.h"
  7. DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS1);
  8. WiFiClient wifiClient;
  9. MqttClient mqttClient(wifiClient);
  10. float ina219Reading_mA = 1000;
  11. float extMeterReading_mA = 1000;
  12. const long interval = 10000; // interval at which to read voltage and report
  13. unsigned long previousMillis = 0; // will store last time LED was updated
  14. const int analogInPin = A0;
  15. int sensorValue = 0;
  16. StaticJsonDocument<200> doc;
  17. int charCount;
  18. char json[200];
  19. int myMessage;
  20. int myPin;
  21. void setup()
  22. {
  23. Serial.begin(115200);
  24. Serial.println();
  25. pinMode(15, OUTPUT);
  26. digitalWrite(15, LOW);
  27. pinMode(12, OUTPUT);
  28. digitalWrite(12, LOW);
  29. pinMode(14, OUTPUT);
  30. digitalWrite(14, LOW);
  31. WiFi.begin(SECRET_SSID, SECRET_PASS);
  32. Serial.print("Connecting");
  33. while (WiFi.status() != WL_CONNECTED)
  34. {
  35. delay(500);
  36. Serial.print(".");
  37. }
  38. Serial.println();
  39. Serial.print("Connected, IP address: ");
  40. Serial.println(WiFi.localIP());
  41. if (!mqttClient.connect("192.168.1.38", 1883)) {
  42. Serial.print("MQTT connection failed! Error code = ");
  43. Serial.println(mqttClient.connectError());
  44. while (1);
  45. }
  46. Serial.print("Connected to MQTT");
  47. // subscribe to a topic
  48. mqttClient.subscribe("Generator1");
  49. mqttClient.subscribe("Generator2");
  50. mqttClient.subscribe("Generator3");
  51. //Initialize the sensor
  52. while(ina219.begin() != true) {
  53. Serial.println("INA219 begin faild");
  54. delay(2000);
  55. }
  56. //Linear calibration
  57. ina219.linearCalibrate(/*The measured current before calibration*/ina219Reading_mA, /*The current measured by other current testers*/extMeterReading_mA);
  58. Serial.println();
  59. }
  60. void loop() {
  61. int messageSize = mqttClient.parseMessage();
  62. if (messageSize) {
  63. // we received a message, print out the topic and contents
  64. Serial.print("Received a message with topic '");
  65. Serial.print(mqttClient.messageTopic());
  66. Serial.print("', length ");
  67. Serial.print(messageSize);
  68. Serial.println(" bytes:");
  69. myPin=0;
  70. if(mqttClient.messageTopic()=="Generator1"){
  71. myPin=15;
  72. }
  73. if(mqttClient.messageTopic()=="Generator2"){
  74. myPin=12;
  75. }
  76. if(mqttClient.messageTopic()=="Generator3"){
  77. myPin=14;
  78. }
  79. Serial.println(myPin);
  80. // use the Stream interface to print the contents
  81. charCount = 0;
  82. while (mqttClient.available()) {
  83. json[ charCount++ ] = (char)mqttClient.read();
  84. }
  85. Serial.println(json);
  86. DeserializationError error = deserializeJson(doc, json);
  87. if(doc["state"] == "ON"){
  88. Serial.println("Tested True");
  89. digitalWrite(myPin, HIGH);
  90. } else {
  91. Serial.println("Tested False");
  92. digitalWrite(myPin, LOW);
  93. }
  94. }
  95. unsigned long currentMillis = millis();
  96. if (currentMillis - previousMillis >= interval) {
  97. previousMillis = currentMillis;
  98. Serial.print("BusVoltage: ");
  99. Serial.print(ina219.getBusVoltage_V(), 2);
  100. Serial.println("V");
  101. mqttClient.beginMessage("houseVoltage");
  102. //mqttClient.print(sensorValue);
  103. mqttClient.print((ina219.getBusVoltage_V()/.493), 2);
  104. mqttClient.endMessage();
  105. }
  106. }