Bandi Szasz Postat Octombrie 1 Partajează Postat Octombrie 1 @teomishu Ei nu merge ESP pe baterii, este ceva de munca la PCB si soft dar e perfect realizabil, am nenumarate device-uri facute care merg pe 1 sau 2 celule 18650 si trebuie incarcate 1 data la 2-3 luni. In cazul de fata se poate citii temperatura la 10-15minute ca nu e cuptor sa fie schimbari majore de temperatura sau se poate folosii senzor de temperatura cu alarma setabila care sa scoata ESPul din sleep cand se ajunge la temperatura setata combinat cu un ePaper se pot obtine consumuri extrem de mici. Totul tine de proiectarea circuitelor auxiliare astfel incat ESPul sa stea in sleep cat de mult posibil. Link spre comentariu
teomishu Postat Octombrie 1 Partajează Postat Octombrie 1 (editat) 2 hours ago, Bandi Szasz said: Ei nu merge ESP pe baterii Nu am spus ca ESP nu se poate alimenta din baterii. Doar ca sunt aplicatii gen termostate Wifi unde nu este indicat de folosit. Sunt alte posibilitati mult mai eficiente energetic. Orice ce ai face, un ESP (WiFi) consuma prea mult atunci cand porneste, pentru a fi folosit. Editat Octombrie 1 de teomishu Link spre comentariu
Bandi Szasz Postat Octombrie 1 Partajează Postat Octombrie 1 (editat) Cum am zis, pe PCB custom este foarte ok si pentru termostat. Un senzor temperatura cu functie de alarma (sunt unele care consuma 10uA), un Epaper care consuma practic nimic si un ESP32C3 ( consuma <30mA fara Wifi). Setezi senzorul sa trezeasca Esp-ul cand detecteaza o schimbare de 0.5grade ai un consum sub 30uA, cand e trezit ESP face update in cateva zeci de ms la Epaper si verifica daca s-au atins pragurile setate, daca au fost atinse porneste Wifi si da comanda catre releu sau brokerul de mesaje totul dureaza +/- 2s. Consum final mediu sub 1mA, te tine celula ala li-ion bine mersii, probabil o sa-l incarci o singura data pe timpul sezonului rece, nu trebuie cel putin din punctul meu de vedere sa tina 5ani, nici macar nu e sanatos pentru celula sa stea asa mt fara a fi ciclat. Da sunt si alternative mai bune dar pierzi avantajul wifi si comanda de la distanta. Am destule jucarii facute pt casa, toate pe ESPuri cu broker mesaje, backend pe java ( ruleaza pe rpi) si applicatie android. Unele trebuie incarcate la 2-3 luni, altele mai nici o data folosind un panou solar micut de 100mm si acel device are zeci de senzori pt calitate aer. Este mai greu si complex cu ESP wifi dar este mult mai des folosit si in deviceuri comerciale decat ai crede. Editat Octombrie 1 de Bandi Szasz Link spre comentariu
fratello Postat Octombrie 1 Partajează Postat Octombrie 1 (editat) Nu mi-a mers codul de pe pagina precedenta ; a trebuit (avand un display SH1106) sa il adaptez. #include <U8g2lib.h> #include <Wire.h> #include <DallasTemperature.h> #include <OneWire.h> #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define ONE_WIRE_BUS D2 // Pinul pentru senzorul de temperatură OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); ESP8266WebServer server(80); // Inițializare display SH1106 cu U8g2 U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); float temperaturaActuala = 0.0; float temperaturaTinta = 22.0; bool centralaPornita = false; // Prototipurile funcțiilor void handleRoot(); void handleChangeTemp(); void handleToggleCentrala(); void handleTemperatureData(); void updateDisplay(); void setup() { Serial.begin(115200); sensors.begin(); // Inițializăm senzorul de temperatură // Inițializăm display-ul SH1106 u8g2.begin(); WiFi.softAP("Termostat_AP", "12345678"); server.on("/", handleRoot); server.on("/changeTemp", handleChangeTemp); server.on("/toggleCentrala", handleToggleCentrala); server.on("/temperatureData", handleTemperatureData); server.begin(); Serial.println("Serverul a pornit!"); updateDisplay(); } void updateDisplay() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(0, 10, "Temp. curenta:"); u8g2.setCursor(0, 20); u8g2.print(temperaturaActuala); u8g2.drawStr(0, 50, "Temp. setata:"); u8g2.setCursor(0, 60); u8g2.print(temperaturaTinta); u8g2.sendBuffer(); } void handleRoot() { String pagina = "<html><head><style>"; pagina += "body { text-align: center; font-family: Arial; }"; // Aliniere pe centru pagina += ".buton {font-size: 20px; padding: 10px 20px; margin: 20px; border: none; cursor: pointer;}"; pagina += ".verde {background-color: #90EE90; color: black;}"; // Verde deschis pentru "Pornit" pagina += ".rosu {background-color: #FFCCCB; color: black;}"; // Roșu deschis pentru "Oprit" // Stil pentru LED-uri pagina += ".led {width: 20px; height: 20px; border-radius: 50%; display: inline-block; margin-bottom: 10px;}"; // LED-uri rotunde, inline pagina += ".led-verde {background-color: green;}"; // LED verde pagina += ".led-rosu {background-color: red;}"; // LED roșu pagina += "</style></head><body>"; pagina += "<h1>Setare temperatura centrala</h1>"; pagina += "<p>Temperatura actuala: " + String(temperaturaActuala) + "C</p>"; pagina += "<p>Temperatura tinta: " + String(temperaturaTinta) + "C</p>"; // Butoane pentru controlul temperaturii pagina += "<form action=\"/changeTemp\" method=\"get\">"; pagina += "<input type=\"submit\" name=\"action\" value=\"+Temp\" class=\"buton rosu\">"; // Buton +Temp roșu pagina += "<input type=\"submit\" name=\"action\" value=\"-Temp\" class=\"buton verde\">"; // Buton -Temp verde pagina += "</form>"; // LED verde în stânga butonului "Pornit" și LED roșu în dreapta butonului "Oprit" pagina += "<form action=\"/toggleCentrala\" method=\"get\">"; pagina += "<div style='display: flex; justify-content: center;'>"; // Flexbox pentru a aranja LED-urile și butoanele pagina += "<div style='display: flex; align-items: center; justify-content: center;'>"; // Aranjare flex pentru "Pornit" if (centralaPornita) { pagina += "<div class='led led-verde' style='margin-right: 10px;'></div>"; // LED verde aprins în stânga butonului Pornit } else { pagina += "<div class='led led-verde' style='display:none;'></div>"; // LED verde ascuns } pagina += "<input type=\"submit\" value=\"Pornit\" class=\"buton verde\">"; // Buton verde pentru "Pornit" pagina += "</div>"; pagina += "<div style='display: flex; align-items: center; justify-content: center; margin-left: 20px;'>"; // Aranjare flex pentru "Oprit" pagina += "<input type=\"submit\" value=\"Oprit\" class=\"buton rosu\">"; // Buton roșu pentru "Oprit" if (!centralaPornita) { pagina += "<div class='led led-rosu' style='margin-left: 10px;'></div>"; // LED roșu aprins în dreapta butonului Oprit } else { pagina += "<div class='led led-rosu' style='display:none;'></div>"; // LED roșu ascuns } pagina += "</div>"; pagina += "</div>"; pagina += "</form>"; pagina += "</body></html>"; server.send(200, "text/html", pagina); // Trimiterea paginii HTML către client } void handleChangeTemp() { String action = server.arg("action"); // Modificarea temperaturii țintă în funcție de acțiune if (action == "+Temp") { temperaturaTinta += 0.5; } else if (action == "-Temp") { temperaturaTinta -= 0.5; } updateDisplay(); // Actualizăm OLED-ul cu noile valori handleRoot(); // Reîncărcăm pagina cu valorile actualizate } void handleToggleCentrala() { centralaPornita = !centralaPornita; // Comutăm starea centralei updateDisplay(); // Actualizăm OLED-ul cu noile valori handleRoot(); // Reîncărcăm pagina cu valorile actualizate } void handleTemperatureData() { sensors.requestTemperatures(); // Solicităm citirea temperaturii temperaturaActuala = sensors.getTempCByIndex(0); // Dacă senzorul este deconectat sau nefuncțional, returnăm o eroare if (temperaturaActuala == DEVICE_DISCONNECTED_C) { server.send(200, "text/plain", "Eroare: Senzor deconectat!"); } else { // Trimiterea temperaturii actuale și țintei către unitatea fixă String data = "Temperatura: " + String(temperaturaActuala) + "\n"; data += "Tinta: " + String(temperaturaTinta); server.send(200, "text/plain", data); } } void loop() { server.handleClient(); // Gestionăm cererile clientului } Rezultatul (preliminar) se vede mai jos. Editat Octombrie 1 de fratello Link spre comentariu
Untold Postat Octombrie 2 Autor Partajează Postat Octombrie 2 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? Link spre comentariu
fratello Postat Octombrie 2 Partajează Postat Octombrie 2 Nu am pus senzorul DS18B20. Da, U8g2lib.h este libraria pentru SH1106 (1,3"). Iti multumesc pt ca ne-ai impartasit proiectul ! Link spre comentariu
Untold Postat Octombrie 2 Autor Partajează Postat Octombrie 2 (editat) Acum 2 ore, fratello a spus: Iti multumesc pt ca ne-ai impartasit proiectul ! 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? Editat Octombrie 2 de Untold Link spre comentariu
teomishu Postat Octombrie 2 Partajează Postat Octombrie 2 On 10/1/2024 at 3:25 PM, Bandi Szasz said: Cum am zis, pe PCB custom este foarte ok si pentru termostat. Un senzor temperatura cu functie de alarma Intr-adevăr, daca se concepe un PCB cu consum minim , si daca se folosesc senzori care pot scoate ESP din sleep doar daca este cazul, se poate reduce mult consumul. Link spre comentariu
teomishu Postat Octombrie 2 Partajează Postat Octombrie 2 @Untold, dacă tot te-ai pus bine cu "GePeTo" al tău, întrabă-l ce poți pune în loc de delay(10000) din loop() pentru a reduce consumul din baterie. Link spre comentariu
sesebe Postat Octombrie 2 Partajează Postat Octombrie 2 Dar cip-ul asta nu are modul de RTC cu alimentare separata și quartz de 32768hz? Ar trebui sa aibă și atunci se poate seta sa se trezească la un anumit interval (1-3-5 min), sa citească temperatura și sa transmită comanda necesara și apoi sa între înapoi în sleep. Un aparat conceput sa funcționeze exclusiv din baterii trebuie sa aibă un consum mic. Link spre comentariu
Bandi Szasz Postat Octombrie 2 Partajează Postat Octombrie 2 (editat) @sesebe Are ( chiar integrat tot ce trebuie, WDT-ul poate tine in sleep pana peste o ora parca ) dar cum zicea si colegu 'teomishu' ESP este destul de costisitor de scos din sleep, sa consumi 40-50mA pentru a citii un senzor de temperatura nu e chiar ideal, pe cand un senzor de temperatura cu functie de alarma care consuma 10 - 20uA cu un update rate de 1-2s si poate trezii ESP-ul doar cand s-a modificat efectiv temperatura si ESPul are de facut si altceva decat sa verifice din nou si sa vada ca a verificat degeaba pentru ca nu s-a schimbat si nu are nimic de facut. Acum depinde si ce date vrei prin WIFI pe telefon si cat de real time sa fie, de exemplu eu la device-urile mele avand un intreg ecosistem ( backend, baza de date, coada de mesaje, etc.. ) modific o setare pe telefon ( applicatie android ) se comunica la backend, se persista in baza de date si se genereaza un eveniment pe coada de mesaje mai apoi cu prima ocazie cand iese ESP-ul din sleep o sa fie notificat prin coada de mesaje ca exista un eveniment de prelucat asa ca un update de setari la un dispozitiv de al meu pe baterii poate dura de la cateva minute pana la cateva ore sa fie efectuat cap coada insa doar asa poti obtine durata de viata cat mai lunga pe baterii + WIFI. Editat Octombrie 2 de Bandi Szasz Link spre comentariu
Untold Postat Octombrie 3 Autor Partajează Postat Octombrie 3 (editat) Acum 17 ore, fratello a spus: Da, arata ca aici. Perfect. Editat Octombrie 3 de Untold Link spre comentariu
Untold Postat Octombrie 3 Autor Partajează Postat Octombrie 3 (editat) 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 Editat Octombrie 3 de Untold Link spre comentariu
Untold Postat Octombrie 3 Autor Partajează Postat Octombrie 3 (editat) 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 Editat Octombrie 3 de Untold Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum