Disaster monitoring system — ESP32 simulation

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

Components

Sketch code

// ============================================================
//          DISASTER MONITORING SYSTEM - GATEWAY
// ============================================================
// NODE 1 -> FLOOD
// NODE 2 -> FIRE
// NODE 3 -> AIR POLLUTION
//
// Gateway displays latest status of ALL 3 nodes.
// No raw packets.
// No UNKNOWN PACKET.
// ============================================================

#define LORA_RX 16
#define LORA_TX 17

HardwareSerial LoRaSerial(2);


// ============================================================
// NODE DATA
// ============================================================

String node1Status = "WAITING";
String node1Reason = "Waiting for sensor data";

String node2Status = "WAITING";
String node2Reason = "Waiting for sensor data";

String node3Status = "WAITING";
String node3Reason = "Waiting for sensor data";

bool node1Received = false;
bool node2Received = false;
bool node3Received = false;


// ============================================================
// GET VALUE
// ============================================================

String getValue(String packet, String key)
{
  int start = packet.indexOf(key);

  if (start == -1)
    return "";

  start += key.length();

  int end = packet.indexOf(',', start);

  if (end == -1)
    end = packet.length();

  String value = packet.substring(start, end);

  value.trim();

  return value;
}


// ============================================================
// CONVERT STATUS
// ============================================================

String convertStatus(String status)
{
  status.toUpperCase();

  if (status.indexOf("CRITICAL") >= 0)
    return "RISK";

  if (status.indexOf("DANGER") >= 0)
    return "RISK";

  if (status.indexOf("WARNING") >= 0)
    return "WARNING";

  if (status.indexOf("SAFE") >= 0)
    return "SAFE";

  return "CHECK";
}


// ============================================================
// NODE 1 - FLOOD
// ============================================================

void processNode1(String packet)
{
  node1Received = true;

  String status = getValue(packet, "STATUS=");

  // ------------------------------------------
  // STATUS DETECTION
  // ------------------------------------------

  if (status != "")
  {
    node1Status = convertStatus(status);
  }
  else if (packet.indexOf("DANGER") >= 0 ||
           packet.indexOf("CRITICAL") >= 0)
  {
    node1Status = "RISK";
  }
  else if (packet.indexOf("WARNING") >= 0)
  {
    node1Status = "WARNING";
  }
  else
  {
    node1Status = "SAFE";
  }


  // ------------------------------------------
  // REASON
  // ------------------------------------------

  if (packet.indexOf("RAIN_STATUS=HEAVY") >= 0)
  {
    node1Reason = "Heavy rainfall detected";
  }
  else if (packet.indexOf("WATER=DANGER") >= 0)
  {
    node1Reason = "High water level detected";
  }
  else if (packet.indexOf("WATER=CRITICAL") >= 0)
  {
    node1Reason = "Critical water level detected";
  }
  else if (packet.indexOf("WA

More projects by sabharish3434