OpenLab_Slave_master_perfect (master failure detection) (copy) — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by sravanalakshmigangisetty.

Components

Sketch code

#include <Wire.h>
#include <WiFi.h>
#include <PubSubClient.h>

#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#include <math.h>

// ==================================================
// CHANGE ONLY THIS ID FOR EACH SLAVE
// ==================================================

#define SLAVE_ID 1

// Slave 1: 1
// Slave 2: 2
// Slave 3: 3

// ==================================================
// WIFI AND MQTT
// ==================================================

const char* WIFI_SSID = "Velxio-GUEST";
const char* MQTT_BROKER = "broker.hivemq.com";
const int MQTT_PORT = 1883;

const char* MASTER_STATUS_TOPIC = "fanmonitor/master/status";
const char* MASTER_HEARTBEAT_TOPIC = "fanmonitor/master/heartbeat";

WiFiClient espClient;
PubSubClient mqttClient(espClient);

// ==================================================
// PIN CONFIGURATION
// ==================================================

#define FAN1_RPM_PIN 34
#define FAN2_RPM_PIN 35

#define SDA_PIN 21
#define SCL_PIN 22

// ==================================================
// OLED CONFIGURATION
// ==================================================

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDRESS 0x3C

Adafruit_SSD1306 display(
  SCREEN_WIDTH,
  SCREEN_HEIGHT,
  &Wire,
  -1
);

bool oledReady = false;

// ==================================================
// MPU6050 SENSORS
// ==================================================

Adafruit_MPU6050 mpu1;
Adafruit_MPU6050 mpu2;

bool mpu1Ready = false;
bool mpu2Ready = false;

// ==================================================
// FAN VARIABLES
// ==================================================

int rpm1 = 0;
int rpm2 = 0;

float vibration1 = 0;
float vibration2 = 0;

String condition1 = "NORMAL";
String condition2 = "NORMAL";

const float VIBRATION_THRESHOLD = 0.50;

// ==================================================
// SLAVE AND BACKUP MASTER STATE
// ==================================================

bool slaveEnabled = true;

bool backupMaster = false;
bool masterIsOffline = false;

bool remoteSlaveEnabled[3] = {
  true, true, true
};

String remoteFanData[3][2];

bool remoteFanReceived[3][2] = {
  {false, false},
  {false, false},
  {false, false}
};

unsigned long lastMasterHeartbeat = 0;

const unsigned long MASTER_TIMEOUT = 8000;

unsigned long lastUpdate = 0;

const unsigned long UPDATE_INTERVAL = 5000;

unsigned long lastBackupDisplay = 0;

const unsigned long BACKUP_DISPLAY_INTERVAL = 5000;

int backupDisplaySlave = 1;

// ==================================================
// TOPIC HELPERS
// ==================================================

String getControlTopic(int id) {

  return "fanmonitor/slave" + String(id) +
         "/control";
}

String getFanTopic(int id, int fan) {

  return "fanmonitor/slave" + String(id) +
         "/fan" + String(fan);
}

// ==================================================
// SLAVE OFF STATUS
// =====

More projects by sravanalakshmigangisetty