#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Datele WiFi
const char* ssid = "your_SSID"; // Numele rețelei
const char* password = "your_PASSWORD"; // Parola rețelei
// Variabile globale
float temperaturaSetata = 21.0;
bool centralaPornita = false;
// Crearea serverului
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
EEPROM.begin(512); // Initializare EEPROM
WiFi.softAP(ssid, password); // Crearea unui AP
Serial.println("AP creat");
// Initializează ecranul OLED
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Centrala Termica");
display.display();
// Configurarea serverului
server.on("/", HTTP_GET, []() {
String html = "<html><head><style>";
// CSS pentru a centra conținutul și a stiliza butoanele și LED-urile
html += "body { text-align: center; font-family: Arial; }";
html += ".container { display: inline-block; }";
html += ".btn { font-size: 20px; padding: 10px; margin: 10px; border-radius: 10px; }";
html += ".btn-on { background-color: green; color: white; }";
html += ".btn-off { background-color: red; color: white; }";
html += ".btn-temp-up { background-color: blue; color: white; }";
html += ".btn-temp-down { background-color: orange; color: white; }";
html += ".led { display: inline-block; width: 20px; height: 20px; margin-left: 10px; border-radius: 50%; }";
html += ".led-on { background-color: green; }";
html += ".led-off { background-color: red; }";
html += "</style></head><body>";
html += "<h1>Setare temperatura centrala</h1>";
html += "<p>Temperatura actuala: " + String(temperaturaSetata) + "C</p>";
html += "<div class='container'>";
// Butoanele pentru ajustarea temperaturii
html += "<form action=\"/setTemperature\" method=\"get\">";
html += "<button class='btn btn-temp-up' name=\"temp\" value=\"" + String(temperaturaSetata + 0.5) + "\">Temp+</button>";
html += "<button class='btn btn-temp-down' name=\"temp\" value=\"" + String(temperaturaSetata - 0.5) + "\">Temp-</button>";
html += "</form>";
// Buton pentru pornirea centralei, cu LED verde doar când e pornită
html += "<form action=\"/turnOn\" method=\"get\"><button class='btn btn-on'>Centrala Pornit</button>";
if (centralaPornita) {
html += "<div class='led led-on'></div>"; // LED verde când centrala e pornită
}
html += "</form>";
// Buton pentru oprirea centralei, cu LED roșu doar când e oprită
html += "<form action=\"/turnOff\" method=\"get\"><button class='btn btn-off'>Centrala Oprit</button>";
if (!centralaPornita) {
html += "<div class='led led-off'></div>"; // LED roșu când centrala e oprită
}
html += "</form>";
html += "</div>";
html += "</body></html>";
server.send(200, "text/html", html);
});
server.on("/setTemperature", HTTP_GET, []() {
if (server.hasArg("temp")) {
temperaturaSetata = server.arg("temp").toFloat();
Serial.println("Temperatura setata: " + String(temperaturaSetata));
EEPROM.put(0, temperaturaSetata); // Salvează temperatura în EEPROM
EEPROM.commit();
}
server.sendHeader("Location", "/");
server.send(302, "text/plain", "");
});
server.on("/turnOn", HTTP_GET, []() {
centralaPornita = true;
Serial.println("Centrala pornita!");
server.sendHeader("Location", "/");
server.send(302, "text/plain", "");
});
server.on("/turnOff", HTTP_GET, []() {
centralaPornita = false;
Serial.println("Centrala oprita!");
server.sendHeader("Location", "/");
server.send(302, "text/plain", "");
});
server.begin();
Serial.println("Server pornit");
}
void loop() {
server.handleClient(); // Gestionează cererile clientului
}
Asta e pentru unitatea fixa
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
#include <DHT.h>
// Configurații OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Configurații WiFi
const char* ssid = "your_SSID"; // Numele rețelei
const char* password = "your_PASSWORD"; // Parola rețelei
const char* serverURL = "http://192.168.4.1"; // Adresa IP a unității fixe (UF)
// Pin pentru butonul de wake-up
#define WAKEUP_BUTTON_PIN 4 // Pinul la care este conectat butonul de trezire
// Configurații pentru senzorul de temperatură (exemplu folosind un senzor DHT)
#define DHTPIN 2 // Pinul la care este conectat senzorul DHT
#define DHTTYPE DHT11 // Tipul senzorului (DHT11 sau DHT22)
DHT dht(DHTPIN, DHTTYPE);
// Pinuri pentru butoane fizice de temperatură
#define TEMP_PLUS_PIN 5 // Buton pentru creștere temperatură
#define TEMP_MINUS_PIN 12 // Buton pentru scădere temperatură
// Variabile globale
float temperaturaSetata = 21.0;
WiFiClient wifiClient; // Creează un obiect WiFiClient
void setup() {
Serial.begin(115200);
dht.begin();
// Configurare pini pentru butoane
pinMode(WAKEUP_BUTTON_PIN, INPUT_PULLUP);
pinMode(TEMP_PLUS_PIN, INPUT_PULLUP);
pinMode(TEMP_MINUS_PIN, INPUT_PULLUP);
// Initializează display-ul OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Eroare la initializarea OLED"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Unitate Mobila");
display.display();
// Conectare la WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectat la WiFi");
// Verifică dacă butonul de wake-up este apăsat
if (digitalRead(WAKEUP_BUTTON_PIN) == LOW) {
Serial.println("Unitatea a fost trezită de buton!");
} else {
// Dacă butonul nu este apăsat, intră în deep sleep
Serial.println("Intrare in deep sleep pentru 5 minute...");
ESP.deepSleep(5 * 60 * 1000000); // 5 minute în microsecunde
}
}
void loop() {
// Citirea temperaturii de la senzor
float temperatura = dht.readTemperature();
if (isnan(temperatura)) {
Serial.println("Eroare la citirea senzorului de temperatură!");
return;
}
// Verifică apăsările pe butoanele de modificare a temperaturii
if (digitalRead(TEMP_PLUS_PIN) == LOW) {
temperaturaSetata += 0.5;
delay(200); // Debouncing pentru buton
}
if (digitalRead(TEMP_MINUS_PIN) == LOW) {
temperaturaSetata -= 0.5;
delay(200); // Debouncing pentru buton
}
// Afișează temperatura setată pe display
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temp Setata: ");
display.print(temperaturaSetata);
display.println(" C");
display.print("Temp Actuala: ");
display.print(temperatura);
display.println(" C");
display.display();
// Trimite datele către unitatea fixă (UF)
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(wifiClient, String(serverURL) + "/updateTemperature?temp=" + String(temperatura));
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.printf("Răspuns: %s\n", http.getString().c_str());
} else {
Serial.printf("Eroare HTTP: %s\n", http.errorToString(httpResponseCode).c_str());
}
http.end();
}
// Intră din nou în deep sleep după 10 secunde
delay(10000);
ESP.deepSleep(5 * 60 * 1000000); // 5 minute în microsecunde
}
Iar asta pentru unitatea mobila.