| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #include <Wire.h>
- #include "DFRobot_INA219.h"
- #include <ESP8266WiFi.h>
- #include <ArduinoMqttClient.h>
- #include <ArduinoJson.h>
- #include "secrets.h"
- DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS1);
- WiFiClient wifiClient;
- MqttClient mqttClient(wifiClient);
- float ina219Reading_mA = 1000;
- float extMeterReading_mA = 1000;
- const long interval = 10000; // interval at which to read voltage and report
- unsigned long previousMillis = 0; // will store last time LED was updated
- const int analogInPin = A0;
- int sensorValue = 0;
- StaticJsonDocument<200> doc;
- int charCount;
- char json[200];
- int myMessage;
- int myPin;
-
- void setup()
- {
- Serial.begin(115200);
- Serial.println();
- pinMode(15, OUTPUT);
- digitalWrite(15, LOW);
- pinMode(12, OUTPUT);
- digitalWrite(12, LOW);
- pinMode(14, OUTPUT);
- digitalWrite(14, LOW);
- WiFi.begin(SECRET_SSID, SECRET_PASS);
- Serial.print("Connecting");
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- Serial.println();
- Serial.print("Connected, IP address: ");
- Serial.println(WiFi.localIP());
- if (!mqttClient.connect("192.168.1.38", 1883)) {
- Serial.print("MQTT connection failed! Error code = ");
- Serial.println(mqttClient.connectError());
- while (1);
- }
- Serial.print("Connected to MQTT");
-
- // subscribe to a topic
- mqttClient.subscribe("Generator1");
- mqttClient.subscribe("Generator2");
- mqttClient.subscribe("Generator3");
- //Initialize the sensor
- while(ina219.begin() != true) {
- Serial.println("INA219 begin faild");
- delay(2000);
- }
- //Linear calibration
- ina219.linearCalibrate(/*The measured current before calibration*/ina219Reading_mA, /*The current measured by other current testers*/extMeterReading_mA);
- Serial.println();
- }
- void loop() {
- int messageSize = mqttClient.parseMessage();
- if (messageSize) {
- // we received a message, print out the topic and contents
- Serial.print("Received a message with topic '");
- Serial.print(mqttClient.messageTopic());
- Serial.print("', length ");
- Serial.print(messageSize);
- Serial.println(" bytes:");
- myPin=0;
- if(mqttClient.messageTopic()=="Generator1"){
- myPin=15;
- }
- if(mqttClient.messageTopic()=="Generator2"){
- myPin=12;
- }
- if(mqttClient.messageTopic()=="Generator3"){
- myPin=14;
- }
- Serial.println(myPin);
-
- // use the Stream interface to print the contents
- charCount = 0;
- while (mqttClient.available()) {
- json[ charCount++ ] = (char)mqttClient.read();
- }
-
- Serial.println(json);
-
- DeserializationError error = deserializeJson(doc, json);
- if(doc["state"] == "ON"){
- Serial.println("Tested True");
- digitalWrite(myPin, HIGH);
- } else {
- Serial.println("Tested False");
- digitalWrite(myPin, LOW);
- }
-
- }
- unsigned long currentMillis = millis();
- if (currentMillis - previousMillis >= interval) {
- previousMillis = currentMillis;
- Serial.print("BusVoltage: ");
- Serial.print(ina219.getBusVoltage_V(), 2);
- Serial.println("V");
- mqttClient.beginMessage("houseVoltage");
- //mqttClient.print(sensorValue);
- mqttClient.print((ina219.getBusVoltage_V()/.493), 2);
- mqttClient.endMessage();
- }
-
- }
|