#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <DHTesp.h>
#define DHT_PIN 15
#define SOIL_PIN 34
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// Replace with your Codespaces HTTPS address
const char* API_URL =
"https://refactored-chainsaw-9759w5vwv79c7vvg-5000.app.github.dev/api/sensors/readings";
// Use a dedicated development token
const char* DEVICE_TOKEN = "3f2d0fc84361960dff1de8d372a01ff574c234a515d9ffe9468384133db1e3c5";
DHTesp dht;
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, 6);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
Serial.println("TemoLinks IoT monitoring started!");
}
void loop() {
TempAndHumidity data = dht.getTempAndHumidity();
int raw = analogRead(SOIL_PIN);
int moisture = constrain(map(raw, 0, 4095, 0, 100), 0, 100);
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("DHT22 reading failed");
delay(3000);
return;
}
if (WiFi.status() == WL_CONNECTED) {
WiFiClientSecure client;
// Simulation-only TLS configuration.
// Replace with certificate validation for real hardware.
client.setInsecure();
HTTPClient http;
if (http.begin(client, API_URL)) {
http.addHeader("Content-Type", "application/json");
http.addHeader("X-Device-Token", DEVICE_TOKEN);
String payload = "{";
payload += "\"temperature\":" + String(data.temperature, 2);
payload += ",\"humidity\":" + String(data.humidity, 2);
payload += ",\"soilMoisture\":" + String(moisture);
payload += "}";
int responseCode = http.POST(payload);
Serial.println("Sending to TemoLinks...");
Serial.println(payload);
Serial.print("HTTP response: ");
Serial.println(responseCode);
if (responseCode > 0) {
Serial.println(http.getString());
}
http.end();
} else {
Serial.println("Failed to initialize HTTP request");
}
}
delay(5000);
}