//-----Setting up I2C #include //I2C pins #define PIN_SDA 33 #define PIN_SCL 32 //-----Setting up WIFI //library #include //For ESP32 #include #include //To compile the results // SETUP WIFI CREDENTIALS //Casa //const char* ssid = ""; //const char* password = ""; //const char* mqtt_server = ""; //FabLab const char* ssid = "Iaac-Wifi"; const char* password = "enteriaac2013"; const char* mqtt_server = "172.16.22.235"; const char* mqtt_user = ""; const char* mqtt_pass = ""; bool bSend = 0; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(9600); // start serial for output //---I2C Setup Wire.begin(PIN_SDA, PIN_SCL); // join i2c bus (address optional for master) //---WIFI Setup Serial.println("Starting Arduino WIFI Client application"); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } uint16_t POW = 0; uint16_t POW1 = 0; //32 bit = 4bytes uint16_t VRMS = 0; int cnt = 0; const int Payload_size = 10; //In Bytes byte inputBuf[Payload_size]; char *names_board_8[] = {"1","2","3","4","5"}; //Board 6 char *names_board_6[] = {"6","7","8","9","10"}; //Board 8 void loop() { delay(5000); //Board 8 with pulse sensor //Instantaenous power cnt = 0; Wire.beginTransmission(8); Wire.write(0x01); // request instantaneous power Wire.endTransmission(); Wire.requestFrom(8, Payload_size); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested inputBuf[cnt] = Wire.read(); cnt++; } if (cnt >= Payload_size-1) { cnt = 0; DynamicJsonDocument doc(1024); doc["Kit_Name"] = "Casa_Adrien"; for (int i = 0; i <= Payload_size-1;i = i + 2){ POW = inputBuf[i]; POW = (POW << 8) | inputBuf[i+1]; Serial.println(POW); POW > 1025 ? POW = 0: POW=POW; doc[names_board_8[i/2]]= POW; POW = 0; } serializeJson(doc, Serial); char json_string[1024]; serializeJson(doc, json_string); client.publish("luzmon_power",json_string); } //Cumulated power cnt = 0; Wire.beginTransmission(8); Wire.write(0x02); // request instantaneous power Wire.endTransmission(); Wire.requestFrom(8, Payload_size); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested inputBuf[cnt] = Wire.read(); cnt++; } if (cnt >= Payload_size-1) { cnt = 0; DynamicJsonDocument doc(1024); doc["Kit_Name"] = "Casa_Adrien"; for (int i = 0; i <= Payload_size-1;i = i + 2){ POW = inputBuf[i]; POW = (POW << 8) | inputBuf[i+1]; Serial.println(POW); POW > 1025 ? POW = 0: POW=POW; doc[names_board_8[i/2]]= POW; POW = 0; } serializeJson(doc, Serial); char json_string[1024]; serializeJson(doc, json_string); client.publish("luzmon_power_cum",json_string); } delay(5000); //Board 6 with pulse sensor //Instantaenous power cnt = 0; Wire.beginTransmission(6); Wire.write(0x01); // request instantaneous power Wire.endTransmission(); Wire.requestFrom(6, Payload_size); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested inputBuf[cnt] = Wire.read(); cnt++; } if (cnt >= Payload_size-1) { cnt = 0; DynamicJsonDocument doc(1024); doc["Kit_Name"] = "Casa_Adrien"; for (int i = 0; i <= Payload_size-1;i = i + 2){ POW = inputBuf[i]; POW = (POW << 8) | inputBuf[i+1]; Serial.println(POW); POW > 1025 ? POW = 0: POW=POW; doc[names_board_6[i/2]]= POW; POW = 0; } serializeJson(doc, Serial); char json_string[1024]; serializeJson(doc, json_string); client.publish("luzmon_power",json_string); } //Cumulated power cnt = 0; Wire.beginTransmission(6); Wire.write(0x02); // request instantaneous power Wire.endTransmission(); Wire.requestFrom(6, Payload_size); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested inputBuf[cnt] = Wire.read(); cnt++; } if (cnt >= Payload_size-1) { cnt = 0; DynamicJsonDocument doc(1024); doc["Kit_Name"] = "Casa_Adrien"; for (int i = 0; i <= Payload_size-1;i = i + 2){ POW = inputBuf[i]; POW = (POW << 8) | inputBuf[i+1]; Serial.println(POW); POW > 1025 ? POW = 0: POW=POW; doc[names_board_6[i/2]]= POW; POW = 0; } serializeJson(doc, Serial); char json_string[1024]; serializeJson(doc, json_string); client.publish("luzmon_power_cum",json_string); } //MQTT connection check if (!client.connected()) reconnect(); client.loop(); } //WIFI functions void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); String strPayload = String((char*)payload); // Serial.println(strPayload.toFloat()); // Serial.println(strPayload.toInt()); // USE RECEIVED DATA HERE //if (strPayload.toInt() > 5) digitalWrite(LED_BUILTIN, LOW); //else digitalWrite(LED_BUILTIN, HIGH); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str(), mqtt_user, mqtt_pass)) { Serial.println("connected"); // SET THE TOPIC TO SUBSCRIBE HERE client.subscribe("testing"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); }