node 3 — ESP32 simulation

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

Components

Sketch code

#include <DHT.h>

// ================= PIN DEFINITIONS =================

#define MQ135_PIN 34
#define PM25_PIN 35

#define DHT_PIN 4
#define DHT_TYPE DHT22

// Grove LoRa UART
#define LORA_RX 16   // ESP32 receives from LoRa TX
#define LORA_TX 17   // ESP32 transmits to LoRa RX

// ================= DHT =================

DHT dht(DHT_PIN, DHT_TYPE);

// UART2 for Grove LoRa
HardwareSerial LoRaSerial(2);

// ================= SETUP =================

void setup() {

  Serial.begin(115200);

  // Start LoRa UART
  LoRaSerial.begin(9600, SERIAL_8N1, LORA_RX, LORA_TX);

  // Sensor pins
  pinMode(MQ135_PIN, INPUT);
  pinMode(PM25_PIN, INPUT);

  // Start DHT22
  dht.begin();

  Serial.println();
  Serial.println("======================================");
  Serial.println("   NODE 3 - AIR POLLUTION MONITORING");
  Serial.println("======================================");
  Serial.println("LoRa UART Started");
}

// ================= LOOP =================

void loop() {

  // ---------- MQ-135 / Gas Sensor ----------

  int airQuality = analogRead(MQ135_PIN);

  // ---------- PM2.5 Simulation ----------

  int pm25Raw = analogRead(PM25_PIN);

  float pm25 = (pm25Raw / 4095.0) * 500.0;

  // ---------- DHT22 ----------

  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // Check DHT22

  if (isnan(temperature) || isnan(humidity)) {

    Serial.println("DHT22 reading failed!");

    delay(2000);

    return;
  }

  // ---------- AIR QUALITY STATUS ----------

  String status;

  if (airQuality > 3000 || pm25 > 250) {

    status = "CRITICAL";

  }
  else if (airQuality > 1800 || pm25 > 100) {

    status = "WARNING";

  }
  else {

    status = "SAFE";
  }

  // ---------- SERIAL MONITOR ----------

  Serial.println();
  Serial.println("----------- NODE 3 -----------");

  Serial.print("MQ-135 Value : ");
  Serial.println(airQuality);

  Serial.print("PM2.5        : ");
  Serial.print(pm25, 1);
  Serial.println(" ug/m3");

  Serial.print("Temperature  : ");
  Serial.print(temperature, 1);
  Serial.println(" C");

  Serial.print("Humidity     : ");
  Serial.print(humidity, 1);
  Serial.println(" %");

  Serial.print("Air Status   : ");
  Serial.println(status);

  // ---------- CREATE LORA PACKET ----------

  String packet = "NODE3,AIR,";
  packet += status;
  packet += ",";
  packet += String(airQuality);
  packet += ",";
  packet += String(pm25, 1);
  packet += ",";
  packet += String(temperature, 1);
  packet += ",";
  packet += String(humidity, 1);

  // ---------- SEND THROUGH GROVE LORA ----------

  LoRaSerial.println(packet);

  Serial.print("LoRa Sent: ");
  Serial.println(packet);

  Serial.println("------------------------------");

  delay(3000);
}

More projects by sabharish3434