Sari la conținut
ELFORUM - Forumul electronistilor

Untold

Membru cunoscut
  • Număr conținut

    2.681
  • Înregistrat

  • Ultima Vizită

2 Urmăritori

Vizitatori Recenți Profil

2.551 citiri profil

Untold's Achievements

Grand Master

Grand Master (14/14)

  • First Post
  • Posting Machine Rare
  • Collaborator
  • Conversation Starter
  • Dedicated

Recent Badges

  1. Am primit senzorii de temperatura si afisajele OLED, le-am asamblat, am scris sketch-ul si...nu merge. UM se conecteaza la UF, dar UF nu primeste nimic de la UM si nici UM nu raspunde la comenzile de temp+/temp- si nici la wake-up. Dupa conectare, la 5 min, intra in deep sleep si nu se poate trezi decat cu butonul de reset de pe placa lui esp8266. Pana UM se conecteaza la UF, pe display scrie Unitate Mobila Termostat. Dupa ce se conecteaza, scrie temperatura setata 21.00 gr. Pe displayul de la UF scrie doar Centrala Termica si atat. Si nici daca in website (192.168.4.1) dau o comanda de +/- temp sau centrala oprita/centrala pornita, pe UF si UM nu se intampla nimic, nici pe display si nici in serial monitor. Atasez cele doua sketchuri, ultimele cu care au fost scrise esp-urile si poate ma puteti ajuta sa-i dau de cap. Nu vreau sa renunt la acest proiect, mi se pare interesant, desi e o versiune simpla, fara programari pe zile, nopti, temperaturi, etc. UF_Last.ino UM_Last.ino
  2. Cineva, ceva? Eu inca astept senzorii de temp si displayul de la aliexpres si apoi ma apuc de el. Sa vad ce carcase gasesc...
  3. Untold

    Vind lampi noi

    Am primit de ceva timp tuburile comandate. Ambalate impecabil, user serios. Recomand!
  4. #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.
  5. Multumesc frumos! Mie asa imi apare ca e.
  6. In sfarsit, mi-a facut doua coduri care nu dau erori la compilare, atat pentru UF, cat si pentru UM. Pentru UF am testat, e ok, functioneaza. Atasez aici ambele coduri, daca considerati ca mai trebuie modificari sau imbunatatiri.. P.S. Ambele unitati sunt cu display, UM are butoane fizice de + si - pentru setarea temperaturii si buton de wake-up. E nu stiu cum a facut el functia de nani, dar...daca va uitati peste cod, o sa va dati seama cu siguranta. UF_FInal.ino UM_FInal_2.ino
  7. M-a zapacit de tot Gepeto asta, mi-a dat sapte mii de coduri, si tot nu era cum voiam eu. UF sa aiba display care ar putea sta aprins incontinuu, ca acolo nu e problema de consum, fiind pe alimentator. UM sa doarma 5 min, dupa care sa se trezeazsca si sa-si faca verificarile, apoi sa adoarma iar, dar sa se trezeasca si la apasarea oricarui buton de pe UM. (centrala pornita/centrala oprita sau temp+/temp-)si dupa 5-10 secunde sa adoarma la loc. Displayul de la UM sa se aprinda doar cand setez temperatura din butoane sau opresc/pornesc centrala si asta doar pentru 20 sec, cam cum e lumina la display-ul telefonului. Modificarile de pe UM, sa apara pe display-ul UM dar si pe display-ul UF, iar pagina web sa fie pe UF, UM sa se conecteze la AP-ul UF si sa aiba pe ea doar display-ul si cele 4 butoane. Am notat cu UM - Unitatea Mobila si cu UF - Unitatea Fixa (cea de pe centrala). Scuze pentru atatea explicatii, dar nu stiu daca m-am facut inteles, eu nefiind priceput in ale programarii arduino. Multumesc frumos pentru orice ajutor. P.S. Sau, daca implica mai multa munca si pentru implementarea display-ului si pe UF, sa se renunte la el si sa ramana doar UM cu display.
  8. Revin cu doua noi coduri, atat pe UM (unitatea mobila care are implementata si functia de deep sleep) cat si pentru UF (unitatea fixa). La UF, cea care este la centrala, a fost implementat si un display, la fel ca pentru UM. Nu stiu cat sunt de functionale, nu le-am verificat inca. COD_LAST_UF_DISPLAY.ino COD_LAST_UM_DISPLAY.ino
  9. Am vorbit iar cu Gepeto, a facut codul pentru UF cu web page, iar pe cea mobila doar cu display si butoane care se conecteaza la AP-ul celei fixe si are si deep sleep. O sa testez mai tarziu ambele coduri. UF_COMPLET_VERIFICAT.ino UM_COMPLET_VERIFICAT.ino
  10. Cu drag! Ca si voi ma ajutati cand am nevoie! Am gasit o carcasa de la un alimentator mai vechi, de care am prins cu suruburi un incarcator de telefon (cubuletul ala) de 5V/1A si am bagat esp-ul, releul si tranzistorul in interior. Mai ramane sa-i mai pun si un led verde de power si cablul ce vine la centrala si unitatea fixa este gata. Va rog sa nu radeti de "opera" mea, am facut si eu cu ce-am gasit la indemana. Acum astept afisajul si senzorul ca sa fac si unitatea mobila. @fratello, pana la urma pagina web arata ca cea din pozele atasate de mine mai sus?
  11. Dar nu ai montat senzorul? Sau ai bagat senzorul in congelator.. Te-ai miscat repede, bravo! Abia astept sa-mi vina senzorii si displayul de pe Aliexpress sa il fac si eu. P.S. U8g2lib.h e libraria pt displayul tau?
  12. Interesant, dar imi prind urechile. Cum pot incarca propriul sketch, ca vad ca are doar prestabilite...
  13. Mi-a venit ideea sa mai adaug la unitatea mobila doua butoane fizice, + si - din care sa pot regla temperatura si un mic display OLED pe care sa se vada. (pentru cazul in care nu mai stau sa deschid telefonul). I-am cerut lui Gepeto un sketch cu niste explicatii. Eu inca nu am display OLED, dar imi voi cumpara. Atatsez codul cu butoane si display si explicatiile lui Gepeto (suna ciudat, dar asa imi place mie sa-i zic). "Adăugarea butoanelor fizice pentru reglarea temperaturii și a unui display OLED este o idee excelentă! ESP8266 ar trebui să aibă suficienți pini GPIO pentru a gestiona atât butoanele, cât și display-ul, deși va trebui să planificăm bine alocarea pinilor. Ce trebuie să facem: Butoanele fizice: Vom folosi două butoane: unul pentru a crește temperatura și unul pentru a o scădea. Fiecare buton va fi conectat la câte un pin GPIO și vom folosi „pull-up” intern pentru a reduce numărul de componente externe. Display OLED: Vom folosi un mic display OLED I2C, cum ar fi unul de 0.96 inch, cu rezoluție de 128x64 pixeli. Acest tip de display folosește doar două pini GPIO pentru comunicarea I2C: SDA și SCL. Pasul 1: Pinout ESP8266 ESP8266 are pini limitați, deci va trebui să planificăm cu atenție ce pini vom folosi pentru fiecare componentă: Butoane: Două pini GPIO (ex: GPIO12 și GPIO13). Display OLED: I2C folosește pinii SDA (GPIO4) și SCL (GPIO5). Pasul 2: Schimbarea în cod 1. Adăugăm butoanele fizice: Creăm un cod care va detecta apăsările butoanelor și va ajusta temperatura. 2. Adăugăm controlul OLED: Vom afișa temperatura actuală și cea țintă pe display-ul OLED. Explicații: Butoane fizice: Butoanele sunt conectate la pinii GPIO 12 și 13. Se folosesc pentru a crește sau scădea temperatura țintă. Temperatura este actualizată în timp real pe display și trimisă la unitatea fixă. Display OLED: Afișăm temperatura țintă și starea centralei (pornită/oprită). Folosim biblioteca Adafruit_SSD1306 pentru a gestiona afișajul OLED. Pagina Web: Păstrează funcționalitatea de setare a temperaturii și controlul centralei. Ce urmează: Asigură-te că pinii sunt corect conectați la butoane și la display-ul OLED. Încarcă noul sketch și testează funcționalitatea cu butoanele fizice și afișajul". Daca ar putea cineva sa testeze si acest cod, ar fi bine. Eu nu pot testa fara display, dar as putea sa ma uit in serial monitor sa vad ce misca pe acolo. cod_unitate_mobila_display_butoane.ino
  14. @fratello, uite cum trebuie sa apara: @teomishu am vazut prin sketch ca la 10.000 ms se face refresh-ul...daca maresc la 20 sau 30 de secunde, se reconecteaza mai rar. Pot pune chiar 1 min, ca nu afecteaza cu nimic.
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări