#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String url = "https://api.open-meteo.com/v1/forecast?latitude=47.332253&longitude=-1.063842¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m";
const int ledCold = 2;
//int leds[] = {D0,D1,D2,D3,D4,D5,D6,D7};
const int ledTestLux = 7;
// These constants should match the photoresistor's "gamma" and "rl10" attributes
const float GAMMA = 0.7;
const float RL10 = 50;
const int inputLux = 10;
HTTPClient http;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-C3!");
pinMode(ledCold, OUTPUT);
pinMode(ledTestLux, OUTPUT);
pinMode(inputLux, INPUT);
// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();
while(!Serial);
Serial.println("WiFi Setup done!");
WiFiConnect();
int currentTemp = getCurrentTemp();
displayTemp(currentTemp);
}
void WiFiConnect(void){
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
int getCurrentTemp(void){
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Getting current data...");
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP Code: ");
Serial.println(httpCode);
if (httpCode > 0) {
StaticJsonDocument<768> doc;
DeserializationError error = deserializeJson(doc, http.getString());
if (error) {
Serial.print(F("deserializeJson failed: "));
Serial.println(error.f_str());
delay(2500);
return -1000;
}
Serial.print("HTTP Status Code: ");
Serial.println(httpCode);
int currentTemp = doc["current"]["temperature_2m"].as<int>();
Serial.print("currentTemp: ");
Serial.println(currentTemp);
http.end();
return currentTemp;
}
}
}
float getLux(void){
int analogValue = analogRead( inputLux);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
return lux;
}
void displayTemp(int temp){
if(temp >= 27){
digitalWrite(D7, HIGH);
}
else if(temp >= 26 ){
digitalWrite(D6, HIGH);
}
else if(temp >= 24 ){
digitalWrite(D5, HIGH);
}
else if(temp >= 22 ){
digitalWrite(D4, HIGH);
}
else if(temp >= 20 ){
digitalWrite(D3, HIGH);
}
else if(temp >= 18 ){
digitalWrite(D2, HIGH);
}
else if(temp >= 16 ){
digitalWrite(D1, HIGH);
}
else {
digitalWrite(D0, HIGH);
}
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}