Text Share Online

/*
  ESP32: DHT11 + HC-SR04 -> HTTP POST to Node-RED
  – DHT11 DATA -> GPIO4
  – HC-SR04 TRIG -> GPIO5
  – HC-SR04 ECHO -> GPIO18
  – Sends JSON {temperature, humidity, distance} to Node-RED endpoint:
      http://172.16.11.203:1880/sensor
  NOTE: ECHO pin from HC-SR04 is usually 5V. You said no resistor, so keep that in mind:
        Direct connection may damage ESP32. If possible add a proper level shifter later.
*/

#include <WiFi.h>
#include <HTTPClient.h>
#include “DHT.h”

#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

#define TRIG_PIN 5
#define ECHO_PIN 18

// ——- Your Wi-Fi credentials (as provided) ——-
const char* ssid = “CPS-310”;
const char* password = “ab3@cps310”;
// —————————————————-

// ——- Node-RED endpoint (from your ipconfig screenshot) ——-
const char* nodeRedUrl = “http://172.16.11.203:1880/sensor”;
// ——————————————————————

void setup() {
  Serial.begin(115200);
  delay(100);
  dht.begin();

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  Serial.print(“Connecting to WiFi “);
  Serial.print(ssid);
  Serial.print(” … “);
  WiFi.begin(ssid, password);

  unsigned long start = millis();
  while (WiFi.status() != WL_CONNECTED) {
    delay(300);
    Serial.print(“.”);
    if (millis() – start > 20000) { // 20s timeout
      Serial.println();
      Serial.println(“Failed to connect to WiFi after 20s. Restarting…”);
      ESP.restart();
    }
  }
  Serial.println();
  Serial.print(“WiFi connected. ESP32 IP = “);
  Serial.println(WiFi.localIP());
}

float readDistanceCm() {
  // send trigger pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000); // 30 ms timeout
  if (duration == 0) return -1.0; // out of range or no echo
  float distance = (float)duration * 0.0343f / 2.0f; // speed of sound formula (cm)
  return distance;
}

void postToNodeRed(float temp, float hum, float dist) {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println(“WiFi not connected – skipping POST”);
    return;
  }

  HTTPClient http;
  http.begin(nodeRedUrl);
  http.addHeader(“Content-Type”, “application/json”);

  // Build JSON payload
  String payload = “{“temperature”:” + String(temp, 2) +
                   “,”humidity”:” + String(hum, 2) +
                   “,”distance”:” + String(dist, 2) + “}”;

  int httpCode = http.POST(payload);
  if (httpCode > 0) {
    Serial.print(“POST code: “);
    Serial.println(httpCode);
    // Optional: print response body
    // String resp = http.getString(); Serial.println(resp);
  } else {
    Serial.print(“POST failed, error: “);
    Serial.println(httpCode);
  }
  http.end();
}

void loop() {
  float hum = dht.readHumidity();
  float temp = dht.readTemperature();
  float dist = readDistanceCm();

  if (isnan(hum) || isnan(temp)) {
    Serial.println(“DHT11 read failed”);
  } else {
    Serial.printf(“Temp: %.2f C | Humidity: %.2f %% | Distance: %.2f cmn”,
                  temp, hum, dist);
    postToNodeRed(temp, hum, dist);
  }

  delay(2000); // wait 2 seconds before next reading
}
Share This: