// --------- FORCED includes (quick test) ---------
// Comment out any previous detection block and paste ini instead.
#include <Arduino.h>
#include <WiFi.h>
// Force Blynk include (most common header for ESP32)
#if defined(__has_include)
#if __has_include(<BlynkSimpleEsp32.h>)
#include <BlynkSimpleEsp32.h>
#define HAS_BLYNK 1
#else
// try a fallback header name (less common), comment/uncomment if needed
//#include <BlynkEdgent.h>
//#define HAS_BLYNK 1
#define HAS_BLYNK 0
#endif
#else
#include <BlynkSimpleEsp32.h>
#define HAS_BLYNK 1
#endif
// Force DHT include (Adafruit/most common)
#if defined(__has_include)
#if __has_include(<DHT.h>)
#include <DHT.h>
#define HAS_DHT 1
#define DHT_IMPL_ADAFRUIT 1
#elif __has_include(<DHTesp.h>)
#include <DHTesp.h>
#define HAS_DHT 1
#define DHT_IMPL_DHTESP 1
#else
#define HAS_DHT 0
#endif
#else
#include <DHT.h>
#define HAS_DHT 1
#define DHT_IMPL_ADAFRUIT 1
#endif
#if defined(DHT_IMPL_ADAFRUIT) && __has_include(<Adafruit_Sensor.h>)
#include <Adafruit_Sensor.h>
#endif
// If Adafruit used, create pointer; if DHTesp used, create object
#if HAS_DHT
#if defined(DHT_IMPL_DHTESP)
DHTesp dht;
#elif defined(DHT_IMPL_ADAFRUIT)
#ifndef DHTTYPE
#define DHTTYPE DHT22
#endif
DHT *dht_ada = nullptr;
#endif
#endif