рдореЗрд░реЗ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдХреА рд╕реНрд╡рд╛рдпрддреНрдд рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╡рд╛рдпрд░рд▓реЗрд╕ рд░реВрдо рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рд╣реИред рд╕рд┐рд╕реНрдЯрдо, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: рдЧреИрд╕ рдХреА рдЦрдкрдд рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдЖрд░рд╛рдо рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ред
рдмрд╛рдд рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреБрдЫ рд╣рдж рддрдХ рдкреБрд░рд╛рдиреА рд╣реИред рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реЗрдЯрдЕрдк рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд░реАрджреЗ рдЧрдП рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреНрдпрд╛ рд╣реБрдЖ - рдкрд░ рдкрдврд╝реЗрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧреАред
рдкрд░рд┐рдЪрд┐рдд
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ:
- рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рдПрдХ рд░реЗрдбрд┐рдпреЛ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд╣рд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рджрд┐рди рдХреЗ рджреМрд░рд╛рди, рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рддрд╛рдкрдорд╛рди рдХреЗ рдирд┐рд░рдВрддрд░ рддреАрди рд╕реЗрдЯ рдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
- рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдХрд╛рд░реНрдп рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо, рд╕реАрдорд╛ рд╡рд╛рдпреБ рдкреИрд░рд╛рдореАрдЯрд░, рдЕрдиреНрдп) рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлреЙрд░реНрдо рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
- рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдореЗрдВ рддрд╛рдкрдорд╛рди, рдХрд╛рд░реНрдмрди рдбрд╛рдЗрдСрдХреНрд╕рд╛рдЗрдб рд╕реНрддрд░ рдФрд░ рд╡рд╛рдпреБ рдЖрд░реНрджреНрд░рддрд╛ рдХреА рдорд╛рдк рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рдпреБ рдЧреБрдгрд╡рддреНрддрд╛ рдореЙрдирд┐рдЯрд░ рдХрд╛ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИред
- рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдЯреАрдХ рд╕рдордп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдШрдбрд╝реА рддреБрд▓реНрдпрдХрд╛рд▓рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдШрдбрд╝реА рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рд╣реИред
- рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдмрд┐рд▓рдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Blynk рдРрдк рддрд╛рдкрдорд╛рди, CO2 рдФрд░ рд╡рд╛рдпреБ рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдк рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдИ-рдлрд╛рдИ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рддрд╛рдкрдорд╛рди, рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдпрд╛ рд╡рд╛рдпреБ рдЖрд░реНрджреНрд░рддрд╛ рдереНрд░реЗрд╢реЛрд▓реНрдб рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рдкрд░ рдИ-рдореЗрд▓ рдкрд░ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
- рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдореЗрдВ, рддрд╛рдкрдорд╛рди рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░ рдорд╛рдкрд╛ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред
- рд╣реАрдЯрд┐рдВрдЧ рд╕реАрдЬрд╝рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛: рдореЗрд▓ рдФрд░ рдШрдбрд╝реА рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рд╣рд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдЪрд╛рд▓реВ рд░рд╣реЗрдЧреАред
рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдореЗрдВ рджреЛ рдбрд┐рд╡рд╛рдЗрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ, рд╣реАрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрдХреЗрдд рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╣рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдЙрдкрдХрд░рдг, рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧрд░реНрдореА рд╕реНрд░реЛрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЗрд╕реЗ рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рд╣реЛрдиреЗ рджреЗрдВред рд░реЗрдбрд┐рдпреЛ рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдХреЙрдиреНрдЯреИрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рдпрд░рд▓реЗрд╕ рд╣реЛрддрд╛ рд╣реИред

рд╕рднрд╛
рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реВрдЪреА рдФрд░ AliExpress рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рдХреАрдорддреЛрдВ рдкрд░ рдЙрдирдХреА рдЕрдиреБрдорд╛рдирд┐рдд рд▓рд╛рдЧрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИред
рдЕрдВрдЧ | рдореВрд▓реНрдп, $ |
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ |
рд╡рд╛рдИ-рдлрд╛рдИ рдмреЛрд░реНрдб NodeMCU CP2102 ESP8266 | 2.53 |
рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ DHT22 | 2.34 |
CO2 рд╕рд╛рдордЧреНрд░реА рд╕реЗрдВрд╕рд░ MH Z-19 | 18.50 |
рдЖрд░рдЯреАрд╕реА DS3231 рд╡реЙрдЪ | 1.00 |
рд╕реНрдХреНрд░реАрди OLED рдПрд▓рд╕реАрдбреА рдмреНрд▓реВ 0.96 "I2C 128x64 | 1.95 |
рдЖрд░рдПрдл рдореЙрдбреНрдпреВрд▓ 433MHz, рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ (рдХрд┐рдЯ рдореВрд▓реНрдп: рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░, рд░рд┐рд╕реАрд╡рд░) | 0.99 |
4-рдЪреИрдирд▓ рд▓реЙрдЬрд┐рдХ рд▓реЗрд╡рд▓ рдХрдиреНрд╡рд░реНрдЯрд░ 3.3V-5V (рд▓реЙрдЬрд┐рдХрд▓ рд▓реЗрдпрд░ рдХрдиреНрд╡рд░реНрдЯрд░) | 0.28 |
рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд╝рд░ LM7805 (10 рдкреАрд╕реА) | 0.79 |
AC100-240V 50 / 60Hz DC12V 2A рдПрдбрд╛рдкреНрдЯрд░ | 10.70 |
рд╡рд┐рдХрд╛рд╕ рдмреЛрд░реНрдб (рдлрд╛рдЗрдмрд░рдЧреНрд▓рд╛рд╕), рд╕рдВрдкрд░реНрдХ, рдЖрджрд┐ред | 2.00 |
contactor |
Arduino Pro рдорд┐рдиреА 5V рдореЙрдбреНрдпреВрд▓ | 1.45 |
рдЖрд░рдПрдл рдореЙрдбреНрдпреВрд▓ 433 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ (рд░рд┐рд╕реАрд╡рд░) | - |
2-рдЪреИрдирд▓ рд░рд┐рд▓реЗ рдореЙрдбреНрдпреВрд▓ | 0.98 |
рдПрдбрд╛рдкреНрдЯрд░ AC-DC HLK-PM01 | 4.29 |
рд╡рд┐рдХрд╛рд╕ рдмреЛрд░реНрдб (рдлрд╛рдЗрдмрд░рдЧреНрд▓рд╛рд╕), рд╕рдВрдкрд░реНрдХ, рдЖрджрд┐ред | 2.00 |
рдХреБрд▓ (рд▓рдЧрднрдЧ): | 50 |
рдпрджрд┐ рдЖрдк рдиреНрдпреВрдирддрдо рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 4-рдЪреИрдирд▓ рд▓реЙрдЬрд┐рдХ рд╕реНрддрд░ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ 2-рдЪреИрдирд▓ рдФрд░ 2-рдЪреИрдирд▓ рд░рд┐рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ 1-рдЪреИрдирд▓ рдПрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рджреЛрдиреЛрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдлрд╛рдЗрдмрд░рдЧреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмреЛрд░реНрдб рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдШреБрдбрд╝рд╕рд╡рд╛рд░ - рдШреБрдбрд╝рд╕рд╡рд╛рд░ред рдореЙрдбреНрдпреВрд▓ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ "рдХрдВрдШреА" рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдП рдЧрдП, рдкреИрдирд▓реЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ: рдШрдЯрдХреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдХреЗрдЪ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрдирд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдШрд░-рдирд┐рд░реНрдорд┐рдд рд╢рд░реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рдПрдВрдЯреЗрдирд╛ 17.3 рд╕реЗрдореА рд▓рдВрдмреЗ рддрд╛рд░ рд╣реИрдВред рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреА рдмрдврд╝реА рд╣реБрдИ рд╢рдХреНрддрд┐ рдФрд░ рд╕рд░рд▓рддрдо рдПрдВрдЯреЗрдирд╛ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдХреЗ рднреАрддрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рдВрдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд╕реНрддрд┐рд╖реНрдХ NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреЛрд░реНрдб рдкрд░ ESP8266 рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрд╣ рд╕реЗрдВрд╕рд░ рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрдХреЗрдд рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдмреЛрд░реНрдб рдкрд░ DHT22 рд╕реЗрдВрд╕рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди 1.5 ... 2 ┬░ C рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ (рдорд╛рдорд▓реЗ рдХреЗ рдмрд┐рдирд╛ рднреА!)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рдЧрд░реНрдореА рд▓рдВрдкрдЯрддрд╛ LM7805 рдФрд░ NodeMCU CP2102 рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рд╕реЗ рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдХреЛ рджреВрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реЗрдбрд┐рдПрдЯрд░ рдкрд░ LM7805 рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдФрд░ рддрд╛рдкрдорд╛рди рдХрдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдорд╛рдк рддреНрд░реБрдЯрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд╛рдпреБ рд╕рдВрд╡рд╣рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╢рд░реАрд░ рдХреА рдорд╛рддреНрд░рд╛ рд╕реЗ рдкрд░реЗ DHT22 рд╕реЗрдВрд╕рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ - рдпрд╣ рд╡рд┐рдХрд▓реНрдк рд╕рд░рд▓ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪреБрдирд╛ред
DHT22 рдХреА рдХрдо рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВред рдЖрдЬ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ: рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ HTU21D, Si7021, SHT21ред
рдПрд╕реА / рдбреАрд╕реА рдПрдбрд╛рдкреНрдЯрд░ рд╕реЗ рдПрдХ рдбреАрд╕реА 12 рд╡реА рд╡реЛрд▓реНрдЯреЗрдЬ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, LM7805 рдирд┐рд░рдВрддрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ 5V рдХрд╛ рд╡реЛрд▓реНрдЯреЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреА рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ 12 рд╡реА рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдЬрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдпреВрдПрд╕рдмреА рдкреЛрд░реНрдЯ рд╕реЗ рдорд╛рдирдХ USB рдХреЗрдмрд▓ - microUSB рдХреЗ рд╕рд╛рде NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдХреЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред NodeMCU CP2102 рдФрд░ MH Z-19 рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ 5V рд╣реИ, рд╕рд░реНрдХрд┐рдЯ (3.3V) рдХреЗ рд╢реЗрд╖ рдиреЛрдбреНрд╕ рдХреЛ рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ рдмрдирд╛рддреА рд╣реИред
рддрд╛рдкрдорд╛рди рдФрд░ рдЖрд░реНрджреНрд░рддрд╛ рд╕реЗрдВрд╕рд░ DHT22 NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдХреЗ D6 рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред DC3231 рдШрдбрд╝реА рдФрд░ 0.96 "рдбрд┐рд╕реНрдкреНрд▓реЗ I2C рджреЛ-рддрд╛рд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ESP8266 (NodeMCU CP2102 рдореЙрдбреНрдпреВрд▓ рдкрд░) рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдФрд░ Tx, CO2 рд╕рд╛рдордЧреНрд░реА рд╕реЗрдВрд╕рд░ MH Z-19 рдХреЗ Rx рдкрд┐рди рдХреНрд░рдорд╢рдГ Rx, Tx ESP8266 рдкрд┐рди рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВред рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рддрд╛рд░реНрдХрд┐рдХ рд╕реНрддрд░, рдЬреЛ NodeMCU CP2102 рд╕реЗ рд╕рдВрдХреЗрдд рдХреЛ 3.3V рдХреЗ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреЗрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЖрдпрд╛рдо 12V рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рдХрд░реАрдм рд╣реИред
рдпрджрд┐ рдЖрдк рд╡реЙрдЪ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмреИрдЯрд░реА рдХреЗ рдмрдЬрд╛рдп рдмреИрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреИрдЯрд░реА рдЪрд╛рд░реНрдЬ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдЕрдиреНрдпрдерд╛ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдХреЗ рдмрд╛рдж рдмреИрдЯрд░реА рд╕реВрдЬ рдЬрд╛рдПрдЧреАред 2 рд╕реЗрдХрдВрдб / рд╡рд░реНрд╖ рдХреА рд╕реНрд╡-рд╕рдВрдЪрд╛рд▓рд┐рдд рдШрдбрд╝реА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред
ESP8266 рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдХреЗрдЪ рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рдХреЗ рддрд╣рдд рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдХреЗрдЪ #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 //e-mail #include <ESP8266WiFiMulti.h> //https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.h #include <ESP8266HTTPClient.h> ESP8266WiFiMulti WiFiMulti; char address[64] {"e-mail"}; //e-mail, address // 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 //clock #include <pgmspace.h> #include <TimeLib.h> #include <WiFiUdp.h> #include <Wire.h> #include <RtcDS3231.h> //https://github.com/Makuna/Rtc RtcDS3231<TwoWire> Rtc(Wire); #define countof(a) (sizeof(a) / sizeof(a[0])) //timer #include <SimpleTimer.h> SimpleTimer timer; // unsigned int timerCO2; // MH-Z19 unsigned int timerBl; // Blynk unsigned int timerMail; // // GPIO Defines #define I2C_SDA 4 // D2 - OLED #define I2C_SCL 5 // D1 - OLED #define DHTPIN 12 //D6 cp2102 // Humidity/Temperature #include <DHT.h> #define DHTTYPE DHT22 // DHT 22 DHT dht(DHTPIN, DHTTYPE); #define mySerial Serial // Use U8g2 for i2c OLED Lib #include <SPI.h> #include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, I2C_SCL, I2C_SDA, U8X8_PIN_NONE); byte x {0}; byte y {0}; // Blynk token char blynk_token[33] {"Blynk token"}; //Transmitter #include <RCSwitch.h> RCSwitch transmitter = RCSwitch(); unsigned long TimeTransmitMax; // / // Setup Wifi connection WiFiManager wifiManager; // Network credentials String ssid {"am-5108"}; String pass {"vb" + String(ESP.getFlashChipId())}; //flag for saving data bool shouldSaveConfig = false; // float t {-100}; // int h {-1}; // int co2 {-1}; // co2 float Chs = 0.2; // () (: 0.1( ) - 0.4 ( )) char Tmx[]{"25.0"}, Hmn[]{"35"}, Cmx[]{"1000"}, tZ[]{"2.0"}; // t, h co2, . float Cmax, Tmax, Hmin, tZone; char Temperature0[]{"20.0"}, Temperature1[]{"22.0"}, Temperature2[]{"19.0"};// float TemperaturePoint0, TemperaturePoint1, TemperaturePoint2, TemperaturePoint1Mn, TemperaturePoint2Mn, TemperaturePoint1Pl, TemperaturePoint2Pl; float TemperaturePointA0 = 21.0; // char Hour1[]{"6"}, Hour2[]{"22"}; // , float HourPoint1, HourPoint2; float MinPoint1 = 0, MinPoint2 = 0; int n, j, m; // , int progr = 0; // int timeSummerWinter = 0; // (1)/(0) int a = 1; // : 1 - , 2 - bool buttonBlynk = true; // (true)/(falce) V(10) Blynk //NTP, clock uint8_t hh,mm,ss; //containers for current time char time_r[9]; char date_r[12]; // NTP Servers: //static const char ntpServerName[] = "us.pool.ntp.org"; static const char ntpServerName[] = "time.nist.gov"; 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 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; tZoneI = (int)tZone; 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 + timeSummerWinter * SECS_PER_HOUR; //tZoneI } } 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 synchronClockA() { WiFiManager wifiManager; 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); 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(); 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); } //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); } void readCO2() { 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}; int h1 {-1}, i; // 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) + "%"); // CO2 readCO2(); } void sendToBlynk(){ Blynk.virtualWrite(V1, t); Blynk.virtualWrite(V2, h); Blynk.virtualWrite(V3, co2); Blynk.virtualWrite(V4, TemperaturePoint0); } void noData() { u8g2.setFont(u8g2_font_9x18_mf); x = 48; y = 40; u8g2.drawStr(x, y, "***"); } void drawOn() { float TemperatureP0; char Online_ch[]{" Online"}; TemperatureP0 = TemperaturePoint0 - Chs; dtostrf(TemperatureP0, 4, 1, Temperature0); // float char String Temperature0_i; Temperature0_i = String(Temperature0); char Temperature0_i_m [16]; Temperature0_i.toCharArray(Temperature0_i_m, 16); u8g2.clearBuffer(); String Temperature0_p; String onl1 = "OnLine T<"; Temperature0_p = onl1 + Temperature0_i_m; char Temperature0_p_m [16]; Temperature0_p.toCharArray(Temperature0_p_m, 16); String Tmx_i; Tmx_i = String(Tmx); char Tmx_i_m [16]; Tmx_i.toCharArray(Tmx_i_m, 16); u8g2.clearBuffer(); String Tmx_p; String onl2 = "OnLine T>"; Tmx_p = onl2 + Tmx_i_m; char Tmx_p_m [16]; Tmx_p.toCharArray(Tmx_p_m, 16); String Cmx_i; Cmx_i = String(Cmx); char Cmx_i_m [16]; Cmx_i.toCharArray(Cmx_i_m, 16); u8g2.clearBuffer(); String Cmx_p; String onl3 = "OnL CO2>"; Cmx_p = onl3 + Cmx_i_m; char Cmx_p_m [16]; Cmx_p.toCharArray(Cmx_p_m, 16); String Hmn_i; Hmn_i = String(Hmn); char Hmn_i_m [16]; Hmn_i.toCharArray(Hmn_i_m, 16); u8g2.clearBuffer(); String Hmn_p; String onl4 = "OnLine H<"; Hmn_p = onl4 + Hmn_i_m; char Hmn_p_m [16]; Hmn_p.toCharArray(Hmn_p_m, 16); //string 3 u8g2.setFont(u8g2_font_9x18_mf); x = 0; y = 64; u8g2.drawStr(x, y, Online_ch); if ((hh>=HourPoint1) and (hh<=HourPoint2) and (t<TemperatureP0)) u8g2.drawStr(x, y, Temperature0_p_m); else if (t > Tmax) u8g2.drawStr(x, y, Tmx_p_m); else if (co2 > Cmax) u8g2.drawStr(x, y, Cmx_p_m); else if (h < Hmin) u8g2.drawStr(x, y, Hmn_p_m); switch((millis() / 100) % 4) { // Temperature case 0: { String info_t; String paramT; String tmpr = "T("; String grad = "C):"; const char degree {176}; paramT = tmpr + degree + grad; char paramT_m [12]; paramT.toCharArray(paramT_m, 12); info_t = String(t); char info_t_m [12]; info_t.toCharArray(info_t_m, 5); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, paramT_m); //string 2 if ((t > -100) and (t < 100)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_t_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_t_m); } else noData(); } break; //Humidity case 1: { String info_h; info_h = String(h); char info_h_m [12]; info_h.toCharArray(info_h_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "H(%):"); //string 2 if ((h > -1) and (h < 100)){ u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_h_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_h_m); } else noData(); } break; //CO2 case 2: { String info_co2; info_co2 = String(co2); char info_co2_m [12]; info_co2.toCharArray(info_co2_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 8; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "CO2(ppm):"); //string 2 if ((co2 > -1) and (co2 <= 2000)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_co2_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_co2_m); } else noData(); } break; //time, date case 3: { //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = (128 - u8g2.getStrWidth(date_r))/2; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, date_r); //string 2 u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(time_r))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, time_r); } break; } u8g2.sendBuffer(); } void drawOff() { float TemperatureP0A; char OffLine_ch[]{"Offline Tst=21"}; TemperatureP0A = TemperaturePointA0 - Chs; // dtostrf(TemperatureP0A, 4, 1, TemperaturePointA0); // float char String TemperaturePointA0_i; TemperaturePointA0_i = String(TemperaturePointA0); char TemperaturePointA0_i_m [16]; TemperaturePointA0_i.toCharArray(TemperaturePointA0_i_m, 16); u8g2.clearBuffer(); String TemperaturePointA0_p; String onl1 = "Offline T<"; TemperaturePointA0_p = onl1 + TemperaturePointA0_i_m; char TemperaturePointA0_p_m [16]; TemperaturePointA0_p.toCharArray(TemperaturePointA0_p_m, 16); //string 3 u8g2.setFont(u8g2_font_9x18_mf); x = 0; y = 64; u8g2.drawStr(x, y, OffLine_ch); if (t<TemperatureP0A) u8g2.drawStr(x, y, TemperaturePointA0_p_m); switch((millis() / 100) % 4) { // Temperature case 0: { String info_t; String paramT; String tmpr = "T("; String grad = "C):"; const char degree {176}; paramT = tmpr + degree + grad; char paramT_m [12]; paramT.toCharArray(paramT_m, 12); info_t = String(t); char info_t_m [12]; info_t.toCharArray(info_t_m, 5); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, paramT_m); //string 2 if ((t > -100) and (t < 100)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_t_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_t_m); } else noData(); } break; //Humidity case 1: { String info_h; info_h = String(h); char info_h_m [12]; info_h.toCharArray(info_h_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "H(%):"); //string 2 if ((h > -1) and (h < 100)){ u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_h_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_h_m); } else noData(); } break; //CO2 case 2: { String info_co2; info_co2 = String(co2); char info_co2_m [12]; info_co2.toCharArray(info_co2_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 8; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "CO2(ppm):"); //string 2 if ((co2 > -1) and (co2 <= 2000)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_co2_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_co2_m); } else noData(); } break; //time, date case 3: { //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = (128 - u8g2.getStrWidth(date_r))/2; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, date_r); //string 2 u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(time_r))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, time_r); } break; } u8g2.sendBuffer(); } void drawOffBlynk() { float TemperatureP0; char OffBlynk_ch[]{" OffBlynk"}; TemperatureP0 = TemperaturePoint0 - Chs; dtostrf(TemperatureP0, 4, 1, Temperature0); // float char String Temperature0_i; Temperature0_i = String(Temperature0); char Temperature0_i_m [16]; Temperature0_i.toCharArray(Temperature0_i_m, 16); u8g2.clearBuffer(); String Temperature0_p; String onl1 = "OffBL T<"; Temperature0_p = onl1 + Temperature0_i_m; char Temperature0_p_m [16]; Temperature0_p.toCharArray(Temperature0_p_m, 16); String Tmx_i; Tmx_i = String(Tmx); char Tmx_i_m [16]; Tmx_i.toCharArray(Tmx_i_m, 16); u8g2.clearBuffer(); String Tmx_p; String onl2 = "OffBL T>"; Tmx_p = onl2 + Tmx_i_m; char Tmx_p_m [16]; Tmx_p.toCharArray(Tmx_p_m, 16); String Cmx_i; Cmx_i = String(Cmx); char Cmx_i_m [16]; Cmx_i.toCharArray(Cmx_i_m, 16); u8g2.clearBuffer(); String Cmx_p; String onl3 = "OnL CO2>"; Cmx_p = onl3 + Cmx_i_m; char Cmx_p_m [16]; Cmx_p.toCharArray(Cmx_p_m, 16); String Hmn_i; Hmn_i = String(Hmn); char Hmn_i_m [16]; Hmn_i.toCharArray(Hmn_i_m, 16); u8g2.clearBuffer(); String Hmn_p; String onl4 = "OffBL H<"; Hmn_p = onl4 + Hmn_i_m; char Hmn_p_m [16]; Hmn_p.toCharArray(Hmn_p_m, 16); //string 3 u8g2.setFont(u8g2_font_9x18_mf); x = 0; y = 64; u8g2.drawStr(x, y, OffBlynk_ch); if ((hh>=HourPoint1) and (hh<=HourPoint2) and (t<TemperatureP0)) u8g2.drawStr(x, y, Temperature0_p_m); else if (t > Tmax) u8g2.drawStr(x, y, Tmx_p_m); else if (co2 > Cmax) u8g2.drawStr(x, y, Cmx_p_m); else if (h < Hmin) u8g2.drawStr(x, y, Hmn_p_m); switch((millis() / 100) % 4) { // Temperature case 0: { String info_t; String paramT; String tmpr = "T("; String grad = "C):"; const char degree {176}; paramT = tmpr + degree + grad; char paramT_m [12]; paramT.toCharArray(paramT_m, 12); info_t = String(t); char info_t_m [12]; info_t.toCharArray(info_t_m, 5); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, paramT_m); //string 2 if ((t > -100) and (t < 100)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_t_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_t_m); } else noData(); } break; //Humidity case 1: { String info_h; info_h = String(h); char info_h_m [12]; info_h.toCharArray(info_h_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 16; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "H(%):"); //string 2 if ((h > -1) and (h < 100)){ u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_h_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_h_m); } else noData(); } break; //CO2 case 2: { String info_co2; info_co2 = String(co2); char info_co2_m [12]; info_co2.toCharArray(info_co2_m, 12); //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = 8; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, "CO2(ppm):"); //string 2 if ((co2 > -1) and (co2 <= 2000)) { u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(info_co2_m))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, info_co2_m); } else noData(); } break; //time, date case 3: { //string 1 u8g2.setFont(u8g2_font_9x18_mf); x = (128 - u8g2.getStrWidth(date_r))/2; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, date_r); //string 2 u8g2.setFont(u8g2_font_inb24_mf); x = (128 - u8g2.getStrWidth(time_r))/2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, time_r); } break; } u8g2.sendBuffer(); } void drawBoot(String msg = "Loading...") { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_9x18_mf); x = (128 - u8g2.getStrWidth(msg.c_str())) / 2; y = 32 + u8g2.getAscent() / 2; u8g2.drawStr(x, y, msg.c_str()); u8g2.sendBuffer(); } void drawConnectionDetails(String ssid, String pass, String url) { String msg {""}; u8g2.clearBuffer(); msg = "Connect to WiFi:"; u8g2.setFont(u8g2_font_7x13_mf); x = (128 - u8g2.getStrWidth(msg.c_str())) / 2; y = u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, msg.c_str()); msg = "net: " + ssid; x = (128 - u8g2.getStrWidth(msg.c_str())) / 2; y = y + 1 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, msg.c_str()); msg = "pw: "+ pass; x = (128 - u8g2.getStrWidth(msg.c_str())) / 2; y = y + 1 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, msg.c_str()); msg = "Open browser:"; x = (128 - u8g2.getStrWidth(msg.c_str())) / 2; y = y + 1 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, msg.c_str()); // URL // u8g2.setFont(u8g2_font_6x12_mf); x = (128 - u8g2.getStrWidth(url.c_str())) / 2; y = y + 1 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, url.c_str()); u8g2.sendBuffer(); } bool loadConfigS(){ Blynk.config(address); Serial.print("e-mail: "); Serial.println( address ); Blynk.config(Tmx); Serial.print("T max: "); Serial.println( Tmx ); Blynk.config(Cmx); Serial.print("CO2 max: "); Serial.println( Cmx ); Blynk.config(Temperature0); Serial.print("Temperature 0: "); Serial.println( Temperature0 ); Blynk.config(Temperature1); Serial.print("Temperature1: "); Serial.println( Temperature1 ); Blynk.config(Temperature2); Serial.print("Temperature2: "); Serial.println( Temperature2 ); Blynk.config(Hmn); Serial.print("H min: "); Serial.println( Hmn ); Blynk.config(Hour1); Serial.print("Hour 1: "); Serial.println( Hour1 ); Blynk.config(Hour2); Serial.print("Hour 2: "); Serial.println( Hour2 ); Blynk.config(tZ); Serial.print("Time Zone: "); Serial.println( tZ ); 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(Tmx, json["Tmx"]); strcpy(Cmx, json["Cmx"]); strcpy(Temperature0, json["Temperature0"]); strcpy(Temperature1, json["Temperature1"]); strcpy(Temperature2, json["Temperature2"]); strcpy(Hmn, json["Hmn"]); strcpy(Hour1, json["Hour1"]); strcpy(Hour2, json["Hour2"]); strcpy(tZ, json["tZ"]); } 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(ssid, pass, url); } void setupWiFi() { //set config save notify callback wifiManager.setSaveConfigCallback(saveConfigCallback); // Custom parameters WiFiManagerParameter custom_tZ("tZ", "Time Zone", tZ, 5); wifiManager.addParameter(&custom_tZ); WiFiManagerParameter custom_Temperature0("Temperature0", "Temperature 0", Temperature0, 5); wifiManager.addParameter(&custom_Temperature0); WiFiManagerParameter custom_Hour1("Hour1", "Hour 1", Hour1, 5); wifiManager.addParameter(&custom_Hour1); WiFiManagerParameter custom_Temperature1("Temperature1", "Temperature 1", Temperature1, 5); wifiManager.addParameter(&custom_Temperature1); WiFiManagerParameter custom_Hour2("Hour2", "Hour 2", Hour2, 5); wifiManager.addParameter(&custom_Hour2); WiFiManagerParameter custom_Temperature2("Temperature2", "Temperature 2", Temperature2, 5); wifiManager.addParameter(&custom_Temperature2); WiFiManagerParameter custom_Cmx("Cmx", "Cmax", Cmx, 7); wifiManager.addParameter(&custom_Cmx); WiFiManagerParameter custom_Hmn("Hmn", "Hmin", Hmn, 5); wifiManager.addParameter(&custom_Hmn); WiFiManagerParameter custom_Tmx("Tmx", "Tmax", Tmx,5); wifiManager.addParameter(&custom_Tmx); WiFiManagerParameter custom_address("address", "E-mail", address, 64); wifiManager.addParameter(&custom_address); WiFiManagerParameter custom_blynk_token("blynk_token", "Blynk Token", blynk_token, 34); wifiManager.addParameter(&custom_blynk_token); wifiManager.setAPCallback(configModeCallback); wifiManager.setTimeout(180); if (!wifiManager.autoConnect(ssid.c_str(), pass.c_str())) { a++; Serial.println("mode OffLINE :("); loadConfigS(); synchronClockA(); } //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["Tmx"] = custom_Tmx.getValue(); json["Cmx"] = custom_Cmx.getValue(); json["Temperature0"] = custom_Temperature0.getValue(); json["Temperature1"] = custom_Temperature1.getValue(); json["Temperature2"] = custom_Temperature2.getValue(); json["Hmn"] = custom_Hmn.getValue(); json["Hour1"] = custom_Hour1.getValue(); json["Hour2"] = custom_Hour2.getValue(); json["tZ"] = custom_tZ.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()); } BLYNK_WRITE(V10) { if (param.asInt() == 1) { buttonBlynk = true; Blynk.virtualWrite(V10, HIGH); drawBoot("Thermo ON"); } else { buttonBlynk = false; Blynk.virtualWrite(V10, LOW); drawBoot("Thermo OFF"); } } 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/aqm42.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(); } } void HystTemperatureA() { float TemperaturePointA0Mn, TemperaturePointA0Pl; TemperaturePointA0Mn = TemperaturePointA0-Chs; TemperaturePointA0Pl = TemperaturePointA0+Chs; if (t<TemperaturePointA0Mn) { if (millis() - TimeTransmitMax > 120000){ TimeTransmitMax = millis(); transmitter.send(B11111110, 8); Serial.println ("t<TemperaturePointA0Mn Thermostat ON"); } } else if (millis() - TimeTransmitMax > 120000) { TimeTransmitMax = millis(); transmitter.send(B10000000, 8); Serial.println ("t>TemperaturePointA0Mn Thermostat OFF"); } if (t<TemperaturePointA0Pl) { if (millis() - TimeTransmitMax > 120000){ TimeTransmitMax = millis(); transmitter.send(B11111110, 8); Serial.println ("t<TemperaturePointA0Pl Thermostat ON"); } } else if (millis() - TimeTransmitMax > 120000) { TimeTransmitMax = millis(); transmitter.send(B10000000, 8); Serial.println ("t>TemperaturePointA0Pl Thermostat OFF"); } } void HystTemperature() { float TemperaturePoint0Mn, TemperaturePoint0Pl; TemperaturePoint0Mn = TemperaturePoint0-Chs; TemperaturePoint0Pl = TemperaturePoint0+Chs; if (t<TemperaturePoint0Mn) { if (millis() - TimeTransmitMax > 120000){ TimeTransmitMax = millis(); transmitter.send(B11111110, 8); Serial.println ("t<TemperaturePoint0Mn Thermostat ON"); } } else if (millis() - TimeTransmitMax > 120000) { TimeTransmitMax = millis(); transmitter.send(B10000000, 8); Serial.println ("t>TemperaturePoint0Mn Thermostat OFF"); } if (t<TemperaturePoint0Pl) { if (millis() - TimeTransmitMax > 120000){ TimeTransmitMax = millis(); transmitter.send(B11111110, 8); Serial.println ("t<TemperaturePoint0Pl Thermostat ON"); } } else if (millis() - TimeTransmitMax > 120000) { TimeTransmitMax = millis(); transmitter.send(B10000000, 8); Serial.println ("t>TemperaturePoint0Pl Thermostat OFF"); } } void TransmitterA(){ transmitter.send(B10101010, 8); //B10101010 - HystTemperatureA(); } void Transmitter(){ transmitter.send(B10101010, 8); //B10101010 - if (n>=24) n = 0; if (m>=60) m = 0; progr = 0; if ((hh >= HourPoint1) and (hh < HourPoint2)){ progr = 1; if (mm >= MinPoint1) progr = 1; if (mm < MinPoint2) progr = 1; } else if (hh >= HourPoint2) { progr = 2; if (mm >= MinPoint2) progr = 2; } if (buttonBlynk==true) { Serial.println ("BLynk: "); if (progr == 0) { TemperaturePoint0 = TemperaturePoint0; HystTemperature(); Serial.println (": t = " + String(TemperaturePoint0)); } else if (progr == 1) { TemperaturePoint0 = TemperaturePoint1; HystTemperature(); Serial.println (": t = " + String(TemperaturePoint0)); } else if (progr == 2){ TemperaturePoint0 = TemperaturePoint2; HystTemperature(); Serial.println (": t = " + String(TemperaturePoint0)); } } else { transmitter.send(B10000000, 8); Serial.println ("BLynk: "); } if (co2 > Cmax) { transmitter.send(B11111101, 8); Serial.println("co2 > Cmax"); } else transmitter.send(B00000010, 8); if (h < Hmin) { transmitter.send(B11111011, 8); Serial.println("h < Hmin"); } else transmitter.send(B00000100, 8); if (t > Tmax) { transmitter.send(B11110111, 8); Serial.println("t > Tmax"); } else transmitter.send(B00001000, 8); } void connectBlynk(){ if(String(blynk_token)== "Blynk token"){ drawBoot("OFFBLYNK!"); delay (3000); } else { drawBoot("Connect. Blynk"); Serial.println("Connecting to blynk..."); while (Blynk.connect() == false) { delay(500); Serial.println("Connecting to blynk..."); } } } void setup() { // factoryReset(); // RAM mySerial.begin(9600); Serial.begin(115200); transmitter.enableTransmit(2); u8g2.begin(); // drawBoot("Loading..."); // if (!SPIFFS.begin()) { Serial.println("Failed to mount file system"); ESP.reset(); } // drawBoot("Connect. WiFi"); setupWiFi(); timerCO2 = timer.setInterval(15000, readCO2); buttonBlynk = true; if(a == 1){ // Load config drawBoot("Load Config"); 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(Tmx); Serial.print("T max: "); Serial.println(Tmx); Blynk.config(Cmx); Serial.print("CO2 max: "); Serial.println(Cmx); Blynk.config(Temperature0); Serial.print("Temperature 0: "); Serial.println(Temperature0); Blynk.config(Temperature1); Serial.print("Temperature1: "); Serial.println(Temperature1); Blynk.config(Temperature2); Serial.print("Temperature2: "); Serial.println(Temperature2); Blynk.config(Hmn); Serial.print("H min: "); Serial.println(Hmn); Blynk.config(Hour1); Serial.print("Hour 1: "); Serial.println(Hour1); Blynk.config(Hour2); Serial.print("Hour 2: "); Serial.println(Hour2); Blynk.config(tZ); Serial.print("Time Zone: "); Serial.println(tZ); Blynk.config(blynk_token, "blynk-cloud.com", 8442); Serial.print("token: " ); Serial.println(blynk_token); // char float Tmax = atof (Tmx); Cmax = atof (Cmx); TemperaturePoint0 = atof (Temperature0); TemperaturePoint1 = atof (Temperature1); TemperaturePoint2 = atof (Temperature2); Hmin = atof (Hmn); HourPoint1 = atof (Hour1); HourPoint2 = atof (Hour2); tZone = atof (tZ); // drawBoot("Clock synchr."); synchronClock(); // timerCO2 = timer.setInterval(15000, readCO2); timerBl = timer.setInterval(5000, sendToBlynk); connectBlynk(); // Blynk Blynk.virtualWrite(V10, HIGH); // V10 buttonBlynk = true; } } void loop(){ if (a == 2) { Serial.println(":( OffLINE"); timer.run(); Clock(); sendMeasurements(); TransmitterA(); drawOff(); delay(1000); } else if (a == 1) { Serial.println(":) OnLINE"); timer.run(); Clock(); Blynk.run(); BLYNK_WRITE(V10); Transmitter(); sendMeasurements(); if(String(blynk_token) == "Blynk token") drawOffBlynk(); else drawOn(); if (j>=24) j =0; if (hh == j){ if ((mm==30) and ((ss<30) )){ if ((t > Tmax) or (co2 > Cmax) or (h < Hmin) or ((progr == 0) and (t<(TemperaturePoint0-1.0)) or ((progr == 1) and (t<(TemperaturePoint1-1.0)) or ((progr == 2) and (t<(TemperaturePoint2-1.0)))))) mailer(); } } j++; } }
рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рд╡рд╛рдИ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдХреЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рдИ-рдореЗрд▓ рдкрд░ рдПрдХ рдкрддреНрд░ рднреЗрдЬрддрд╛ рд╣реИ:

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

рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг Arduino Pro Mini рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрд░рдПрдл рд░рд┐рд╕реАрд╡рд░ рд╕реЗ рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реАрдорд╛ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рд╕рднреА 5V contactor рдиреЛрдбреНрд╕ рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ HLK-PM01 AC / DC рдПрдбрд╛рдкреНрдЯрд░ рд╕реЗ рдЖрддреА рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХ 6 (h> Hmin), 5 (co2> CO2max), 3 (t> Tmax) рдХреЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрд░реНрджреНрд░реАрдХрд░рдг, рдордЬрдмреВрд░ рд╡реЗрдВрдЯрд┐рд▓реЗрд╢рди рдпрд╛ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕реЗрдВрд╕рд░ рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрдХреЗрдд рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрдмрд▓ рдмрд┐рдЫрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЛ рдмрд┐рдЬрд▓реА рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдирд┐рдпрдВрддреНрд░рдг рддрд╛рд░реЛрдВ рдХреЗ рд╕рд┐рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдкрд╛рд╕ рд░рдЦреЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реАрдЯрд┐рдВрдЧ рдмреЙрдпрд▓рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдХрд░ рд╣реБрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВ - рдмреЙрдпрд▓рд░ рдФрд░ рдХреБрдХрд░ рд╣реБрдб рдкрд╛рд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред
рдЕрд░реЛрдбрд┐рдиреЛ рдкреНрд░реЛ рдорд┐рдиреА рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдВрдЯреЗрдХреНрдЯрд░ рд╕реНрдХреЗрдЪ - рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗред
contactor рд╕реНрдХреЗрдЪ #include <RCSwitch.h> //https://github.com/sui77/rc-switch RCSwitch mySwitch = RCSwitch(); void setup() { pinMode(13, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); digitalWrite(3, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(13, LOW); mySwitch.enableReceive(0); } void loop() { if( mySwitch.available() ){ int value = mySwitch.getReceivedValue(); //t < Tmin if(value == B11111110) digitalWrite(4, LOW); else if (value == B10000000) digitalWrite(4, HIGH); //co2 > Cmax if(value == B11111101) digitalWrite(5, LOW); else if (value == B00000010) digitalWrite(5, HIGH); //h < Hmin if(value == B11111011) digitalWrite(6, LOW); else if (value == B00000100) digitalWrite(6, HIGH); //t > Tmax if(value == B11110111)digitalWrite(3, LOW); else if (value == B00001000) digitalWrite(3, HIGH); // D13 Arduino - - ( - ) if(value == B10101010) digitalWrite(13, HIGH); // B10101010 - , else digitalWrite(13, LOW); mySwitch.resetAvailable(); } }

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╢реБрд░реВ рдХрд░рдирд╛
рдпрд╣ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдЪрд░рдг 1:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВред
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдзреИрд░реНрдп рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдХреБрдЫ рдХрд┐рдП 3 рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдореЗрдВ рдЬрд╛рдПрдЧрд╛ - рд╡рд╛рдИ-рдлрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдШрд░ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ред 3 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рддреАрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдлреНрд▓реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧреАред

рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб ( рдСрдлрд▓рд╛рдЗрди, рдСрдирд▓рд╛рдЗрди рдпрд╛ рдСрдлрдмреНрд▓рд┐рдирдХ ) рд╣реИ рдФрд░ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╕реАрдорд╛ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдлрд╝рд▓рд╛рдЗрди CO2> 1000 - рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдорд╛рдкрд╛ рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА 1000 рдкреАрдкреАрдПрдо рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди рдШрдбрд╝реА рдЧрд▓рдд рд╕рдордп рджрд┐рдЦрд╛рдПрдЧреАред рд╡реЗ рдЕрднреА рддрдХ рд╕рдЯреАрдХ рд╕рдордп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдЕрднреА рддрдХ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╣реИред
рд╕реНрд╡рд╛рдпрддреНрдд рдореЛрдб рдореЗрдВ, рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХрд╛ рддрд╛рдкрдорд╛рди 21 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪрд░рдг 2:
рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, AC / DC рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдбреЙрдкреНрдЯрд░ рдкрд░ рдФрд░ рдмрдВрдж рдХрд░реЗрдВред рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдХреЗ рд▓рд┐рдП рддреАрди рдорд┐рдирдЯ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред
рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ am-5108 рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рдЙрдард╛рдпрд╛ред рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЙрдкрд▓рдмреНрдз рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реИред рдлрд┐рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЗрдЬ http://192.168.4.1 рдЦреЛрд▓реЗрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд╛рдИрдлрд╛рдИ (рдиреЛ рд╕реНрдХреИрди) рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдЦреБрд▓реЗрдЧрд╛:
рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд░реВрдк:

рдЕрдкрдиреЗ рдШрд░ рдиреЗрдЯрд╡рд░реНрдХ, BLynk рдкрд╣рдЪрд╛рди рдХреБрдВрдЬреА, рдИрдореЗрд▓ рдХреЗ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдордп рдХреНрд╖реЗрддреНрд░, рд╕рдордп (рдШрдВрдЯреЗ) рдФрд░ рд╕рдордп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди, рд╕рд╛рде рд╣реА рддрд╛рдкрдорд╛рди, рдЖрд░реНрджреНрд░рддрд╛ рдФрд░ рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдореВрд▓реНрдп рдмрджрд▓реЗрдВред
рджрд┐рди рдХреЛ рджреЛ рд╕рдордп рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рддреАрди рд╕рдордп рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкрд╣рд▓рд╛: 00 рдШрдВрдЯреЗ 00 рдорд┐рдирдЯ рд╕реЗ рдмрд┐рдВрджреБ 1 ( рдШрдВрдЯрд╛ 1, рдорд┐рдирдЯ 1 ) рддрдХ, рджреВрд╕рд░рд╛: рдмрд┐рдВрджреБ 1 ( рдШрдВрдЯрд╛ 1, рдорд┐рдирдЯ 1 ) рд╕реЗ рдмрд┐рдВрджреБ 2 ( рдШрдВрдЯрд╛ 2, рдорд┐рдирдЯ 2 ) рддрдХ рдФрд░ рддреАрд╕рд░рд╛: рдмрд┐рдВрджреБ 2 ( рдШрдВрдЯрд╛ 2, рдорд┐рдирдЯ 2 ) рд╕реЗ 00 рдШрдВрдЯреЗ 00 рдорд┐рдирдЯ рддрдХ ред рдлреЙрд░реНрдо рдкрд░ рдорд┐рдирдЯреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реИ, рдЕрдВрдХ 1,2 рдХреЗ рд▓рд┐рдП рдорд┐рдирдЯреЛрдВ рдХреЛ рд╕реНрдХреЗрдЪ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЪрд░ MinPoint1, MinPoint2 )ред рдкреНрд░рддреНрдпреЗрдХ рддреАрди рд╕рдордп рд╕реАрдорд╛рдУрдВ рдореЗрдВ, рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рддрд╛рдкрдорд╛рди рдирд┐рдпрдВрддреНрд░рдг рддрд╛рдкрдорд╛рди - рддрд╛рдкрдорд╛рди 0, рддрд╛рдкрдорд╛рди 1 рдФрд░ рддрд╛рдкрдорд╛рди 2 рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреВрд░реЗ рджрд┐рди рдПрдХ рд╣реА рддрд╛рдкрдорд╛рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдорд╛рди 0 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдЕрдВрдХ 1.2 рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВред
рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб рдорд╛рдиреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рдЙрди рд╕рдВрдХреЗрддрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдорд┐рд▓реЗ:
- рдиреАрдВрдж рдХреЗ рджреМрд░рд╛рди рд░рд╛рдд рдореЗрдВ рдЖрд░рд╛рдорджрд╛рдпрдХ рддрд╛рдкрдорд╛рди 19 ... 21 ┬░ C, рджрд┐рди рдХреЗ рджреМрд░рд╛рди - 22 ... 23 ┬░ Cред
- рдардВрдб рдХреЗ рдореМрд╕рдо рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╕рд╛рдкреЗрдХреНрд╖ рдЖрд░реНрджреНрд░рддрд╛ 30 ... 45%, рдФрд░ рдЧрд░реНрдо - 30 ... 60% рдХреА рдЖрд░реНрджреНрд░рддрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрддрдо рдЕрдзрд┐рдХрддрдо рдЖрд░реНрджреНрд░рддрд╛ рд╕рдВрдХреЗрддрдХ: рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ 60% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ - 65%ред
- рдХрдорд░реЛрдВ рдореЗрдВ рдХрд╛рд░реНрдмрди рдбрд╛рдЗрдСрдХреНрд╕рд╛рдЗрдб рдХрд╛ рдЕрдзрд┐рдХрддрдо рд╕реНрддрд░ 1000 рдкреАрдкреАрдПрдо рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрдбрд░реВрдо, рдмрдЪреНрдЪреЛрдВ рдХреЗ рдХрдорд░реЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕реНрддрд░ - 600 рдкреАрдкреАрдПрдо рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред 1400 рдкреАрдкреАрдПрдо рдХрд╛ рдирд┐рд╢рд╛рди рдХрдорд░реЗ рдореЗрдВ рдЕрдиреБрдореЗрдп рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдХреА рд╕реАрдорд╛ рд╣реИред рдпрджрд┐ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рд╡рд╛рдпреБ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрдо рдорд╛рдиреА рдЬрд╛рддреА рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рджреИрдирд┐рдХ рддрд╛рдкрдорд╛рди рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо (рджрд┐рди рдХреЗ рджреМрд░рд╛рди - рдЙрдЪреНрдЪ рддрд╛рдкрдорд╛рди, рд░рд╛рдд рдореЗрдВ - рдХрдо) рдЗрд╕ рдзрд╛рд░рдгрд╛ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рджрд┐рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд░рд╛рдпреЗрджрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрдорд░реЗ рдореЗрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдУрдВ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдИ-рдореЗрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рджрд╣рд▓реАрдЬ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдкрд░реЗ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЦреЛ рдЬрд╛рдПрдЧрд╛ред рджрд░реНрдЬ рдХрд┐рдП рдЧрдП Blynk рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛, рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рджреВрд░реА рдкрд░ рд╣рд╡рд╛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдерд░реНрдореЛрд╕реНрдЯреИрдЯ "рдЦреЛ рдЧрдпрд╛" рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реАрдорд┐рдд рдореВрд▓реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдЦрд╛рд▓реА рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд░рд╣реЗрдЧрд╛: рдерд░реНрдореЛрд╕реНрдЯреЗрдЯрд┐рдВрдЧред
рдФрд░ рдПрдХ рдмрд╛рддред рдХреГрдкрдпрд╛ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЪрд░ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдПрдБ рджрд░реНрдЬ рдХрд░реЗрдВ, рдлрд┐рд░ рд╕реНрдХреЗрдЪ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж: рд╕рдордп рдЕрдВрдХ 1.2 (рдШрдВрдЯрд╛) - рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рд╛рд░реВрдкред
ESP8266 рдореЗрдореЛрд░реА ( рд╕реЗрд╡ рдмрдЯрди) рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдФрд░ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдХреЛрдИ рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╣реЛрддрд╛ рд╣реИ!) рдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛ рдмрд╛рд░ ESP8266 рдореЗрдВ рд╕реНрдХреЗрдЪ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реА рдмрд╛рд░ - рд▓рд╛рдЗрди factoryReset () рдХреЗ рд╕рд╛рде Setup'e рдореЗрдВ рдЕрдкреВрд░реНрдг; рдФрд░ рджреВрд╕рд░реЗ рдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА, рдлрд┐рд░ рдЪрд░рдг 2 рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рдЪрд░рдг 3:
рдЕрдм рдЖрдк рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЗ рдмреАрдЪ рд╕реНрдерд┐рд░ рд░реЗрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде, Arduino рдмреЛрд░реНрдб рдкрд░ D13 рдПрд▓рдИрдбреА рд▓рдЧрднрдЧ 1 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЪрдордХрддреА рд╣реИред
рдпрджрд┐ рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЛ рд╣реАрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗ рдПрдХ рдЖрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЦреБрд▓реЗ рд░рд┐рд▓реЗ рд╕рдВрдкрд░реНрдХ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд░рд┐рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдПрд▓рдИрдбреА рдкреНрд░рдХрд╛рд╢ рд╣реЛрдЧрд╛ред
рдпрджрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рдВрдкрд░реНрдХрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╣реАрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣реАрдЯрд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреЗ рдПрдХ рддрд╛рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрд╛рдВрдмреЗ рдХреЗ рддрд╛рд░ рдХреЗ рдХреНрд░реЙрд╕ рд╕реЗрдХреНрд╢рди рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХреЗрддрдХ 5 рдП / рдорд┐рдореА 2 рд╣реИ ред
рдЪрд░рдг 4:
рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ Blynk рдРрдк рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ Blynk рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ - рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдмреЗрд▓реНрдХ рдХреЗ рд▓рд┐рдП рдЪрд░ (рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдХреЗрдЪ рдореЗрдВ рдЙрдирдХреА рддрд▓рд╛рд╢ рди рдХрд░реЗрдВ): рддрд╛рдкрдорд╛рди - V1 , рдЖрд░реНрджреНрд░рддрд╛ - V2 , CO 2 рд╕рд╛рдордЧреНрд░реА - V3 , рддрд╛рдкрдорд╛рди рдирд┐рдпрдВрддреНрд░рдг рддрд╛рдкрдорд╛рди - V4 , рдЖрднрд╛рд╕реА рдмрдЯрди - V10 ред
рдореЗрд░реЗ рд╕реНрдорд╛рд░реНрдЯрдлрд╝реЛрди рдкрд░, Blynk'a рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЖрдк рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ) рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
рдЧреНрд░рд╛рдл рдорд╛рдкрд╛ рддрд╛рдкрдорд╛рди (рд╕рдлреЗрдж), рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рддрд╛рдкрдорд╛рди (рдкреАрд▓рд╛) рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╕рдордп рдЕрдВрддрд░рд╛рд▓ 24 рдШрдВрдЯреЗ рд╣реИред рдЖрд░реНрджреНрд░рддрд╛ рдФрд░ рд╕реАрдУ 2 рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЪрд░ рдЧреНрд░рд╛рдл рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдорд╛рдиреЗ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдЧреНрд░рд╛рдлрд╝ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рдХреНрд░реЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд░реНрдЪреБрдЕрд▓ THERMOSTAT рдмрдЯрди рд╕реЗ рд╕рдВрдХреЗрдд рддрднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдПрдХ рдмрдЯрди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдХреНрд░реАрди рдкрд░ рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рдерд░реНрдореЛ рдСрдл! рдпрд╛ рдерд░реНрдореЛ рдкрд░! - рдмрдЯрди рдХреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ 16 рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рдХреЗ рд╢реБрд░реБрдЖрддреА рддрд╛рдкрдорд╛рди рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 5 рд╡рд░реНрдЧ рдореАрдЯрд░ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде 2 kW / рдШрдВрдЯрд╛ рдлреИрди рд╣реАрдЯрд░ рдХреЛ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рддрд╛рдкрдорд╛рди (рдкреАрд▓рд╛), рдЖрд░реНрджреНрд░рддрд╛ (рдиреАрд▓рд╛) рдФрд░ CO 2 (рд▓рд╛рд▓) рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИред

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

рдЗрд░рд╛рджреЛрдВ
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ!)
рдХрд╛рд░реНрдп - рдмрд╣реБрдд рдХреБрдЫ:
- рдЖрдЙрдЯрдбреЛрд░ рддрд╛рдкрдорд╛рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдпрд░рд▓реЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рдкрдорд╛рди рд╕рдВрд╡реЗрджрдХ рдХреЗ рд╕рд╛рде рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХреЛ рдкреВрд░рдХ рдХрд░реЗрдВред
- 3V рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдВрдмреА рд╕рдВрдЪрд╛рд░ рд░реЗрдВрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рдЖрд░рдПрдл рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░-рд░рд┐рд╕реАрд╡рд░ рдЬреЛрдбрд╝реА рдХреЛ рдмрджрд▓реЗрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рд╣реАрдЯрд┐рдВрдЧ рдХреЗ рдореМрд╕рдо рдХреЗ рджреМрд░рд╛рди рджреЛ рдПрдП рдмреИрдЯрд░реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
- рд╕реНрдХреЗрдЪ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдХреЗ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдкрд╣рд▓реЗ ESP8266 рдореЗрдореЛрд░реА рдХреЗ рдореИрдиреБрдЕрд▓ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рд╕реЗ рдмрдЪреЗрдВред
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпреЛрдЧреНрдп рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдЪрдХреНрд░ рдХреЛ рджреИрдирд┐рдХ рд╕реЗ рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рддрдХ рдмрдврд╝рд╛рдПрдВред
- рдореЛрдиреЛрдХреНрд░реЛрдо рд╕реНрдХреНрд░реАрди рдХреЛ рд░рдВрдЧ рдФрд░ рдЙрдЪреНрдЪ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред рдЗрд╕рд╕реЗ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдлреНрд░реЗрдо рдореЗрдВ, рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рд╡рд╛рдпреБ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджрди - рдПрдХ рд░рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
- рдлрд┐рд░ рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдФрд░ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХреА рдПрдХ рдкреЗрд╢ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░реЗрдВред
рдФрд░ рдХреНрдпрд╛ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╕реНрд╡реАрдХреГрдд рд╕реБрдЭрд╛рд╡, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБред рдореИрдВ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирддрд╛ рд╣реВрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
- рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╕реНрддрд╛рд░ рд╣реБрдЖ рд╣реИред рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрдИ рдЕрдиреНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рд░реНрдЯ рднреЗрдЬрдиреЗ рд╕реЗ рд▓реЗрдХрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдирдбреЛрд░ рд╡рд╛рдпреБ рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рддрдХред
- рдерд░реНрдореЛрд╕реНрдЯреИрдЯ рдореЗрдВ рдПрдХ рдирдИ рдЧреБрдгрд╡рддреНрддрд╛ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ: рдЗрд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдЬрд┐рд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХреЛ рдХреНрд░рдорд╛рджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдордирднрд╛рд╡рди рд╣реЛрддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдмрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреГрд╖реНрда рдкрд░ рдлрд╝реЙрд░реНрдо рднрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдЕрдм рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЛ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА!
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╕рдордп рд▓реЗрдЦрдХ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рез. рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореЙрдбрд▓ рдиреЗ рдкреБрд░рд╛рдиреЗ рдерд░реНрдореЛрд╕реНрдЯреЗрдЯ рдХреА рдЬрдЧрд╣ рд▓реЗ рд▓реА, рдХреНрдпреЛрдВрдХрд┐ рдЪреМрдереЗ рд╣реАрдЯрд┐рдВрдЧ рдХреЗ рдореМрд╕рдо рдореЗрдВ рд╡рд╣ рдХрднреА-рдХрднреА рд╣реАрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рднреВрд▓рдирд╛" рд╢реБрд░реВ рдХрд░рддрд╛ рдерд╛ред
2. рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдмреЗрд░реА рдкрд░ рдореЗрд░реЗ рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ:
рд╣реИрдмрд░ рдХреЗ рдПрдХ рд╡рд┐рд╖рдп рдкрд░ рдореЗрд░реЗ рдмреБрдХрдорд╛рд░реНрдХ