#include <Stepper.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#include <DHTesp.h>
// ThingSpeak Fields
// 1 - RGB Bulb (int) (0-5 Colors) (Read)
// 2 - TubeLight (int) (ON/OFF) (Read)
// 3 - Ceiling Fan (int) (ON/OFF) (Read)
// 4 - Temperature (float) (Write)
// 5 - Humidity (float) (Write)
// Wifi
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
WiFiClient client;
// ThingSpeak
unsigned long counterChannelNumber = 2646877;
const char * myCounterReadAPIKey = "WX6PZ309V69Z18KS";
const char * myCounterWriteAPIKey = "YU6NBHQUDAR0HCN1";
int statusCode;
// Stepper Motor (Ceiling Fan)
float stepmax = 360;
Stepper Stepper1(stepmax, 15, 2, 0, 4);
// Lights (RGB Bulb & TubeLight)
int RGB[] = {13, 14, 12};
int TubeLight = 25;
//DHT22
DHTesp temp;
TempAndHumidity data;
void setup() {
// PinModes
Serial.begin(115200);
pinMode(RGB[0], OUTPUT);
pinMode(RGB[1], OUTPUT);
pinMode(RGB[2], OUTPUT);
LedRGB(0, 0, 255);
temp.setup(18, DHTesp::DHT22);
// Wifi Connection
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
Serial.println("Attempting to Connect the WiFi!");
int attempt = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
attempt++;
Serial.println("Connecting Attempt No: " + String(attempt));
}
Serial.println("Wifi connected! Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
// ThingSpeak Connection
ThingSpeak.begin(client);
}
int RefreshRate = 100;
void loop() {
delay(RefreshRate);
Stepper1.step(-10);
/*LedRGB(255, 0, 255);
delay(1000);
LedRGB(0, 255, 255);
delay(1000);
LedRGB(255, 255, 0);
delay(1000);*/
}
void ReadRGBBulb() {
long _rgb = ThingSpeak.readLongField(counterChannelNumber, 1, myCounterReadAPIKey);
statusCode = ThingSpeak.getLastReadStatus();
if (statusCode == 200) {
Serial.println("Read Successfull (RGBBulb)!");
} else {
Serial.println("Problem Reading (RGBBulb), Error Code: " + String(statusCode));
}
}
void ReadTubeLight() {
long _rgb = ThingSpeak.readLongField(counterChannelNumber, 1, myCounterReadAPIKey);
statusCode = ThingSpeak.getLastReadStatus();
if (statusCode == 200) {
Serial.println("Read Successfull (RGBBulb)!");
} else {
Serial.println("Problem Reading (RGBBulb), Error Code: " + String(statusCode));
}
}
void WriteTempHumi()
{
data = temp.getTempAndHumidity();
Serial.println("Temp : " + String(data.temperature));
Serial.println("Humi : " + String(data.humidity));
ThingSpeak.setField(4, data.temperature);
ThingSpeak.setField(5, data.humidity);
statusCode = ThingSpeak.writeFields(counterChannelNumber, myCounterWriteAPIKey);
if (statusCode == 200) {
Serial.println("Updated Successfull (Temp/Humi)!");
} else {
Serial.println("Problem Updating (Temp/Humi), Error Code: " + String(statusCode));
}
}
void SetLedRGB(int _color)
{
switch (_color)
{
case 0:
LedRGB(255, 255, 255); //Off
break;
case 1:
LedRGB(0, 255, 255); //Red
break;
case 2:
LedRGB(255, 0, 255); //Green
break;
case 3:
LedRGB(255, 255, 0); //Blue
break;
}
}
void LedRGB(int red_value, int green_value, int blue_value)
{
analogWrite(RGB[0], red_value);
analogWrite(RGB[1], green_value);
analogWrite(RGB[2], blue_value);
}