project — ESP32 simulation

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

Components

Sketch code

#include <WiFi.h>
#include <time.h>
#include <PubSubClient.h> 
#include <DHT.h>          


#define TRIG_PIN 5
#define ECHO_PIN 18
#define POT_PIN 34       
#define DHT_PIN 15         
#define DHTTYPE DHT22   
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.hivemq.com";

DHT dht(DHT_PIN, DHTTYPE); 
WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password); 
  while (WiFi.status() != WL_CONNECTED) { 
    delay(500); 
    Serial.print("."); 
  }
  
  Serial.println("\nWiFi Connected!");
  configTime(7 * 3600, 0, "pool.ntp.org"); 
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "HELMET-ESP32-";
    clientId += String(random(0xffff), HEX);
    
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(POT_PIN, INPUT); 
  
  dht.begin(); 
  
  setup_wifi();
  
  client.setServer(mqtt_server, 1883); 
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop(); 

  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) return;
  char timeDisplay[30];
  strftime(timeDisplay, sizeof(timeDisplay), "%Y-%m-%d %H:%M:%S", &timeinfo);
  

  digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  long duration = pulseIn(ECHO_PIN, HIGH, 30000);
  int distance = duration * 0.034 / 2;
  String status = (distance > 0 && distance <= 50) ? "DETECTED" : "CLEAR";
  
 
  float temp = dht.readTemperature(); 
  float hum = dht.readHumidity();    
  
  if (isnan(temp)) temp = 0.0;
  if (isnan(hum)) hum = 0.0;
  
 
  int impactValue = analogRead(POT_PIN); 
  String impactStatus = "NORMAL";
  if (impactValue > 3000) { 
    impactStatus = "CRASH_DETECTED";
  }
 
  String jsonPayload = "{";
  jsonPayload += "\"timestamp\":\"" + String(timeDisplay) + "\",";
  jsonPayload += "\"dht22\":{\"temp\":" + String(temp, 1) + ",\"hum\":" + String(hum, 1) + "},";
  jsonPayload += "\"mmWave\":{\"dist\":" + String(distance) + ",\"status\":\"" + status + "\"},";
  jsonPayload += "\"accident\":{\"impact_g\":" + String(impactValue) + ",\"status\":\"" + impactStatus + "\"},";
  jsonPayload += "\"SOURCE\":\"HELMET_DIRECT\"}";
  
 
  Serial.print("Publishing: ");
  Serial.println(jsonPayload);
  
  if (client.publish("sensor/my_helmet_test", jsonPayload.c_str())) {
    if (impactStatus == "CRASH_DETECTED") {
      Serial.println("🚨 [ALERT] Crash data logged to MQTT!");
    } else {
      Serial.println("✅ MQTT Logged");
    }
  } else {
    Seri

More projects by isarakea