рджреЛ рдореЗрдВ рдПрдХ: рд╡рд╛рдИ-рдлрд╛рдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдпрд░ рдХреНрд╡рд╛рд▓рд┐рдЯреА рдореЙрдирд┐рдЯрд░ рдФрд░ рдШрдбрд╝реА

рдПрдХ рд╕рдордп, рдореБрдЭреЗ рд╕рд░реНрдЧреЗрдИ рд╕рд┐рд▓рдиреЛрд╡ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рд╕реЗ рд╣рд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдкрд╕рдВрдж рдереА, "рд╡рд╛рдИ-рдлрд╛рдИ рдФрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдо рдПрдпрд░ рдореЙрдирд┐рдЯрд░ (рд╕реАрдУ 2, рддрд╛рдкрдорд╛рди, рдЖрд░реНрджреНрд░рддрд╛, рджрдмрд╛рд╡) ред "


рд╕рд░реНрдЧреЗрдИ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╣рд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА (рдмрд╛рдж рдореЗрдВ рдореЙрдирд┐рдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдореЗрдВ, рд╣рд╡рд╛ рдореЗрдВ рддрд╛рдкрдорд╛рди, рдЖрд░реНрджреНрд░рддрд╛, рджрдмрд╛рд╡ рдФрд░ 2 рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реЗрдВрд╕рд░ рд╕реЗ рд╕реВрдЪрдирд╛ ESP8266 рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрдИ рдлреНрд░реЗрдо рдореЗрдВ рдореЛрдиреЛрдХреНрд░реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдирд┐рдЯрд░ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, Blynk рд╕реЗрд╡рд╛ рдкрд╣рдЪрд╛рди рдХреБрдВрдЬреА ESP8266 рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Blynk рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдореЙрдиреАрдЯрд░ рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдереА: рдпрд╣ рдореЙрдиреАрдЯрд░ рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдмрдВрдж рдпрд╛ "рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ" рдХрд░рдиреЗ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ред


рдореИрдВрдиреЗ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛, рдФрд░ рдореЙрдирд┐рдЯрд░ рдлреНрд░реАрдЬ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢рдХреНрддрд┐ рдЬреЛрдбрд╝реАред рд░реЗрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓: рд░рд┐рд▓реЗ рдШреБрдорд╛рд╡рджрд╛рд░ рдПрд╕реА / рдбреАрд╕реА рдПрдбрд╛рдкреНрдЯрд░ рдХреЗ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рддрд╣рдд рдерд╛, рдФрд░ рд░рд┐рд▓реЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдиреЗ рдПрдбрд╛рдкреНрдЯрд░ рд╕реЗ рдмреИрдЯрд░реА рддрдХ рдмрд┐рдЬрд▓реА рд╕реНрд╡рд┐рдЪ рдХреА рдЬрдм 220V рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╡реЛрд▓реНрдЯреЗрдЬ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ред


рдореЗрд░реА рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рдлрд▓рддрд╛ рдШрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рддрдХ рдЪрд▓реА (рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ)ред рдЖрдЙрдЯрд▓реЗрдЯ рдореЗрдВ рд╡реЛрд▓реНрдЯреЗрдЬ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╕реНрддреА рдмреИрдЯрд░реА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рдереА, рдФрд░ рдореИрдВ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рд▓реМрдЯ рдЖрдпрд╛ред


рдЕрдкрдиреЗ рджрдо рдкрд░ рдХрджрдо рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдПрд╕ред рд╕рд┐рд▓реНрдиреЛрд╡ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреЗрдЪ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди / рдкрд░рд┐рд╡рд░реНрдзрди:


  • рдореЙрдиреАрдЯрд░ рдХреА рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдлрд┐рд░ рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдореЙрдиреАрдЯрд░ рд╕реНрд╡рддрдГ рдСрдлрд▓рд╛рдЗрди 90 рд╕реЗрдХрдВрдб рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕реАрдорд╛ рддрд╛рдкрдорд╛рди рдорд╛рди, CO2 рд╕рд╛рдордЧреНрд░реА, рд╡рд╛рдпреБ рдЖрд░реНрджреНрд░рддрд╛, рд╕рд╛рде рд╣реА рдЯрд╛рдЗрдо рдЬрд╝реЛрди рдФрд░ рд╕рд░реНрджреА / рдЧрд░реНрдореА рдХрд╛ рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреЙрд░реНрдо рд╕реЗ, рдмрд┐рд▓рдХ рдХреБрдВрдЬреА рдХреА рддрд░рд╣ ESP8266 рдореЗрдореЛрд░реА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕реАрдорд╛ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдкрд╣рд▓реЗ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЧрдИ рдереА, рддреЛ рдЕрдм рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ "0" рд╕реЗ "1" рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрд╣ рдХрд╛рдо рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рднреА рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИред
  • рдореЙрдирд┐рдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдВрдЧреАрди рд╕реНрдХреНрд░реАрди рдкрд░ 1.44 тАЭ, 128x128 рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЧрдИ рд╣реИред рд╕реАрдорд╛ рдорд╛рдиреЛрдВ рд╕реЗ рдкрд░реЗ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд░рдВрдЧ рдореЗрдВ рдлреНрд░реЗрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
  • рдореЙрдирд┐рдЯрд░ рдореЗрдВ, рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ (рд╣реНрдпреВрдорд┐рдВрдбреЗрдХреНрд╕) рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рддрд╛рдкрдорд╛рди, рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдпрд╛ рд╡рд╛рдпреБ рдХреА рдЖрд░реНрджреНрд░рддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрддреА рд╣реИ, рддреЛ рдИ-рдореЗрд▓ рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИрдВред
  • рдореЙрдирд┐рдЯрд░ Blynk рд╕реЗрд╡рд╛ рдФрд░ рдИрдореЗрд▓ рдкрддреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдореЙрдирд┐рдЯрд░ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдПрдирд╛рд▓реЙрдЧ рдШрдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рдЯреАрдХ рд╕рдордп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрд╣ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ "рд╡рд╛рдпрд░рд▓реЗрд╕ рд╡рд╛рдИ-рдлрд╛рдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░реВрдо рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рд╣рд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпреЛрдВ" рдХреЗ рдЕрдирд╕реБрд▓рдЭреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬрдХрд▓ рдХрдИ рд▓реЛрдЧ рдЖрд╡рд╛рд╕ рдореЗрдВ рд╡рд╛рдпреБ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред


рд╕рднрд╛


рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реВрдЪреА рдФрд░ AliExpress рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рдХреАрдорддреЛрдВ рдкрд░ рдЙрдирдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд▓рд╛рдЧрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИред


рдЕрдВрдЧрдореВрд▓реНрдп ($)
рд╡рд╛рдИ-рдлрд╛рдИ рдмреЛрд░реНрдб NodeMCU CP2102 ESP82662.53
рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ DHT222.34
CO2 рд╕рд╛рдордЧреНрд░реА рд╕реЗрдВрд╕рд░ MH Z-1918.50
рд╕реНрдХреНрд░реАрди TFTLCD 1.44 "SPI 128x1282.69
рдЖрд░рдЯреАрд╕реА DS3231 рд╡реЙрдЪ1.00
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рддрд╛рд░реЛрдВ, рдЕрдиреНрдп trifles2.00
рдХреБрд▓ (рд▓рдЧрднрдЧ):30

рдореЙрдирд┐рдЯрд░ рдХрд╛ рдорд╕реНрддрд┐рд╖реНрдХ NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреЛрд░реНрдб рдкрд░ ESP8266 рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрд╣ рд╕реЗрдВрд╕рд░, рдШрдбрд╝рд┐рдпреЛрдВ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдХреНрд░реАрди рдХрдВрдЯреНрд░реЛрд▓ рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдШрдбрд╝реА рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдиреНрдирдХ рдФрд░ рдИ-рдореЗрд▓ рдХреЛ рднреА рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИред



рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ 1.44 рдХреЗ рд▓рд┐рдП рдлреНрд░рд┐рдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдорд┐рд▓реА, 8-рдкрд┐рди рдкрд┐рдирдЖрдЙрдЯ рдХреЗ рд╕рд╛рде 128x128 рд░рдВрдЧ рд╕реНрдХреНрд░реАрди, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдореЗрдВ 11-рдкрд┐рди рд╕реНрдХреНрд░реАрди рд╣реИред рдмрдврд╝рддреЗ рд╕рдордп, рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдХреНрд░реАрди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рдпрд░рд┐рдВрдЧ рдЖрд░реЗрдЦ, рдХрдиреЗрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:


NodeMCU (GPIO)рд╕реЗрдВрд╕рд░ рдкрд┐рди
D0 (GPIO 16)displ_1.44, CS
D1 (GPIO 5)DS3231, рдПрд╕рд╕реАрдПрд▓
D2 (GPIO 4)DS3231, рдПрд╕рдбреАрдП
рдбреА 3 (рдЬреАрдкреАрдЖрдИрдУ 0)DHT22, рдбреЗрдЯрд╛;
D4 (GPIO 2)displ_1.44, A0
D5 (GPIO 14)displ_1.44, SCK
D6 (GPIO 12)displ_1.44, RST
D7 (GPIO 13)displ_1.44, SDA
D8 (GPIO 15)GND
рдЯреАрдПрдХреНрд╕рдПрдордПрдЪ-рдЬреЗрдб рез реп, рдЖрд░рдПрдХреНрд╕
рдЖрд░рдПрдХреНрд╕рдПрдордПрдЪ-рдЬреЗрдб рез реп, рдЯреАрдПрдХреНрд╕
рд╡рд┐рди (5 рд╡реА)displ_1.44, Vcc; DHT22; MH-Z19
3.3displ_1.44, LED; DS3231, Vcc
GNDрд╕реЗрдВрд╕рд░, рдЬреАрдПрдирдбреА

рдпрджрд┐ рдЖрдк рд╡реЙрдЪ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмреИрдЯрд░реА рдХреЗ рдмрдЬрд╛рдп рдмреИрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдЕрдиреНрдпрдерд╛ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдХреЗ рдмрд╛рдж рдмреИрдЯрд░реА рд╕реВрдЬ рдЬрд╛рдПрдЧреАред 2 рд╕реЗрдХрдВрдб / рд╡рд░реНрд╖ рдХреА рд╕реНрд╡-рд╕рдВрдЪрд╛рд▓рд┐рдд рдШрдбрд╝реА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред


5V рдореЙрдирд┐рдЯрд░ рдХреЗ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ USB рдкреЛрд░реНрдЯ рд╕реЗ рдПрдХ рдорд╛рдирдХ USB рдХреЗрдмрд▓ - microUSB рд╕реЗ NodeMCU esp12 рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред


ESP8266 рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдирд┐рдЯрд░ рд╕реНрдХреЗрдЪ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдХреЗ рддрд╣рдд рд╣реИред


рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Arduino ESP8266 рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд I2C рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рди рд╣реЛрдВред рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдБ рд╣реИрдВ ред


рдореЙрдирд┐рдЯрд░ рд╕реНрдХреЗрдЪ
/* *   :   Wi-Fi       * aqm_32F_14F_P */ #include <FS.h> #include <Arduino.h> #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino // Wifi Manager #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> //https://github.com/tzapu/WiFiManager //OLED #include <SPI.h> #include <Adafruit_GFX.h> #include <TFT_ILI9163C.h> //clock #include <pgmspace.h> #include <TimeLib.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <Wire.h> #include <RtcDS3231.h> RtcDS3231<TwoWire> Rtc(Wire); #define countof(a) (sizeof(a) / sizeof(a[0])) //e-mail #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; //e-mail, address char address[64] {"e-mail"}; // HTTP requests #include <ESP8266HTTPClient.h> // OTA updates #include <ESP8266httpUpdate.h> // Blynk #include <BlynkSimpleEsp8266.h> // Debounce #include <Bounce2.h> //https://github.com/thomasfredericks/Bounce2 // JSON #include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson // Debounce interval in ms #define DEBOUNCE_INTERVAL 10 Bounce hwReset {Bounce()}; // Humidity/Temperature #include <DHT.h> #define DHTPIN 0 //D3 gpio0, DHT22 DATA #define DHTTYPE DHT22 // DHT 22 DHT dht(DHTPIN, DHTTYPE); // Blynk token char blynk_token[33] {"Blynk token"}; // Setup Wifi connection WiFiManager wifiManager; // Network credentials String ssid { "am180206" }; String pass { "vb654321" }; //flag for saving data bool shouldSaveConfig = false; // Sensors data float t {-100}, t_old{-100}; float hic {-1}, hic_old{-1}; int h {-1}, h_old{-1}; int co2 {-1}, co2_old{-1}; char Tmn[5]{}, Tmx[5]{}, Hmn[5]{}, Cmx[7]{}, tZ[5]{}, timeSW[4]{}, formFS[]{"0"}; //  t, h  co2, .  float Tmin, Tmax, Hmin, Cmax, tZone, timeSummerWinter, formatingFS; float trp = 0; int crbn, bl, ml=18000; int md; // : 1 - , 2 -  int blnk; // Color definitions #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define GRAY 0x9999 #define __CS 16 //D0(gpio16)- CS(display) #define __DC 2 //D4 gpio2 - AO(display) #define __RST 12 // D6 gpio12 - RESET(display) //char datestring[20]; char time_r[9]; char date_r[12]; //analog clock uint16_t ccenterx = 64,ccentery = 70;//center x,y of the clock clock const uint16_t cradius = 40;//radius of the clock const float scosConst = 0.0174532925; float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0; float sdeg=0, mdeg=0, hdeg=0; uint16_t osx,osy,omx,omy,ohx,ohy; uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0; //uint32_t targetTime = 0;// for next 1 second timeout uint8_t hh,mm,ss; //containers for current time TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC, __RST); String utf8(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } // NTP Servers: //static const char ntpServerName[] = "us.pool.ntp.org"; static const char ntpServerName[] = "time.nist.gov"; //const int timeZone = 2; // , , , , ,  //const int timeSummer = 1; WiFiUDP Udp; unsigned int localPort = 2390; // local port to listen for UDP packets time_t getNtpTime(); void digitalClockDisplay(); void printDigits(int digits); void sendNTPpacket(IPAddress &address); void readCO2(){ #define mySerial Serial static byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79}; //  byte response[9]; byte crc = 0; while (mySerial.available())mySerial.read();//  UART   memset(response, 0, 9);//   mySerial.write(cmd,9);//    CO2 mySerial.readBytes(response, 9);// 9    //   crc = 0; for (int i = 1; i <= 7; i++) { crc += response[i]; } crc = ((~crc)+1); { // CRC if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) { Serial.println("CRC error"); } else { //  CO2 co2 = (((unsigned int) response[2])<<8) + response[3]; Serial.println("CO2: " + String(co2) + "ppm"); } } } void sendMeasurements() { float t1 {-100}, hic1 {-1}; float h1 {-1}; // Temperature t1 = dht.readTemperature(); if ((t1 > -1) and (t1 < 100)) t = t1; Serial.println("T: " + String(t) + "*C"); // Humidity h1 = dht.readHumidity(); if ((h1 > -1) and (h1 < 100)) h = h1; Serial.println("H: " + String(h) + "%"); // Humindex hic1 = dht.computeHeatIndex(t, h, false); if (t >= 21.0) hic = hic1; else hic = t; Serial.println("Ti: "+String(hic)+"*C"); // CO2 crbn++; if (crbn > 110) {readCO2(); crbn = 0; Serial.println("CO2: " + String(co2) + "ppm"); } } void drawConnectionDetails() { display.clearScreen(); display.setTextSize(1); display.setCursor(12,24); display.setTextColor(WHITE); display.println(utf8("Connect to WiFi:")); display.setCursor(12,36); display.println(utf8("net: " + String(ssid))); display.setCursor(12,48); display.println(utf8("pass: " + String(pass))); display.setCursor(12,60); display.println(utf8("Open browser:")); display.setCursor(12,72); display.println(utf8("http://192.168.4.1")); display.setCursor(2,84); display.setTextColor(RED); display.println(utf8(" Enter your personal information!")); } void digitalClockDisplay() { // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); Serial.print(day()); Serial.print("."); Serial.print(month()); Serial.print("."); Serial.print(year()); Serial.println(); } void printDigits(int digits) { // utility for digital clock display: prints preceding colon and leading 0 Serial.print(":"); if (digits < 10) Serial.print('0'); Serial.print(digits); } // NTP code const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets time_t getNtpTime() { int tZoneI, timeSummerWinterI; tZoneI = (int)tZone; timeSummerWinterI = (int)timeSummerWinterI; IPAddress ntpServerIP; // NTP server's ip address while (Udp.parsePacket() > 0) ; // discard any previously received packets Serial.println("Transmit NTP Request"); // get a random server from the pool WiFi.hostByName(ntpServerName, ntpServerIP); Serial.print(ntpServerName); Serial.print(": "); Serial.println(ntpServerIP); sendNTPpacket(ntpServerIP); uint32_t beginWait = millis(); while (millis() - beginWait < 1500) { int size = Udp.parsePacket(); if (size >= NTP_PACKET_SIZE) { Serial.println("Receive NTP Response"); Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer unsigned long secsSince1900; // convert four bytes starting at location 40 to a long integer secsSince1900 = (unsigned long)packetBuffer[40] << 24; secsSince1900 |= (unsigned long)packetBuffer[41] << 16; secsSince1900 |= (unsigned long)packetBuffer[42] << 8; secsSince1900 |= (unsigned long)packetBuffer[43]; return secsSince1900 - 2208988800UL + tZoneI * SECS_PER_HOUR + timeSummerWinterI * SECS_PER_HOUR; } } Serial.println("No NTP Response :-("); return 0; // return 0 if unable to get the time } // send an NTP request to the time server at the given address void sendNTPpacket(IPAddress &address) { // set all bytes in the buffer to 0 memset(packetBuffer, 0, NTP_PACKET_SIZE); // Initialize values needed to form NTP request // (see URL above for details on the packets) packetBuffer[0] = 0b11100011; // LI, Version, Mode packetBuffer[1] = 0; // Stratum, or type of clock packetBuffer[2] = 6; // Polling Interval packetBuffer[3] = 0xEC; // Peer Clock Precision // 8 bytes of zero for Root Delay & Root Dispersion packetBuffer[12] = 49; packetBuffer[13] = 0x4E; packetBuffer[14] = 49; packetBuffer[15] = 52; // all NTP fields have been given values, now // you can send a packet requesting a timestamp: Udp.beginPacket(address, 123); //NTP requests are to port 123 Udp.write(packetBuffer, NTP_PACKET_SIZE); Udp.endPacket(); } void draw(){ //temperature display.setTextSize(1); display.setCursor(1,6); display.setTextColor(CYAN); display.println(utf8("T: CO2:")); String t_p; t_p = String(t); char t_p_m [12]; t_p.toCharArray(t_p_m, 5); if (t != t_old) { display.fillRect(1,15,48,18,BLACK); display.setTextSize(2); display.setCursor(1,15); display.setTextColor(GREEN); if(t < Tmin) display.setTextColor(RED); if(t > Tmax) display.setTextColor(RED); if ((t > -100) and (t < 100)) display.println(utf8(String(t_p_m))); else display.println(utf8("----"));} //heat index display.setTextSize(1); display.setCursor(2,98); display.setTextColor(CYAN); display.println(utf8("H: Ti:")); String hic_p; hic_p = String(hic); char hic_p_m [12]; hic_p.toCharArray(t_p_m, 5); if (hic != hic_old) { display.fillRect(80,108,48,18,BLACK); display.setTextSize(2); display.setCursor(80,108); display.setTextColor(GREEN); // if(t < Tmin) display.setTextColor(RED); if(hic > 27.0) display.setTextColor(YELLOW); if(hic > 31.0) display.setTextColor(RED); if ((hic > 0) and (hic < 100)) display.println(utf8(String(t_p_m))); else display.println(utf8("----"));} //CO2 if (co2 != co2_old) { display.fillRect(80,15,48,18,BLACK); display.setTextSize(2); display.setCursor(80,15); display.setTextColor(GREEN); if (co2 > Cmax) display.setTextColor(RED); if (co2 > 600) display.setTextColor(CYAN); if ((co2 > -1) and (co2 <= 2000)) display.println(utf8(String(co2))); else display.println(utf8("---")); } //humidity if (h != h_old) { display.fillRect(1,108,49,18,BLACK); display.setTextSize(2); display.setCursor(1,108); display.setTextColor(GREEN); if (h < Hmin) display.setTextColor(RED); if (h > 60) display.setTextColor(RED); if ((h > -1) and (h < 100)) display.println(utf8(String(h))); else display.println(utf8("--")); } //date if (hh==0) display.fillRect(28,1,60,10,BLACK); display.setCursor(28,1); display.setTextSize(1); display.setTextColor(CYAN); display.println(utf8(date_r)); //OFFLINE if (md == 2) { display.fillRect(106,44,18,8,RED); display.setCursor(106,44); display.setTextSize(1); display.setTextColor(CYAN); display.println(" A"); } //OFF BLYNK if (blnk == 1) { display.fillRect(106,44,18,8,RED); display.setCursor(106,44); display.setTextSize(1); display.setTextColor(CYAN); display.println(" B"); } } void synchronClockA() { Rtc.Begin(); Serial.print("IP number assigned by DHCP is "); Serial.println(WiFi.localIP()); Serial.println("Starting UDP"); Udp.begin(localPort); Serial.print("Local port: "); Serial.println(Udp.localPort()); Serial.println("waiting for sync"); setSyncProvider(getNtpTime); //setSyncInterval(300); if(timeStatus() != timeNotSet){ digitalClockDisplay(); Serial.println("here is another way to set rtc"); time_t t = now(); char date_0[12]; snprintf_P(date_0, countof(date_0), PSTR("%s %02u %04u"), monthShortStr(month(t)), day(t), year(t)); Serial.println(date_0); char time_0[9]; snprintf_P(time_0, countof(time_0), PSTR("%02u:%02u:%02u"), hour(t), minute(t), second(t)); Serial.println(time_0); Serial.println("Now its time to set up rtc"); RtcDateTime compiled = RtcDateTime(date_0, time_0); // printDateTime(compiled); Serial.println(""); if (!Rtc.IsDateTimeValid()) { // Common Cuases: // 1) first time you ran and the device wasn't running yet // 2) the battery on the device is low or even missing Serial.println("RTC lost confidence in the DateTime!"); // following line sets the RTC to the date & time this sketch was compiled // it will also reset the valid flag internally unless the Rtc device is // having an issue } Rtc.SetDateTime(compiled); RtcDateTime now = Rtc.GetDateTime(); if (now < compiled) { Serial.println("RTC is older than compile time! (Updating DateTime)"); Rtc.SetDateTime(compiled); } else if (now > compiled) { Serial.println("RTC is newer than compile time. (this is expected)"); } else if (now == compiled) { Serial.println("RTC is the same as compile time! (not expected but all is fine)"); } // never assume the Rtc was last configured by you, so // just clear them to your needed state Rtc.Enable32kHzPin(false); Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); } } void synchronClock() { Rtc.Begin(); // WiFi.begin(lnet, key); wifiManager.autoConnect(ssid.c_str(), pass.c_str()); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" "); Serial.print("IP number assigned by DHCP is "); Serial.println(WiFi.localIP()); Serial.println("Starting UDP"); Udp.begin(localPort); Serial.print("Local port: "); Serial.println(Udp.localPort()); Serial.println("waiting for sync"); setSyncProvider(getNtpTime); if(timeStatus() != timeNotSet){ digitalClockDisplay(); Serial.println("here is another way to set rtc"); time_t t = now(); char date_0[12]; snprintf_P(date_0, countof(date_0), PSTR("%s %02u %04u"), monthShortStr(month(t)), day(t), year(t)); Serial.println(date_0); char time_0[9]; snprintf_P(time_0, countof(time_0), PSTR("%02u:%02u:%02u"), hour(t), minute(t), second(t)); Serial.println(time_0); Serial.println("Now its time to set up rtc"); RtcDateTime compiled = RtcDateTime(date_0, time_0); Serial.println(""); if (!Rtc.IsDateTimeValid()) { // Common Cuases: // 1) first time you ran and the device wasn't running yet // 2) the battery on the device is low or even missing Serial.println("RTC lost confidence in the DateTime!"); // following line sets the RTC to the date & time this sketch was compiled // it will also reset the valid flag internally unless the Rtc device is // having an issue } Rtc.SetDateTime(compiled); RtcDateTime now = Rtc.GetDateTime(); if (now < compiled) { Serial.println("RTC is older than compile time! (Updating DateTime)"); Rtc.SetDateTime(compiled); } else if (now > compiled) { Serial.println("RTC is newer than compile time. (this is expected)"); } else if (now == compiled) { Serial.println("RTC is the same as compile time! (not expected but all is fine)"); } // never assume the Rtc was last configured by you, so // just clear them to your needed state Rtc.Enable32kHzPin(false); Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); } } void Clock(){ RtcDateTime now = Rtc.GetDateTime(); //Print RTC time to Serial Monitor hh = now.Hour(); mm = now.Minute(); ss = now.Second(); sprintf(date_r, "%d.%d.%d", now.Day(), now.Month(), now.Year()); if (mm < 10) sprintf(time_r, "%d:0%d", hh, mm); else sprintf(time_r, "%d:%d", hh, mm); Serial.println(date_r); Serial.println(time_r); } //analog void drawClockFace(){ display.fillCircle(ccenterx, ccentery, cradius, BLUE); display.fillCircle(ccenterx, ccentery, cradius-4, BLACK); // Draw 12 lines for(int i = 0; i<360; i+= 30) { sx = cos((i-90)*scosConst); sy = sin((i-90)*scosConst); x0 = sx*(cradius)+ccenterx; yy0 = sy*(cradius)+ccentery; x1 = sx*(cradius-8)+ccenterx; yy1 = sy*(cradius-8)+ccentery; display.drawLine(x0, yy0, x1, yy1, 0x0377); } // Draw 4 lines for(int i = 0; i<360; i+= 90) { sx = cos((i-90)*scosConst); sy = sin((i-90)*scosConst); x0 = sx*(cradius+6)+ccenterx; yy0 = sy*(cradius+6)+ccentery; x1 = sx*(cradius-11)+ccenterx; yy1 = sy*(cradius-11)+ccentery; display.drawLine(x0, yy0, x1, yy1, 0x0377); } } //analog static uint8_t conv2d(const char* p) { uint8_t v = 0; if ('0' <= *p && *p <= '9') v = *p - '0'; return 10 * v + *++p - '0'; } //analog void drawClockHands(uint8_t h,uint8_t m,uint8_t s){ // Pre-compute hand degrees, x & y coords for a fast screen update sdeg = s * 6; // 0-59 -> 0-354 mdeg = m * 6 + sdeg * 0.01666667; // 0-59 -> 0-360 - includes seconds hdeg = h * 30 + mdeg * 0.0833333; // 0-11 -> 0-360 - includes minutes and seconds hx = cos((hdeg-90)*scosConst); hy = sin((hdeg-90)*scosConst); mx = cos((mdeg-90)*scosConst); my = sin((mdeg-90)*scosConst); sx = cos((sdeg-90)*scosConst); sy = sin((sdeg-90)*scosConst); // Erase just old hand positions display.drawLine(ohx, ohy, ccenterx+1, ccentery+1, BLACK); display.drawLine(omx, omy, ccenterx+1, ccentery+1, BLACK); display.drawLine(osx, osy, ccenterx+1, ccentery+1, BLACK); // Draw new hand positions display.drawLine(hx*(cradius-20)+ccenterx+1, hy*(cradius-20)+ccentery+1, ccenterx+1, ccentery+1, WHITE); display.drawLine(mx*(cradius-8)+ccenterx+1, my*(cradius-8)+ccentery+1, ccenterx+1, ccentery+1, WHITE); display.drawLine(sx*(cradius-8)+ccenterx+1, sy*(cradius-8)+ccentery+1, ccenterx+1, ccentery+1, RED); display.fillCircle(ccenterx+1, ccentery+1, 3, RED); // Update old x&y coords osx = sx*(cradius-8)+ccenterx+1; osy = sy*(cradius-8)+ccentery+1; omx = mx*(cradius-8)+ccenterx+1; omy = my*(cradius-8)+ccentery+1; ohx = hx*(cradius-20)+ccenterx+1; ohy = hy*(cradius-20)+ccentery+1; } void FaceClock(){ display.clearScreen(); display.setTextColor(WHITE, BLACK); osx = ccenterx; osy = ccentery; omx = ccenterx; omy = ccentery; ohx = ccenterx; ohy = ccentery; drawClockFace();// Draw clock face } void drawSynchron() { display.clearScreen(); display.setTextSize(2); display.setCursor(2,48); display.setTextColor(WHITE); display.println(utf8(" Clock")); display.setTextSize(1); display.setCursor(2,68); display.setTextColor(WHITE); display.println(utf8("synchronization...")); } void drawWiFi() { display.clearScreen(); display.setTextSize(2); display.setCursor(2,48); display.setTextColor(RED); display.println(utf8("Connection to Wi-Fi")); } void drawBlynk() { display.clearScreen(); display.setTextSize(2); display.setCursor(2,48); display.setTextColor(RED); display.println(utf8("Connection to Blynk")); } void mailer() { // wait for WiFi connection if((WiFiMulti.run() == WL_CONNECTED)) { HTTPClient http; Serial.print("[HTTP] begin...\n"); http.begin("http://skorovoda.in.ua/php/wst41.php?mymail="+String(address)+"&t="+String(t) +"&h="+String(h)+"&co2="+String(co2)+"&ID="+String(ESP.getChipId())); Serial.print("[HTTP] GET...\n"); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } } //callback notifying the need to save config void saveConfigCallback() { Serial.println("Should save config"); shouldSaveConfig = true; } void factoryReset() { Serial.println("Resetting to factory settings"); wifiManager.resetSettings(); SPIFFS.format(); ESP.reset(); } void printString(String str) { Serial.println(str); } bool loadConfigS() { Blynk.config(address); Serial.print("e-mail: "); Serial.println( address ); Blynk.config(tZ); Serial.print("T_Zone: "); Serial.println( tZ ); Blynk.config(Tmx); Serial.print("T max: "); Serial.println( Tmx ); Blynk.config(Cmx); Serial.print("CO2 max: "); Serial.println( Cmx ); Blynk.config(Tmn); Serial.print("T min: "); Serial.println( Tmn ); Blynk.config(Hmn); Serial.print("H min: "); Serial.println( Hmn ); Blynk.config(timeSW); Serial.print("Time Summer/Winter: "); Serial.println( timeSW ); Blynk.config(formFS); Serial.print("format FS: "); Serial.println( formFS ); Blynk.config(blynk_token, "blynk-cloud.com", 8442); Serial.print("token: " ); Serial.println( blynk_token ); } bool loadConfig() { Serial.println("Load config..."); File configFile = SPIFFS.open("/config.json", "r"); if (!configFile) { Serial.println("Failed to open config file"); return false; } size_t size = configFile.size(); if (size > 1024) { Serial.println("Config file size is too large"); return false; } // Allocate a buffer to store contents of the file. std::unique_ptr<char[]> buf(new char[size]); // We don't use String here because ArduinoJson library requires the input // buffer to be mutable. If you don't use ArduinoJson, you may as well // use configFile.readString instead. configFile.readBytes(buf.get(), size); StaticJsonBuffer<200> jsonBuffer; JsonObject &json = jsonBuffer.parseObject(buf.get()); if (!json.success()) { Serial.println("Failed to parse config file"); return false; } // Save parameters strcpy(blynk_token, json["blynk_token"]); strcpy(address, json["address"]); strcpy(tZ, json["tZ"]); strcpy(Tmx, json["Tmx"]); strcpy(Cmx, json["Cmx"]); strcpy(Tmn, json["Tmn"]); strcpy(Hmn, json["Hmn"]); strcpy(timeSW, json["timeSW"]); strcpy(formFS, json["formFS"]); } void configModeCallback (WiFiManager *wifiManager) { String url {"http://192.168.4.1"}; printString("Connect to WiFi:"); printString("net: " + ssid); printString("pw: "+ pass); printString("Open browser:"); printString(url); printString("to setup device"); drawConnectionDetails(); } void setupWiFi() { //set config save notify callback wifiManager.setSaveConfigCallback(saveConfigCallback); // Custom parameters WiFiManagerParameter custom_blynk_token("blynk_token", "Blynk token", blynk_token, 34); wifiManager.addParameter(&custom_blynk_token); WiFiManagerParameter custom_address("address", "E-mail", address, 64); wifiManager.addParameter(&custom_address); WiFiManagerParameter custom_tZ("tZ", "Time Zone", tZ, 5); wifiManager.addParameter(&custom_tZ); WiFiManagerParameter custom_Tmn("Tmn", "T min", Tmn, 5); wifiManager.addParameter(&custom_Tmn); WiFiManagerParameter custom_Tmx("Tmx", "T max", Tmx, 5); wifiManager.addParameter(&custom_Tmx); WiFiManagerParameter custom_Cmx("Cmx", "C max", Cmx, 7); wifiManager.addParameter(&custom_Cmx); WiFiManagerParameter custom_Hmn("Hmn", "H min", Hmn, 5); wifiManager.addParameter(&custom_Hmn); WiFiManagerParameter custom_timeSW("timeSW", "Time Summer(1)/Winter(0)", timeSW, 4); wifiManager.addParameter(&custom_timeSW); WiFiManagerParameter custom_formFS("formFS", "formating FS", formFS, 4); wifiManager.addParameter(&custom_formFS); wifiManager.setAPCallback(configModeCallback); wifiManager.setTimeout(60); if (!wifiManager.autoConnect(ssid.c_str(), pass.c_str())) { md = 2; Serial.println("mode OffLINE :("); loadConfigS(); } //save the custom parameters to FS if (shouldSaveConfig) { Serial.println("saving config"); DynamicJsonBuffer jsonBuffer; JsonObject &json = jsonBuffer.createObject(); json["blynk_token"] = custom_blynk_token.getValue(); json["address"] = custom_address.getValue(); json["tZ"] = custom_tZ.getValue(); json["Tmx"] = custom_Tmx.getValue(); json["Cmx"] = custom_Cmx.getValue(); json["Tmn"] = custom_Tmn.getValue(); json["Hmn"] = custom_Hmn.getValue(); json["timeSW"] = custom_timeSW.getValue(); json["formFS"] = custom_formFS.getValue(); File configFile = SPIFFS.open("/config.json", "w"); if (!configFile) { Serial.println("failed to open config file for writing"); } json.printTo(Serial); json.printTo(configFile); configFile.close(); //end save } //if you get here you have connected to the WiFi Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void connectBlynk(){ if(String(blynk_token)== "Blynk token"){ blnk = 0; Serial.println("! Off Blynk!"); } else { Serial.println("Connecting to blynk..."); while (Blynk.connect() == false) { delay(500); Serial.println("Connecting to blynk..."); } } } void sendToBlynk(){ Blynk.virtualWrite(V1, t); Blynk.virtualWrite(V2, h); Blynk.virtualWrite(V3, co2); Blynk.virtualWrite(V5, hic); } void formatFS(){ SPIFFS.format(); SPIFFS.begin(); } void setup() { Serial.begin(115200); display.begin(); // Init filesystem if (!SPIFFS.begin()) { Serial.println("Failed to mount file system"); ESP.reset(); } md = 1; // Setup WiFi drawWiFi(); //"Connecting to Wi-Fi..." setupWiFi(); if(md == 1){ // Load configuration if (!loadConfig()) { Serial.println("Failed to load config"); // factoryReset(); } else { Serial.println("Config loaded"); } Blynk.config(address); Serial.print("e-mail: "); Serial.println( address ); Blynk.config(tZ); Serial.print("T_Zone: "); Serial.println( tZ ); Blynk.config(Tmx); Serial.print("T max: "); Serial.println( Tmx ); Blynk.config(Cmx); Serial.print("CO2 max: "); Serial.println( Cmx ); Blynk.config(Tmn); Serial.print("T min: "); Serial.println( Tmn ); Blynk.config(Hmn); Serial.print("H min: "); Serial.println( Hmn ); Blynk.config(timeSW); Serial.print("Time Summer/Winter: "); Serial.println( timeSW ); Blynk.config(formFS); Serial.print("format FS: "); Serial.println( formFS ); Blynk.config(blynk_token, "blynk-cloud.com", 8442); Serial.print("token: " ); Serial.println( blynk_token ); Tmax = atof (Tmx); Cmax = atof (Cmx); Tmin = atof (Tmn); Hmin = atof (Hmn); tZone = atof (tZ); timeSummerWinter = atof (timeSW); formatingFS = atof (formFS); drawSynchron(); synchronClock(); connectBlynk(); FaceClock(); if (formatingFS == 1) { formatFS(); } } else if(md == 2) { Tmax = atof (Tmx); Cmax = atof (Cmx); Tmin = atof (Tmn); Hmin = atof (Hmn); tZone = atof (tZ); timeSummerWinter = atof (timeSW); formatingFS = atof (formFS); synchronClockA(); FaceClock(); if (formatingFS == 1) { formatFS(); } } } void loop() { if (md == 2) Serial.println(":( OffLINE"); else if (md == 1) Serial.println(":) OnLINE"); sendMeasurements(); draw(); Clock(); drawClockHands(hh,mm,ss); if (ml >= 480000) ml = 0; //  if ((ml >= 20000) and ((t > Tmax) or (co2 > Cmax) or (t < Tmin) or (h < Hmin))) { mailer(); ml = 0; } Blynk.run(); if (bl > 210){ // 30 sec sendToBlynk(); Serial.println("   Blynk"); bl = 0; } bl++; ml++; delay(100); t_old = t; hic_old = hic; h_old = h; co2_old = co2; Serial.println(" "); } 

рдпрджрд┐ рд╡рд╛рдпреБ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╕реЗрдЯ рдереНрд░реЗрд╢реЛрд▓реНрдб рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рд▓рдЧрднрдЧ рдПрдХ рдмрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдИ-рдореЗрд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ:



рдИ-рдореЗрд▓ рдкрд░ рд╕рдВрджреЗрд╢ php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрд░реЗ рдореЗрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред


php рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 <?php //  - http://skorovoda.in.ua/php/aqm42.php?mymail=my_login@my.site.net&t=22.2&h=55&co2=666 $EMAIL=0; $TEMPER=0; $vlaga=0; $carbon=0; $device=0; $EMAIL=$_GET["mymail"]; $device=$_GET["ID"]; echo $EMAIL; $TEMPER=$_GET["t"]; $vlaga=$_GET["h"]; $carbon=$_GET["co2"]; $mdate = date("H:i dmy"); echo <<<END <p>: $TEMPER ┬░<p> <p>: $vlaga %<p> <p>  : $carbon ppm<p> <p>--------------------<p> <p> тДЦ: $device<p> END; echo <<<END <p>$mdate</p> END; mail($EMAIL, "Air Quality Monitor " .$device. " v.051018","       тДЦ" .$device. " .        (,     )      . === : ".$TEMPER."┬░C === ".": ".$vlaga."% === "."  : ".$carbon." ppm === "." ! === , : ".$mdate,"From: my_sensors@air-monitor.info \n") ?> 


рдореЙрдирд┐рдЯрд░ рдЪрд╛рд▓реВ рдХрд░реЗрдВред



рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ am180206 рдПрдХреНрд╕реЗрд╕ рдкреНрд╡рд╛рдЗрдВрдЯ рдЙрдард╛рдпрд╛ред рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЙрдкрд▓рдмреНрдз рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реИред рдбреЗрдврд╝ рдорд┐рдирдЯ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдореЙрдирд┐рдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреИрдЯрд░реА рдореЛрдб рдореЗрдВ рдЬрд╛рдПрдЧрд╛ред рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рджред рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЗрдЬ http://192.168.4.1 рдЦреЛрд▓реЗрдВред



рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд╛рдИрдлрд╛рдИ (рдиреЛ рд╕реНрдХреИрди) рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдЦреБрд▓реЗрдЧрд╛:



рдЕрдкрдиреЗ рд╣реЛрдо рдиреЗрдЯрд╡рд░реНрдХ, BLynk рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдХреА, рдЕрдкрдиреЗ рдИ-рдореЗрд▓, рдЯрд╛рдЗрдо рдЬрд╝реЛрди, рд╕рдорд░ / рд╡рд┐рдВрдЯрд░ рдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддрд╛рдкрдорд╛рди, рдЖрд░реНрджреНрд░рддрд╛ рдФрд░ CO2 рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдереНрд░реЗрд╢реЛрд▓реНрдб рд╡реИрд▓реНрдпреВ рдХреЗ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрдВред


рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдорд╛рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рдЙрди рд╕рдВрдХреЗрддрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдорд┐рд▓реЗ:


1. рдиреАрдВрдж рдХреЗ рджреМрд░рд╛рди рд░рд╛рдд рдореЗрдВ рдЖрд░рд╛рдорджрд╛рдпрдХ рддрд╛рдкрдорд╛рди 19 ... 21 ┬░ C, рджрд┐рди рдХреЗ рджреМрд░рд╛рди - 22 ... 23 ┬░ Cред


2. рдардВрдб рдХреЗ рдореМрд╕рдо рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╕рд╛рдкреЗрдХреНрд╖ рдЖрд░реНрджреНрд░рддрд╛ 30 ... 45%, рдФрд░ рдЧрд░реНрдо - 30 ... 60% рдХреА рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрддрдо рдЕрдзрд┐рдХрддрдо рдЖрд░реНрджреНрд░рддрд╛ рд╕рдВрдХреЗрддрдХ: рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ 60% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ - 65%ред


3. рдкрд░рд┐рд╕рд░ рдореЗрдВ рдХрд╛рд░реНрдмрди рдбрд╛рдЗрдСрдХреНрд╕рд╛рдЗрдб рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╕реНрддрд░ 1000 рдкреАрдкреАрдПрдо рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрдбрд░реВрдо, рдмрдЪреНрдЪреЛрдВ рдХреЗ рдХрдорд░реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕реНрддрд░ - 600 рдкреАрдкреАрдПрдо рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред рд▓рдВрдмреЗ рд╕рдордп рддрдХ 1400 рдкреАрдкреАрдПрдо рдХрд╛ рдирд┐рд╢рд╛рди рдХрдорд░реЗ рдореЗрдВ рдЕрдиреБрдореЗрдп рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдХреА рд╕реАрдорд╛ рд╣реИред рдпрджрд┐ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╡рд╛рдпреБ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрдо рдорд╛рдиреА рдЬрд╛рддреА рд╣реИред


рдИ-рдорд╛рдИ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рд╕реАрдорд╛ рдорд╛рдиреЛрдВ рд╕реЗ рдкрд░реЗ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЦреЛ рдЬрд╛рдПрдЧрд╛ред рджрд░реНрдЬ рдХрд┐рдП рдЧрдП Blynk рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛, рдЖрдк рджреВрд░реА рдкрд░ рд╣рд╡рд╛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЙрдирд┐рдЯрд░ "рдЦреЛ" рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдЦрд╛рд▓реА рд░рд╣рддреЗ рд╣реИрдВред


рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлреЙрд░реНрдо рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ рднрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдордп рдХреНрд╖реЗрддреНрд░ 2.0 рд╣реИ ред рд╕реНрдХреЗрдЪ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


ESP8266 рдореЗрдореЛрд░реА ( рд╕реЗрд╡ рдмрдЯрди) рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдореЙрдирд┐рдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред


рд╕реНрдХреНрд░реАрди рдкрд░ рддрд╕реНрд╡реАрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред



рддрд┐рдерд┐, рд╕рдордп, рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди, рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдФрд░ рд╡рд╛рдпреБ рдЖрд░реНрджреНрд░рддрд╛ рд╕реНрд╡рдпрдВ-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рд╣реИрдВред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рд╡рд╛рдпреБ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рд░реЗ рд╕реЗ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред


рд▓рд╛рд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ "рдмреА" рдЕрдХреНрд╖рд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдирд┐рдЯрд░ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкрддреНрд░ "рдП" рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╢рдХреНрддрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рдФрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рд╕рдордп рдХреЛрдИ рд╡рд╛рдИ-рдлрд╛рдИ рдирд╣реАрдВ рдерд╛ (рдбрд┐рд╡рд╛рдЗрд╕ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛ рдЧрдпрд╛)ред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдХреНрд░реАрди рдкрд░ рд▓рд╛рд▓ рд░рдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рддрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рдордХрд╛рдЬ рд╕реЗ рд╡рд┐рдЪрд▓рди рд╣реИрдВред


рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╣рдо рд╣реАрдЯ рдЗрдВрдбреЗрдХреНрд╕ (рд╣реАрдЯ рдЗрдВрдбреЗрдХреНрд╕, рд╣реНрдпреВрдорд┐рдВрдбреЗрдХреНрд╕) рджреЗрдЦрддреЗ рд╣реИрдВред


тАЬрд╣реНрдпреВрдорд┐рдбреЗрдХреНрд╕ рдУрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЖрдпрд╛рдорд╣реАрди рдорд╛рддреНрд░рд╛ рд╣реИред рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдХрдирд╛рдбрд╛рдИ рдореМрд╕рдо рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреИрдиреЗрдбрд┐рдпрди рдореМрд╕рдо рд╡рд┐рдЬреНрдЮрд╛рди рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, 30 рд╕реЗ рдКрдкрд░ рд╣реНрдпреВрдорд┐рдбреЗрдХреНрд╕ рдореВрд▓реНрдп рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, 40 рд╕реЗ рдКрдкрд░ рдХрд╛рдлреА рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдФрд░ 45 рд╕реЗ рдКрдкрд░ рдХрд╛ рдореВрд▓реНрдп рдЦрддрд░рдирд╛рдХ рд╣реИред рдпрджрд┐ рд╣реНрдпреВрдорд┐рдбреЗрдХреНрд╕ 54 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ рд╣реАрдЯ рд╕реНрдЯреНрд░реЛрдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИред рд╣рд╡рд╛ рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреА рд╣реИред тАЭ (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛, рд╣рдореАрджрд╛ )ред


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЙрдЪреНрдЪ рддрд╛рдкрдорд╛рди рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдм рдорд╛рдкрд╛ рд╣рд╡рд╛ рдХрд╛ рддрд╛рдкрдорд╛рди 21 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рд╕реЗ рдКрдкрд░ рд╣реЛрддрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рдЧрд░реНрдо рдЧрд░реНрдореА рдХреЗ рдмрд┐рдирд╛ рд╣рд╡рд╛ рдХреЗ рджрд┐рди рдХрдерд┐рдд рддрд╛рдкрдорд╛рди рд╣реИред


рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдПрдХ рд╣реА рд▓реЗрдЦ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, 30% рдХреА рдЖрд░реНрджреНрд░рддрд╛ рдкрд░ 25 ┬░ C рдХреЗ рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди рдХреЛ 24 ┬░ C, 50% - 28 ┬░ C рдкрд░ рдФрд░ 90% - 35 ┬░ C (рдерд░реНрдорд╛рдореАрдЯрд░ рд╕реЗ 10 ┬░ C) рдЕрдзрд┐рдХ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШрд░ рдХреЗ рдЕрдВрджрд░, рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдпрд╛ рдкрдВрдЦреЗ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдХреЗ рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдпрд░ рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рддрд╛рдкрдорд╛рди 25 ┬░ C рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рдЕрдкрдиреЗ рдЖрдк рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣реАрдЯ рдЗрдВрдбреЗрдХреНрд╕, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╣рдирд╛, рджрдмрд╛рд╡ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


DHT11 рд╕реЗрдВрд╕рд░, DHT11 рдХреА рддрд░рд╣, "рдорд╛рдЗрдирд╕" рдХреЗ рд╕рд╛рде - рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдк рдХреА рдХрдо рд╕рдЯреАрдХрддрд╛ рдПрдХ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж "рдкреНрд▓рд╕" рд╣реИ: рдЗрд╕ рд╕реЗрдВрд╕рд░ рдХреЗ рдбреЗрдЯрд╛ рдмрд╕ рдореЗрдВ рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ "рдкреНрд▓рд╕" рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реАрдЯ рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ред


DHT22 рдХреА рдХрдо рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рд╕реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ HTU21D, Si7021 рдпрд╛ SHT21 рдХреА рдУрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред


рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ Blynk рдРрдк рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред


рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рд╕реЗрдЯ рдХрд░реЗрдВред рдмреЗрд▓реНрдХ рдХреЗ рд▓рд┐рдП рдЪрд░ (рд╕реНрдХреЗрдЪ рдореЗрдВ рдЙрдирдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП): рддрд╛рдкрдорд╛рди - рд╡реА 1 , рдЖрд░реНрджреНрд░рддрд╛ - рд╡реА 2 , рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА - рд╡реА 3 , рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ - рд╡реА 5 ред


рдореЗрд░реЗ рд╕реНрдорд╛рд░реНрдЯрдлрд╝реЛрди рдкрд░, Blynk'a рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЧреНрд░рд╛рдл рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди (рдкреАрд▓рд╛), рдЖрд░реНрджреНрд░рддрд╛ (рдиреАрд▓рд╛), рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ (рдмреИрдВрдЧрдиреА) рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЧреНрд░рд╛рдл рдореЗрдВ рдкрд╣рд▓реА рдЪреЛрдЯреА рд╣рд╛рде рдХреА рд╣рдереЗрд▓реА рдореЗрдВ рджрдмрд╛рд╡-рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ рдХрд╛ рддрд╛рдк рд╣реИ: рддрд╛рдк рд╕реВрдЪрдХрд╛рдВрдХ рд╡рдХреНрд░ рддрд╛рдкрдорд╛рди рд╡рдХреНрд░ рдХреЗ рдКрдкрд░ рд╕реНрдерд┐рдд рд╣реИред рджреВрд╕рд░реА рдЪреЛрдЯреА рдПрдХ рд╣реЗрдЕрд░ рдбреНрд░рд╛рдпрд░ рдХреЗ рд╕рд╛рде рд╕реЗрдВрд╕рд░ рдХрд╛ рд╣реАрдЯрд┐рдВрдЧ рд╣реИред рд╣рд╡рд╛ рдХреА рдЖрд░реНрджреНрд░рддрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рд╕реЗрдВрд╕рд░ рдПрдХ рд╣реЗрдЕрд░ рдбреНрд░рд╛рдпрд░ рдХреЗ рд╕рд╛рде рдЧрд░реНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ рд╡рдХреНрд░ рддрд╛рдкрдорд╛рди рд░реЗрдЦрд╛ рдХреЗ рдиреАрдЪреЗ рдпрд╛ рдиреАрдЪреЗ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред (рдХреЙрд▓рдЖрдЙрдЯ рджреЗрдЦреЗрдВ)ред


рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ рдЕрдЧрд░ рддрд╛рдкрдорд╛рди рд░реЗрдЦрд╛ рдЧреНрд░рд╛рдл рдкрд░ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рд╣реИ: 21 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рд╕реЗ рдиреАрдЪреЗ рдХреЗ рддрд╛рдкрдорд╛рди рдкрд░, рдЧрд░реНрдореА рд╕реВрдЪрдХрд╛рдВрдХ рд╡рдХреНрд░ рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди рд╡рдХреНрд░ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред


рдЕрдм рд╣рдо рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ php-script рдХреЛрдб рд╕реЗ http-рдПрдбреНрд░реЗрд╕ рдбрд╛рд▓реЗрдВ (рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, http-рдПрдбреНрд░реЗрд╕ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рдХреЛ рдХрдореЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЕрдкрдиреЗ рдИ-рдореЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓ рдЧрдП рд╣реИрдВ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ - рдЬрд╛рдирдХрд╛рд░реА, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ php рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред




рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред


рддрд╛рд░реНрдХрд┐рдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢реНрди "рдпрд╣рд╛рдБ рдШрдбрд╝реА рдХреНрдпреЛрдВ рд╣реИ?" рд╕реНрдХреНрд░реАрди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреАрд░ рдШрдбрд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджреНрдпрдкрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд┐рдЬрд┐рдЯрд▓ рдШрдбрд╝рд┐рдпреЛрдВ рдХреЛ рд▓рдЧрднрдЧ рд╣рд░ рдШрд░реЗрд▓реВ рдЙрдкрдХрд░рдг рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдирд╛рд▓реЙрдЧреНрд╕ рдХрд╛ рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИ: рд╕рдордп рдХреЗ рдкреИрдорд╛рдиреЗ, рдбрд╛рдпрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛ - рдЖрдк рдШрдВрдЯреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЖрдкрдХреЛ рдХрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


тАв рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рджреЛ рдПрдП рдмреИрдЯрд░реА рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд╛рдпрддреНрдд рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░реЗрдВ - рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрд╖ред


тАв рдЙрдкрд╕реНрдерд┐рддрд┐ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ - рдпрд╣рд╛рдБ рд╣рд░ рдХрд┐рд╕реА рдХреА рдЕрдкрдиреА рд░рд╛рдп рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ avs24rus рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ , рдЗрд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рд░реВрдк рдореЗрдВ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ 7 "рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЖрдк рдПрдХ рдорд╣рдВрдЧреА рдлреНрд░реЗрдо рдХреЛ рдПрдХ рд╕рд╕реНрддреЗ рдПрдХ рдмреИрдЧреБрд▓реЗрдЯ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдореЛрдб рдореЗрдВ рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп, рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рдпрд╛ рдмрдЪреНрдЪреЛрдВ рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореВрд▓ рдлреЛрдЯреЛ рдлреНрд░реЗрдоред


рдпрджрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕реМрдВрджрд░реНрдп рдкрдХреНрд╖ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдЖрдк рдкрд░ рд╕реВрдЯ рдХрд░реЗрдЧрд╛:



рдиреЛрдЯред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдХ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдирд┐рдЯрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереАред рдЗрд╕рдХреА рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдХреЗ рдХрд╛рд░рдг рдпреЛрдЬрдирд╛ рдХреА рдЕрдиреБрдЪрд┐рдд рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛ рдЧрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдмрд╛рдж рдореЗрдВ рдореИрдВрдиреЗ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдореЗрдВ рдореЙрдирд┐рдЯрд░ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдирд┐рд╢рд╛рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрдиреЗ рд░рд╣реЗред


рдЕ рдЫрд╛!


рд╣реИрдмрд░ рдХреЗ рдПрдХ рд╡рд┐рд╖рдп рдкрд░ рдореЗрд░реЗ рдмреБрдХрдорд╛рд░реНрдХ


1. рдХреЗрд╡рд▓ $ 4 рдХреЗ рд▓рд┐рдП ESP8266 + DS18B20 рдкрд░ рд╡рд╛рдИ-рдлрд╛рдИ рдерд░реНрдорд╛рдореАрдЯрд░


2. рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдо рдПрдпрд░ рдореЙрдирд┐рдЯрд░ (CO2, рддрд╛рдкрдорд╛рди, рдЖрд░реНрджреНрд░рддрд╛, рджрдмрд╛рд╡) рд╡рд╛рдИ-рдлрд╛рдИ рдФрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде


3. рд╕реАрдУ 2 рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ред рднрд╛рдЧ 1


4. рдЧреНрд░рд╛рдлрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдпрд╛ рд╣реЛрдо рд╡реЗрджрд░ рд╕реНрдЯреЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдкреАрдЖрдИ рдлреНрд▓реИрд╢ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


5. рд╣рдо рдПрдордПрдЪ-рдЬреЗрдб 19 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдореЗрдВ рд╕реАрдУ 2 рдХреА рдПрдХрд╛рдЧреНрд░рддрд╛ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ


6. MH-Z19 рдХрд╛ рдбрд╛рд░реНрдХ рд╕рд╛рдЗрдб


7. рд╣рдо рдПрдордПрдЪ-рдЬреЗрдб 19 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдореЗрдВ рд╕реАрдУ 2 рдХреА рдПрдХрд╛рдЧреНрд░рддрд╛ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ


рдЕрдВрдд рдореЗрдВ, рдореВрд▓реНрдпрд╡рд╛рди рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП @kumekay рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдВ ред
рдкреНрд░рдХрд╛рд╢рди "рдПрдХ CO2 рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдмреЗрд▓реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ рдореБрдЭреЗ рдИрдПрд╕рдкреА 2222 рдореЗрдВ рдЪрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ " рднрд╛рдЧ 1 тАЭ , @ a3x рдЧрд╣рди рдмрд╣реБрдореБрдЦреА рд▓реЗрдЦ!

Source: https://habr.com/ru/post/hi442856/


All Articles