#include <WiFi.h>
#include "ThingSpeak.h" // always include thingspeak header file after other header files and custom macros
#define SECRET_SSID "Wokwi-GUEST"
#define SECRET_PASS ""
#define SECRET_CH_ID_WEATHER_STATION 3326704 // Greenhouse Feedback – Smith
#define SECRET_READ_APIKEY_STATUS "7I0Z2JJT2FBWR2V7" // Correct Read API Key
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;
int keyIndex = 0;
WiFiClient client;
// Feedback channel details
unsigned long weatherStationChannelNumber = SECRET_CH_ID_WEATHER_STATION;
unsigned int statusFieldNumber = 1;
const char* myStatusReadAPIKey = SECRET_READ_APIKEY_STATUS;
int RedLED = 2;
int GreenLED = 4;
int BlueLED = 16;
void setup() {
Serial.begin(115200);
pinMode(RedLED, OUTPUT);
pinMode(GreenLED, OUTPUT);
pinMode(BlueLED, OUTPUT);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
int statusCode = 0;
// Connect or reconnect to WiFi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(SECRET_SSID);
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected");
}
// Read humidity status from Feedback channel
String humidityStatus = ThingSpeak.readStringField(
weatherStationChannelNumber,
statusFieldNumber,
myStatusReadAPIKey
);
statusCode = ThingSpeak.getLastReadStatus();
if (statusCode == 200) {
Serial.println("Greenhouse state: " + humidityStatus);
if (humidityStatus == "Low") {
digitalWrite(RedLED, HIGH);
digitalWrite(GreenLED, LOW);
digitalWrite(BlueLED, LOW);
}
else if (humidityStatus == "High") {
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, LOW);
digitalWrite(BlueLED, HIGH);
}
else { // Normal
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, HIGH);
digitalWrite(BlueLED, LOW);
}
} else {
Serial.println("Problem reading channel. HTTP error code " + String(statusCode));
}
delay(15000);
}