luni, 25 noiembrie 2019

Termostat MQTT cu ESP8266 (2)

    Acum un an si ceva, am publicat articolul Termostat MQTT cu ESP8266 pe care l-am testat in gol cca 3-4 luni. El nu a controlat o centrala termica sau un sistem de aer conditionat, ci doar a aprins un led rosu cand ar fi trebuit sa actioneze in gol.
   Zilele trecute am reluat testele, pornind o placa Raspberry Pi Zero W cu cardul SD de la o alta placa, ce avea instalat serverul broker Mosquitto dupa cum am prezentat in articolul Sonerie cu comandă locală sau prin protocol MQTT prin server Mosquitto (2)
    Am adaptat ultimul sketch prezentat in primul articol (MQTT_ESP8266_termostat_base.ino) sa aprinda afisajul doar cand apas butonul sau daca dau comenzi de pe telefon. La sketck-ul din link, afisajul OLED sta aprins mereu, dar nu se recomanda, deoarece textele raman imprimate... asa ca incarcati versiunea MQTT_ESP8266_termostat_ok.ino dupa ce finalizati testele.
   Deci, in mod normal, afisajul este stins, dar functioneaza termostatul:
- temperatura ambianta mai mare decat temperatura dorita
- temperatura ambianta mai scazuta decat temperatura dorita
   Daca se apasa butonul de pe cablaj sau se dau comenzi de pe telefon:
- temperatura ambianta mai mare decat temperatura dorita
- temperatura ambianta mai scazuta decat temperatura dorita
    Schema de conectare este eceeasi, bineinteles:
   Aplicatia folosita este aceeasi, IoT MQTT Panel.
unde am creat un un canal numit termostat
care e configurat astfel:
eu am completat doar numele, adresa IP a serverului (gasite de aplicatia Advanced IP scanner) si portul 1883 si conexiune TCP (ID-ul canalului este geberat automat de aplicatie).
   Dupa ce am creat butoane, indicatoarele si graficul, pe telefon apare asa:
   Pentru a creea un buton, grafic sau indicator, se apasa butonul + din partea de jos a ecranului

si se alege ce sa creez.

   Pentru cele 3 butoane, configuratiile sunt in stanga, iar in dreapta corespondenta din program (sketch):
- crestere temepratura

- scadere temperatura

- aprindere afisaj
unde "topic" este cel din linia 137

   Pentru cele indicatoare, configurarile sunt:
- temperatura reala
- umiditatea relativa a aerului
- temperatura dorita
- stare releu / led
unde in program, comenzile sunt:
   Pentru grafic, vom avea configurarile in aplicatie;
   De data aceasta nu am mai facut filmulete, dar pun 2 din ele, realizate anul trecut:


   Cred ca datele prezentate sunt suficiente sa realizati si voi un termostat de genul asta.
Eu mai am de implementat partea de conectare cu parola, dar nu am timp momentan de teste.





18 comentarii:

  1. Thank you so much. From Turkey with love

    RăspundețiȘtergere
  2. Buna ziua,

    Multumesc pentru proiect, am finalizat si testat pe placa de test, functioneaza perfect. Acum vin cu cateva intrebari daca se poate.
    1. Se pot implementa doua butoane pentru a regla temperatura fizic de pe placa?
    2. Raspberry daca a fost configurat ca broker MQTT, poate fi folosit si la alte proiecte? Intreb pentru ca am un raspberry alocat unui calendar si ma gandeam sa-l configurez MQTT ca tot sta in permanenta conectat la net.

    Cu respect.

    RăspundețiȘtergere
    Răspunsuri
    1. Salutari ! O sa pun si butoane fizice (asta a fost intentia de la inceput, dar..). Raspberry pi poate face si alte "treburi", la mine face si pe camera de supraveghere...

      Ștergere
    2. Multumesc,
      Inca o intrebare va rog, la conectarea unui releu in locul ledului, face functia tocmai invers, cresc temp sa porneasca centrala iar releul aclanseaza, la led este ok.
      Acum am vazut pe cablaj ca ati desenat deja trasee si ptr butoane. Astept cu interes orice modificare.
      O seara frumoasa sa aveti.

      Ștergere
    3. daca folositi modul de releu cu optocuplor, comenzile sunt pe logica inversa... schimbati HIGH cu LOW si viceversa

      Ștergere
  3. Gata, am facut modificarile, am configurat si raspberry folosit ptr un calendar, merge perfect. Acum urmeaza sa desenez un cablaj si sa-l pun la munca pana nu se termina iarna, sau incropesc pe o placa de test si voi finaliza cu cablaj dupa modificarile de butoane.
    Multumesc frumos.

    RăspundețiȘtergere
  4. Va salut,

    Imi cer scuze ca va deranjez iarasi, o intrebare, push buttonul pentru activare oledul este conectat la pin GPIO 15? Asa am vazut ca este declarat, cum este conectat, D8 + Vcc si GND cu rezistenta de 4k7 sau?

    RăspundețiȘtergere
    Răspunsuri
    1. GND----|==4k7==|---D8----buton---3V3, pe csblaj observ ca mai am prevazute butoane pentru D7 si D6 pentru reglare temperatura

      Ștergere
  5. Multumesc,

    Am vazut ca ati desenat pcb-ul si pentru celelalte doua butoane dar nu eram sigur ca veti folosi D6 si D7. Acum pot desena cablajul direct cu traseele ptr cele doua comenzi.
    De ieri este in teste si functioneaza perfect. Astazi mi-a venit si comanda de lcd-uri. Momentan functioneaza pe o linie de net cu IP routabil, deci poate fi actionat doar intranet. Am instalat varianta Pro a aplicatiei, exista optiunea de notificare la fiecare comanda de modificare temperatura indiferent de catre cine este modificata, am testat cu doua telefoane configurate si se primesc notificari.

    Multumesc inca o data pentru ajutor si binenteles pentru proiect/

    RăspundețiȘtergere
  6. Buna ziua,

    Am o nelamurire si vreau sa ma dumeriti daca se poate. Am configurat un dns dinamic pentru a actiona termostatul de la distanta. Problema este ca am scanat porturile cu Advanced Port Scanner iar pentru raspberry mi-a gasit port 22 ca fiind alocat pentru el. Ok, am deschis portul respectiv in router, am schimbat in schech portul din 1883 in 22 insa nu se mai conecteaza nici intranet nici internet. In schimb cu port 1883 merge perfect pe ambele variante. Ma blochez eu undeva sau nu inteleg ceva.

    Multumesc.

    RăspundețiȘtergere
    Răspunsuri
    1. Serverul Mozquitto foliseste portul 1883... gasiti IP-ul lui Raspberry si dati din router liber acelui IP cu port 1883...

      Ștergere
    2. vedeti https://nicuflorica.blogspot.com/2018/06/sonerie-cu-comanda-locala-sau-prin_13.html

      Ștergere
    3. Am inteles, nu stiam ca mozquitto foloseste 1883, am crezut ca trebuie sa aloc portul care l-a gasit scanerul, asa cu 1883 merge perfect

      Ștergere
  7. Buna ziua,
    Incerc sa schimb oledul cu un TFT 2.2 ILI9340, am reusit sa definesc grafica pe care o doresc insa nu ma descurc cu
    afisarea datelor.
    Aici am cadru pentru temperatura:
    tft.setTextColor(ILI9340_WHITE); //text afisat in cadru
    tft.setCursor( 170,55);
    tft.setTextSize(2);
    tft.print("ROOM TEMP:");
    tft.setTextSize(1);
    tft.print("O");
    tft.setTextSize(3);
    tft.print("C");

    Pentru afisare date am gasit un exemplu insa nu afiseaza
    void aratatemperatura(float temperature)//afisare temperatura in cadru
    {
    dtostrf(temperature, 2, 1, temperatureStr);
    Serial.println(temperatureStr);
    tft.setTextSize(5);
    tft.setTextColor(ILI9340_WHITE, ILI9340_BLACK );
    tft.setCursor(20,90);
    tft.print(temperatureStr);
    }
    Afisajul este functional doar cadru, pini sunt definiti...
    ...credeti ca ma puteti ajuta cu o idee? (sincer este un hoby prt mine, exersez cu proiecte publicate)
    Mulltumesc

    RăspundețiȘtergere
  8. eu am folosit afisajul cu driver SSD1306.h
    #include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
    // Initialize the OLED display using Wire library
    SSD1306 display(0x3c, 0, 2);
    ..............................................
    display.drawString(0, 48, "Heater =");
    if (incalzire == 0) display.drawString(74, 48, "OFF");
    else display.drawString(82, 48, "ON");
    display.display();

    daca ati gasit libraria functionala se poate modifica, dar nu sunt sigur ce ati facut acolo, ca nu vad ce librarie e, sa vad cum sunt comenzile...

    RăspundețiȘtergere
  9. #include "Adafruit_ILI9340.h" // https://github.com/glennirwin/Adafruit_ILI9340

    RăspundețiȘtergere