/*
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
}