Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:avaduva:basic_smart_home [2021/05/25 20:51]
petru.mateescu
pm:prj2021:avaduva:basic_smart_home [2021/05/25 23:05] (current)
petru.mateescu
Line 23: Line 23:
  
 ==Schema bloc ==  ==Schema bloc == 
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_schema.png?700 |}}+{{:​pm:​prj2021:​avaduva:​wifi_central_heating_schema.jpg?700}}
  
  
Line 42: Line 42:
   ​   ​
 ==Schema electrică== ==Schema electrică==
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_electric.png?700}}+{{:​pm:​prj2021:​avaduva:​wifi_central_heating_electric.jpg?700}}
  
  
Line 48: Line 48:
 Mediul de programare ales este platforma [[https://​www.arduino.cc/​en/​software|Arduino IDE]] cu setările aferente microcontroller-ului NodeMCU ESP8266. Mediul de programare ales este platforma [[https://​www.arduino.cc/​en/​software|Arduino IDE]] cu setările aferente microcontroller-ului NodeMCU ESP8266.
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_setari.png?400}}+{{:​pm:​prj2021:​avaduva:​wifi_central_heating_setari.jpg?400}}
  
 Aplicația aleasă pentru comunicarea dintre µc și smartphone este [[https://​blynk.io/​|Blynk]],​ disponibilă atât pe [[https://​play.google.com/​store/​apps/​details?​id=cc.blynk&​hl=en_US|Android]] cât și pe [[https://​apps.apple.com/​us/​app/​blynk-iot-for-arduino-esp32/​id808760481|iOS]]. Aceasta are o interfață simplă și este ușor de folosit. În cadrul proiectului,​ aplicația conține trei elemente: Aplicația aleasă pentru comunicarea dintre µc și smartphone este [[https://​blynk.io/​|Blynk]],​ disponibilă atât pe [[https://​play.google.com/​store/​apps/​details?​id=cc.blynk&​hl=en_US|Android]] cât și pe [[https://​apps.apple.com/​us/​app/​blynk-iot-for-arduino-esp32/​id808760481|iOS]]. Aceasta are o interfață simplă și este ușor de folosit. În cadrul proiectului,​ aplicația conține trei elemente:
Line 67: Line 67:
 Pentru comunicarea dintre NodeMCU și aplicația Blynk folosesc bibliotecile ''​Blynk.h'',​ ''​ESP8266WiFi.h'',​ ''​BlynkSimpleEsp8266.h'',​ dar și un cod de autorizare (același și în codul sursă și în aplicația software) și elementele de conectare ale µc cu adresa wifi (id-ul și parola): Pentru comunicarea dintre NodeMCU și aplicația Blynk folosesc bibliotecile ''​Blynk.h'',​ ''​ESP8266WiFi.h'',​ ''​BlynkSimpleEsp8266.h'',​ dar și un cod de autorizare (același și în codul sursă și în aplicația software) și elementele de conectare ale µc cu adresa wifi (id-ul și parola):
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_auth.png?300}}+  #include <Blynk.h> 
 +  #include <​ESP8266WiFi.h>​ 
 +  #include <​BlynkSimpleEsp8266.h>​ 
 +   
 +  char auth[] = "​Introdu_tokenul_de_autorizare";​ 
 +  char ssid[] = "​Introdu_ssid-ul_wifi-ului";​ 
 +  char password[] = "​Introdu_parola";​ 
 +   
 +  Blynk.begin(auth,​ ssid, password); ​ // inițializare 
 +  Blynk.run(); ​ // menținere conexiune
  
 Pentru a exclude necesitatea folosirii unui modul hardware RTC am folosit biblioteca ''​NTPtimeESP.h''​. Aceasta declară o structură (strDateTime) ce stochează datele obținute printr-o cerere de tip GET pe un server ce se ocupă cu un RTC rezervat pentru Romania. Efectul obținut este că se afișează ora exactă în orice moment: Pentru a exclude necesitatea folosirii unui modul hardware RTC am folosit biblioteca ''​NTPtimeESP.h''​. Aceasta declară o structură (strDateTime) ce stochează datele obținute printr-o cerere de tip GET pe un server ce se ocupă cu un RTC rezervat pentru Romania. Efectul obținut este că se afișează ora exactă în orice moment:
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_ntptime.png?250}} +  #include <​NTPtimeESP.h> 
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_ntp.png?150}}+  ​NTPtime NTPro("​ro.pool.ntp.org"​);​ 
 +  strDateTime dateTime; 
 +  dateTime = NTPro.getNTPtime(1.0,​ 1); 
 +   
 +  struct strDateTime { 
 +      byte hour; 
 +      byte minute; 
 +      byte second; 
 +      int year; 
 +      byte month; 
 +      byte day; 
 +      byte dayofWeek;​ 
 +      boolean valid; 
 +  ​}
  
 Pentru declararea și utilizarea senzorului DHT11 am folosit biblioteca ''​SimpleDHT.h'':​ Pentru declararea și utilizarea senzorului DHT11 am folosit biblioteca ''​SimpleDHT.h'':​
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_dht11.png?400}}+  #include <​SimpleDHT.h> 
 +  SimpleDHT11 dht11; ​ // strunctura necesară comunicării cu senzorul 
 +  const int dht_pin = D3;  // declar pinul pe care se primesc datele 
 +  dht11.read(dht_pin,​ &​temperature,​ &​humidity,​ NULL);
  
 Pentru utilizarea ecranelor LCD (fizic și virtual din aplicația mobilă) și a portului serial (comunicarea dintre µc și calculator) am folosit bibliotecile ''​Wire.h''​ si ''​LiquidCrystal_I2C.h''​. Tot aici îmi creez un caracter special sub formă de lacăt pe care îl afișez când modul automat este în funcțiune: Pentru utilizarea ecranelor LCD (fizic și virtual din aplicația mobilă) și a portului serial (comunicarea dintre µc și calculator) am folosit bibliotecile ''​Wire.h''​ si ''​LiquidCrystal_I2C.h''​. Tot aici îmi creez un caracter special sub formă de lacăt pe care îl afișez când modul automat este în funcțiune:
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_ecrane.png?450}} +  #include <Wire.h> 
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_lock.png?250}}+  #include <​LiquidCrystal_I2C.h>​ 
 +  #define BLYNK_PRINT Serial 
 +   
 +  WidgetLCD blynk_lcd(V3); ​ // folosesc pinul virtual V3 pentru ecran 
 +  LiquidCrystal_I2C lcd (0x27, 16, 2);  // adresa ecranului fizic este 0x27 
 +  Serial.begin(115200);​ 
 +   
 +  Wire.begin(D2,​ D1);  // declar pinii pentru protocolul I2C 
 +  lcd.begin();​ 
 +  lcd.createChar(0,​ locked); ​ // creez un caracter de forma unui lacăt 
 + 
 +{{:​pm:​prj2021:​avaduva:​wifi_central_heating_lock.jpg?250}}
  
 Pentru afișarea informaților pe ecrane și monitorul serial mă folosesc de următoarele funcții: Pentru afișarea informaților pe ecrane și monitorul serial mă folosesc de următoarele funcții:
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_lcd.png?​400}} ​+  lcd.clear(); ​                   blynk_lcd.clear();​ 
 +  lcd.home();​ 
 +  lcd.setCursor(int x, int y); 
 +  lcd.print(char *string); ​       blynk_lcd.print(int x, int y, char *string);
  
 Majoritatea funcțiilor din coodul sursă sunt pentru afișarea diverselor date către ecranul LCD fizic, ecranul LCD virtual al aplicației și către monitorul serial al calculatorului (când acesta este conectat): Majoritatea funcțiilor din coodul sursă sunt pentru afișarea diverselor date către ecranul LCD fizic, ecranul LCD virtual al aplicației și către monitorul serial al calculatorului (când acesta este conectat):
Line 91: Line 130:
   * ''​void setup()''​ se ocupă de conectarea µc la rețeaua de internet, afișând mesaje de confirmare către monitorul serial, inițiază comunicarea dintre µc și aplicația mobilă, setează pinii (intrare/​ieșire) și citește primele valori ale temperaturii și umidității ambientale:   * ''​void setup()''​ se ocupă de conectarea µc la rețeaua de internet, afișând mesaje de confirmare către monitorul serial, inițiază comunicarea dintre µc și aplicația mobilă, setează pinii (intrare/​ieșire) și citește primele valori ale temperaturii și umidității ambientale:
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_setup.png?250}}+  Serial.println("​Booted"​); ​ // se afișează la pornire/​reset 
 +  Serial.println("​Connecting to Wi-Fi"​); ​ // se afișează la pornire/​reset 
 +   
 +  WiFi.mode(WIFI_STA);​ 
 +  WiFi.begin(ssid,​ password);​ 
 +  while (WiFi.status() != WL_CONNECTED) ​{ 
 +      // încerc conectarea microcontrolerului la wifi 
 +      Serial.print("​."​);​ 
 +      delay(500);​ 
 +  ​} 
 +   
 +  Serial.println("​WiFi connected"​);​ 
 +   
 +  Blynk.begin(auth,​ ssid, password);
  
   * ''​BLYNK_WRITE(V4)''​ este o funcție ce se apelează automat (doar) atunci când sliderul din aplicația mobilă (de pe pinul V4) și-a modificat valoarea. Funcția actualizează valoarea temperaturii dorite și o afișează pe ambele ecrane:   * ''​BLYNK_WRITE(V4)''​ este o funcție ce se apelează automat (doar) atunci când sliderul din aplicația mobilă (de pe pinul V4) și-a modificat valoarea. Funcția actualizează valoarea temperaturii dorite și o afișează pe ambele ecrane:
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_write_v4.png?300}}+  desired_temp = param.asInt();​ // transform valoarea citită în întreg 
 +   
 +  blynk_lcd.print(0,​ 1, "Set to"​);​ 
 +  blynk_lcd.print(7,​ 1, desired_temp);​ 
 +  blynk_lcd.print(9,​ 1, "​°C"​);​ 
 +   
 +  if (!printSeconds) ​{ 
 +      // afișez temperatura dorită doar când nu afișez secundele 
 +      lcd.setCursor(12,​ 0); 
 +      lcd.print(desired_temp);​ 
 +      lcd.print((char)223); ​ // simbolul pentru grade ° 
 +      lcd.print("​C"​);​ 
 +  ​}
  
   * ''​void printDesiredTempToLcd()''​ afișează temperatura dorită pe ecrane (similar cu funcția anterioară),​ doar că aceasta se apelează constant în funcția ''​loop()'';​   * ''​void printDesiredTempToLcd()''​ afișează temperatura dorită pe ecrane (similar cu funcția anterioară),​ doar că aceasta se apelează constant în funcția ''​loop()'';​
Line 103: Line 167:
    - dacă temperatura ambientală este peste limita superioară a intervalului atunci termostatul oprește centrala termică și o blochează în aceast stadiu până ce temperatura ambientală reintră în intervalul dorit sau până ce se mărește intervalul dorit.    - dacă temperatura ambientală este peste limita superioară a intervalului atunci termostatul oprește centrala termică și o blochează în aceast stadiu până ce temperatura ambientală reintră în intervalul dorit sau până ce se mărește intervalul dorit.
  
-{{:​pm:​prj2021:​avaduva:​wifi_central_heating_new_interval.png?600}}+{{:​pm:​prj2021:​avaduva:​wifi_central_heating_interval.jpg?600}}
  
   * ''​void printTempToSerialMonitor()''​ afișează temperatura și umiditatea ambientale și temperatura dorită către monitorul serial;   * ''​void printTempToSerialMonitor()''​ afișează temperatura și umiditatea ambientale și temperatura dorită către monitorul serial;
Line 154: Line 218:
  
 Fișierele obținute (codul sursă, schema eagle, biblioteci folosite, schema bloc, intervalul de temperatură dorită): {{:​pm:​prj2021:​avaduva:​wifi_thermostat_files.zip}}. Fișierele obținute (codul sursă, schema eagle, biblioteci folosite, schema bloc, intervalul de temperatură dorită): {{:​pm:​prj2021:​avaduva:​wifi_thermostat_files.zip}}.
- 
-Documentația proiectului în format pdf: <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​wifi_thermostat_for_central_heating.pdf</​a></​html>​. 
  
  
Line 187: Line 249:
   * [[https://​components101.com/​modules/​5v-mb102-breadboard-power-supply-module|Documentație sursă pentru breadboard]]   * [[https://​components101.com/​modules/​5v-mb102-breadboard-power-supply-module|Documentație sursă pentru breadboard]]
  
 +Documentația proiectului în format pdf: <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​wifi_thermostat_for_central_heating.pdf</​a></​html>​.
pm/prj2021/avaduva/basic_smart_home.1621965074.txt.gz · Last modified: 2021/05/25 20:51 by petru.mateescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0