рдПрдХ рдкрдЯрдХ, рдШрд░ рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ, рд╡рд╛ "рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо" рдЬрд╕рд▓рд╛рдИ рдкреНрд░рд╛рдпрдГ рднрдирд┐рдиреНрдереНрдпреЛ, рдзреЗрд░реИ рдорд╣рдБрдЧреЛ рдерд┐рдпреЛ рд░ рдХреЗрд╡рд▓ рдзрдиреАрд╣рд░реВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд┐рдиреНрди рд╕рдХреНрдереЗред рдЖрдЬ рдмрдЬрд╛рд░рдорд╛ рддрдкрд╛рдИрд▓реЗ рдкреНрд░рдХрд╛рд╢, рд╕рдХреЗрдЯ, рднреЗрдиреНрдЯрд┐рд▓реЗрд╢рди, рдкрд╛рдиреА рдЖрдкреВрд░реНрддрд┐ рд░ рдЕрдиреНрдп рдЙрдкрднреЛрдХреНрддрд╛рд╣рд░реВ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рд╕реЗрдиреНрд╕рд░рд╣рд░реВ, рдмрдЯрдирд╣рд░реВ/рд╕реНрд╡рд┐рдЪрд╣рд░реВ рд░ рдПрдХреНрдЪреБрдПрдЯрд░рд╣рд░реВ рд╕рд╣рд┐рдд рдПрдХрджрдореИ рд╕рд╕реНрддреЛ рдХрд┐рдЯрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд░ рд╕рдмреИрднрдиреНрджрд╛ рдХреБрдЯрд┐рд▓ DIY рд╡реНрдпрдХреНрддрд┐ рдкрдирд┐ рд╕реБрдиреНрджрд░рддрд╛рдорд╛ рд╕рдВрд▓рдЧреНрди рд╣реБрди рд╕рдХреНрдЫ рд░ рд╕рд╕реНрддреЛ рдореВрд▓реНрдпрдорд╛ рд╕реНрдорд╛рд░реНрдЯ рдШрд░рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдХрд░рдгрд╣рд░реВ рднреЗрд▓рд╛ рдЧрд░реНрди рд╕рдХреНрдЫред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдпрдиреНрддреНрд░рд╣рд░реВ рдпрд╛ рдд рд╕реЗрдиреНрд╕рд░ рд╡рд╛ рдПрдХреНрдЪреБрдПрдЯрд░рд╣рд░реВ рд╣реБрдиреНред рддрд┐рдиреАрд╣рд░реВрд▓реЗ "рдЬрдм рдПрдХ рдЧрддрд┐ рд╕реЗрдиреНрд╕рд░ рдЯреНрд░рд┐рдЧрд░ рд╣реБрдиреНрдЫ, рдмрддреНрддреАрд╣рд░реВ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН" рд╡рд╛ "рдирд┐рдХрд╛рд╕ рдирдЬрд┐рдХрдХреЛ рд╕реНрд╡рд┐рдЪрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдЕрдкрд╛рд░реНрдЯрдореЗрдиреНрдЯрдорд╛ рдмрддреНрддреАрд╣рд░реВ рдмрдиреНрдж рдЧрд░реНрджрдЫ" рдЬрд╕реНрддрд╛ рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрджрдЫред рддрд░ рдХреЗрд╣рд┐ рдЪреАрдЬрд╣рд░реВ рдЯреЗрд▓рд┐рдореЗрдЯреНрд░реАрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реЗрдирдиреНред рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ, рдпреЛ рддрд╛рдкрдорд╛рди рд░ рдЖрд░реНрджреНрд░рддрд╛ рдХреЛ рдЧреНрд░рд╛рдл, рд╡рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдЙрдЯрд▓реЗрдЯ рдорд╛ рддрддреНрдХрд╛рд▓ рд╢рдХреНрддрд┐ рд╣реЛред
рдореИрд▓реЗ рднрд░реНрдЦрд░реИ рдкрд▓реНрд╕ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рд╕рд╛рде рдкрд╛рдиреА рдорд┐рдЯрд░рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реЗрдВред рдорд┐рдЯрд░ рдорд╛рд░реНрдлрдд рдЬрд╛рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдЯрд░рдХреЛ рд▓рд╛рдЧрд┐, рд░рд┐рдб рд╕реНрд╡рд┐рдЪ рд╕рдХреНрд░рд┐рдп рд╣реБрдиреНрдЫ рд░ рд╕рдореНрдкрд░реНрдХ рдмрдиреНрдж рдЧрд░реНрджрдЫред рддрд╛рд░рдорд╛ рдЯрд╛рдБрд╕рд┐рдиреЗ рд░ рддреНрдпрд╕рдмрд╛рдЯ рдлрд╛рдЗрджрд╛ рд▓рд┐рдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБ рдорд╛рддреНрд░ рдмрд╛рдБрдХреА рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рдкреНрддрд╛рдХреЛ рдШрдгреНрдЯрд╛ рд░ рджрд┐рди рдЕрдиреБрд╕рд╛рд░ рдкрд╛рдиреА рдЦрдкрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдард┐рдХ рдЫ, рдпрджрд┐ рдЕрдкрд╛рд░реНрдЯрдореЗрдиреНрдЯрдорд╛ рдзреЗрд░реИ рдкрд╛рдиреА рд░рд╛рдЗрдЬрд░рд╣рд░реВ рдЫрдиреН рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдлреНрд▓реНрдпрд╛рд╕рд▓рд╛рдЗрдЯрдХреЛ рд╕рд╛рде рд╣рд╛рд░реНрдб-рдЯреБ-рдкрд╣реБрдБрдЪ рдирд┐рдЪрд╣рд░реВрдорд╛ рдЪрдвреНрдиреБ рднрдиреНрджрд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдирдорд╛ рд╕рдмреИ рд╣рд╛рд▓рдХрд╛ рд╕реВрдЪрдХрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред
рдХрдЯ рддрд▓ ESP8266 рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдпрдиреНрддреНрд░рдХреЛ рдореЗрд░реЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ, рдЬрд╕рд▓реЗ рдкрд╛рдиреАрдХреЛ рдорд┐рдЯрд░рдмрд╛рдЯ рджрд╛рд▓рд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдЫ рд░ MQTT рдорд╛рд░реНрдлрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рд╕рд░реНрднрд░рдорд╛ рдкрдард╛рдЙрдБрдЫред рд╣рд╛рдореА uasyncio рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдЗрдердирдорд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧрд░реНрдиреЗрдЫреМрдВред рдлрд░реНрдорд╡реЗрдпрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, рдореИрд▓реЗ рдзреЗрд░реИ рд░реЛрдЪрдХ рдХрдард┐рдирд╛рдЗрд╣рд░реВ рднреЗрдЯреНрдЯрд╛рдПрдБ, рдЬреБрди рдо рдпрд╕ рд▓реЗрдЦрдорд╛ рдкрдирд┐ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреБред рдЬрд╛рдЙ!
рдпреЛрдЬрдирд╛

рд╕рдореНрдкреВрд░реНрдг рд╕рд░реНрдХрд┐рдЯрдХреЛ рдореБрдЯреБ ESP8266 рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рдорд╛ рд░рд╣реЗрдХреЛ рдореЛрдбреНрдпреБрд▓ рд╣реЛред ESP-12 рдореВрд▓ рд░реВрдкрдорд╛ рдпреЛрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддрд░ рдореЗрд░реЛ рджреЛрд╖рдкреВрд░реНрдг рд╣реБрди рдкреБрдЧреНрдпреЛред рд╣рд╛рдореА ESP-07 рдореЛрдбреНрдпреБрд▓рд╕рдБрдЧ рд╕рдиреНрддреБрд╖реНрдЯ рд╣реБрдиреБрдкрд░реНрджрдЫ, рдЬреБрди рдЙрдкрд▓рдмреНрдз рдерд┐рдпреЛред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рддрд┐рдиреАрд╣рд░реВ рджреБрд╡реИ рдкрд┐рди рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ рд╕рдорд╛рди рдЫрдиреН, рдХреЗрд╡рд▓ рднрд┐рдиреНрдирддрд╛ рдПрдиреНрдЯреЗрдирд╛ рдорд╛ рдЫ - ESP-12 рдорд╛ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдЫ, рдЬрдмрдХрд┐ ESP-07 рдПрдХ рдмрд╛рд╣реНрдп рдЫред рдпрджреНрдпрдкрд┐, WiFi рдПрдиреНрдЯреЗрдирд╛ рдмрд┐рдирд╛ рдкрдирд┐, рдореЗрд░реЛ рдмрд╛рдерд░реВрдордорд╛ рд╕рд┐рдЧреНрдирд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫред
рдорд╛рдирдХ рдореЛрдбреНрдпреБрд▓ рддрд╛рд░рд┐рдЩ:
- рдкреБрд▓-рдЕрдк рд░ рдХреНрдпрд╛рдкреЗрд╕рд┐рдЯрд░рдХреЛ рд╕рд╛рде рдмрдЯрди рд░рд┐рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдпрджреНрдпрдкрд┐ рджреБрдмреИ рдореЛрдбреНрдпреБрд▓ рднрд┐рддреНрд░ рдкрд╣рд┐рд▓реЗ рдиреИ рдЫрдиреН)
- рд╕рдХреНрд╖рдо рд╕рдВрдХреЗрдд (CH_PD) рд▓рд╛рдИ рдкрд╛рд╡рд░рдорд╛ рддрд╛рдирд┐рдПрдХреЛ рдЫ
- GPIO15 рдЬрдорд┐рдирдорд╛ рддрд╛рдирд┐рдПрдХреЛ рдЫред рдпреЛ рд╕реБрд░реБрдорд╛ рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрд░ рдорд╕рдБрдЧ рдЕрдЭреИ рдкрдирд┐ рдпреЛ рдЦреБрдЯреНрдЯрд╛ рдЬреЛрдбреНрди рдХреЗрд╣рд┐ рдЫреИрди; рдорд▓рд╛рдИ рдЕрдм рдпрд╕рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрди
рдореЛрдбреНрдпреБрд▓рд▓рд╛рдИ рдлрд░реНрдорд╡реЗрдпрд░ рдореЛрдбрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ GPIO2 рд▓рд╛рдИ рдЧреНрд░рд╛рдЙрдиреНрдбрдорд╛ рд╕рд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рдпрд╕рд▓рд╛рдИ рдЕрдЭ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдмреБрдЯ рдмрдЯрди рдкреНрд░рджрд╛рди рдЧрд░реЗрдХреЛ рдЫреБред рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпреЛ рдкрд┐рди рд╢рдХреНрддрд┐рдорд╛ рддрд╛рдирд┐рдиреНрдЫред
GPIO2 рд▓рд╛рдЗрдирдХреЛ рдЕрд╡рд╕реНрдерд╛ рдорд╛рддреНрд░ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕реБрд░реБрдорд╛ рдЬрд╛рдБрдЪ рдЧрд░рд┐рдиреНрдЫ - рдЬрдм рдкрд╛рд╡рд░ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ рд╡рд╛ рд░рд┐рд╕реЗрдЯ рдкрдЫрд┐ рддреБрд░реБрдиреНрддреИред рддреНрдпрд╕реЛрднрдП рдореЛрдбреНрдпреБрд▓ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдмреБрдЯ рд╣реБрдиреНрдЫ рд╡рд╛ рдлрд░реНрдорд╡реЗрдпрд░ рдореЛрдбрдорд╛ рдЬрд╛рдиреНрдЫред рдПрдХ рдкрдЯрдХ рд▓реЛрдб рднрдПрдкрдЫрд┐, рдпреЛ рдкрд┐рди рдирд┐рдпрдорд┐рдд GPIO рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдард┐рдХ рдЫ, рдХрд┐рдирдХрд┐ рддреНрдпрд╣рд╛рдБ рдкрд╣рд┐рд▓реЗ рдиреИ рдПрдЙрдЯрд╛ рдмрдЯрди рдЫ, рддрдкрд╛рдЗрдБ рдпрд╕рдорд╛ рдХреЗрд╣рд┐ рдЙрдкрдпреЛрдЧреА рдкреНрд░рдХрд╛рд░реНрдп рд╕рдВрд▓рдЧреНрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рд░ рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдо UART рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБ, рдЬреБрди рдХрдореНрдмреЛрдорд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛред рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫ, рдо рддреНрдпрд╣рд╛рдБ USB-UART рдПрдбрд╛рдкреНрдЯрд░ рдЬрдбрд╛рди рдЧрд░реНрдЫреБред рддрдкрд╛рдИрд▓реЗ рдорд╛рддреНрд░ рд╕рдореНрдЭрдиреБ рдкрд░реНрдЫ рдХрд┐ рдореЛрдбреНрдпреБрд▓ 3.3V рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдПрдбрд╛рдкреНрдЯрд░рд▓рд╛рдИ рдпреЛ рднреЛрд▓реНрдЯреЗрдЬрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд░ 5V рдЖрдкреВрд░реНрддрд┐ рдЧрд░реНрди рдмрд┐рд░реНрд╕рдиреБрднрдпреЛ рднрдиреЗ, рдореЛрдбреНрдпреБрд▓ рдкреНрд░рд╛рдпрдГ рдЬрд▓реНрдиреЗрдЫред
рдорд▓рд╛рдИ рдмрд╛рдерд░реВрдордорд╛ рдмрд┐рдЬреБрд▓реАрдХреЛ рд╕рд╛рде рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЫреИрди - рдЖрдЙрдЯрд▓реЗрдЯ рдорд┐рдЯрд░рдмрд╛рдЯ рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдЯрд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ, рддреНрдпрд╕реИрд▓реЗ рдо 220V рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реБрдиреЗрдЫреБред рд╢рдХреНрддрд┐рдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рдорд╕рдБрдЧ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рд╣реБрдиреЗрдЫ Tenstar рд░реЛрдмреЛрдЯ рджреНрд╡рд╛рд░рд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛, рдорд╕рдБрдЧ рдПрдирд╛рд▓рдЧ рд░ рдкрд╛рд╡рд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрдирд┐рдХреНрд╕рдХреЛ рд╕рд╛рде рдХрдард┐рди рд╕рдордп рдЫ, рддрд░ рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рддрдпрд╛рд░-рдмрдирд╛рдПрдХреЛ рдкрд╛рд╡рд░ рдЖрдкреВрд░реНрддрд┐ рдЫред
рдЕрдкрд░реЗрдЯрд┐рдЩ рдореЛрдбрд╣рд░реВ рд╕рдВрдХреЗрдд рдЧрд░реНрди, рдореИрд▓реЗ GPIO2 рдорд╛ рдЬрдбрд╛рди рднрдПрдХреЛ LED рдкреНрд░рджрд╛рди рдЧрд░реЗрдВред рдпрджреНрдпрдкрд┐, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдмреЗрдЪреЗрдХреЛ рдЫреИрди, рдХрд┐рдирдХрд┐ ... ESP-07 рдореЛрдбреНрдпреБрд▓рдорд╛ рдкрд╣рд┐рд▓реЗ рдиреИ LED рдЫ, рд░ рдпреЛ GPIO2 рдорд╛ рдкрдирд┐ рдЬреЛрдбрд┐рдПрдХреЛ рдЫред рддрд░ рдпреЛ рдмреЛрд░реНрдбрдорд╛ рд╣реБрди рджрд┐рдиреБрд╣реЛрд╕реН, рдпрджрд┐ рдо рдпреЛ рдПрд▓рдИрдбреА рдХреЗрд╕рдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред
рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рднрд╛рдЧрдорд╛ рдЬрд╛рдФрдВред рдкрд╛рдиреАрдХреЛ рдорд┐рдЯрд░рдХреЛ рдХреБрдиреИ рддрд░реНрдХ рдЫреИрди; рддрдкрд╛рдИрдВрд▓реЗ рд╣рд╛рд▓рдХреЛ рд░рд┐рдбрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реЛрдзреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдиред рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдПрдХ рдорд╛рддреНрд░ рдЪреАрдЬ рдЖрд╡реЗрдЧ рд╣реЛ - рдкреНрд░рддреНрдпреЗрдХ рд▓реАрдЯрд░ рд░рд┐рдб рд╕реНрд╡рд┐рдЪрдХреЛ рд╕рдореНрдкрд░реНрдХрд╣рд░реВ рдмрдиреНрдж рдЧрд░реНрджреИред рдореЗрд░реЛ рд░рд┐рдб рд╕реНрд╡рд┐рдЪ рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВ GPIO12/GPIO13 рдорд╛ рдЬрдбрд╛рди рднрдПрдХрд╛ рдЫрдиреНред рдо рдореЛрдбреНрдпреБрд▓ рднрд┐рддреНрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдкрдорд╛ рдкреБрд▓-рдЕрдк рд░реЗрд╕рд┐рд╕реНрдЯрд░ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗрдЫреБред
рд╕реБрд░реБрдорд╛, рдореИрд▓реЗ рдкреНрд░рддрд┐рд░реЛрдзрдХрд╣рд░реВ R8 рд░ R9 рдкреНрд░рджрд╛рди рдЧрд░реНрди рдмрд┐рд░реНрд╕реЗрдВ рд░ рдмреЛрд░реНрдбрдХреЛ рдореЗрд░реЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рддрд┐рдиреАрд╣рд░реВ рдЫреИрдирдиреНред рддрд░ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕рдмреИрд▓рд╛рдИ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдкреЛрд╕реНрдЯ рдЧрд░реНрджреИрдЫреБ, рдпреЛ рдирд┐рд░реАрдХреНрд╖рдг рд╕рдЪреНрдпрд╛рдЙрди рд▓рд╛рдпрдХ рдЫред рдпрджрд┐ рдлрд░реНрдорд╡реЗрдпрд░рд▓реЗ рдЧрд▓реНрддреА рдЧрд░реНрдЫ рд░ рдкрд┐рдирд▓рд╛рдИ рдПрдХрдорд╛ рд╕реЗрдЯ рдЧрд░реНрдЫ рднрдиреЗ рдкреЛрд░реНрдЯрд▓рд╛рдИ рдЬрд▓рд╛рдЙрди рдирджрд┐рди рд░ рд░рд┐рдб рд╕реНрд╡рд┐рдЪрд▓реЗ рдпреЛ рд▓рд╛рдЗрдирд▓рд╛рдИ рднреБрдЗрдБрдорд╛ рд╕рд░реНрдЯ рдЧрд░реНрдЫ (рд░реЗрд╕рд┐рд╕реНрдЯрд░рдХреЛ рд╕рд╛рде рдЕрдзрд┐рдХрддрдо 3.3V/1000Ohm = 3.3mA рдкреНрд░рд╡рд╛рд╣ рд╣реБрдиреЗрдЫ)ред
рдмрд┐рдЬреБрд▓реА рдЧрдпреЛ рднрдиреЗ рдХреЗ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕реЛрдЪреНрдиреЗ рдмреЗрд▓рд╛ рдЖрдПрдХреЛ рдЫ ред рдкрд╣рд┐рд▓реЛ рд╡рд┐рдХрд▓реНрдк рднрдиреЗрдХреЛ рд╕реБрд░реБрдорд╛ рд╕рд░реНрднрд░рдмрд╛рдЯ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рдирд╣рд░реВ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреБ рд╣реЛред рддрд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХреНрд╕рдЪреЗрдиреНрдЬ рдкреНрд░реЛрдЯреЛрдХрд▓рдХреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпрд╕ рдорд╛рдорд▓рд╛ рдорд╛ рдЙрдкрдХрд░рдг рдХреЛ рдкреНрд░рджрд░реНрд╢рди рд╕рд░реНрднрд░ рдХреЛ рд╕реНрдерд┐рддрд┐ рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рдпрджрд┐ рд╕рд░реНрднрд░ рдкрд╛рд╡рд░ рдмрдиреНрдж рднрдП рдкрдЫрд┐ рд╕реБрд░реБ рднрдПрди (рд╡рд╛ рдкрдЫрд┐ рд╕реБрд░реБ рднрдпреЛ), рдкрд╛рдиреА рдорд┐рдЯрд░рд▓реЗ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдорд╛рдирд╣рд░реВ рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗ рдЫреИрди рд░ рд╕рд╣реА рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджреИрдиред
рддреНрдпрд╕рдХрд╛рд░рдг, рдореИрд▓реЗ I2C рдорд╛рд░реНрдлрдд рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдореЗрдореЛрд░реА рдЪрд┐рдкрдорд╛ рдмрдЪрдд рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рдирд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рдорд╕рдБрдЧ рдлреНрд▓реНрдпрд╛рд╢ рдореЗрдореЛрд░реАрдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдЫреИрдирдиреН - рддрдкрд╛рдИрд▓реЗ рдорд╛рддреНрд░ 2 рдирдореНрдмрд░рд╣рд░реВ рдмрдЪрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ (рддрд╛рддреЛ рд░ рдЪрд┐рд╕реЛ рдкрд╛рдиреАрдХреЛ рдорд┐рдЯрд░ рдЕрдиреБрд╕рд╛рд░ рд▓реАрдЯрд░рдХреЛ рд╕рдВрдЦреНрдпрд╛)ред рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдиреЛ рдореЛрдбреНрдпреБрд▓рд▓реЗ рдкрдирд┐ рдЧрд░реНрдиреЗрдЫред рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рд░реЗрдХрд░реНрдбрд┐рдЩ рдЪрдХреНрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдзреНрдпрд╛рди рджрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫред рдзреЗрд░реИ рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ 100 рд╣рдЬрд╛рд░ рдЪрдХреНрд░ рд╣реЛ, рдХреЗрд╣рд┐ рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдорд┐рд▓рд┐рдпрди рд╕рдореНрдоред
рдпреЛ рдПрдХ рд▓рд╛рдЦ рдзреЗрд░реИ рд╣реЛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред рддрд░ рдореЗрд░реЛ рдЕрдкрд╛рд░реНрдЯрдореЗрдиреНрдЯрдорд╛ рдмрд╕реЗрдХреЛ 4 рд╡рд░реНрд╖рдХреЛ рджреМрдбрд╛рди, рдореИрд▓реЗ 500 рдХреНрдпреВрдмрд┐рдХ рдорд┐рдЯрд░ рднрдиреНрджрд╛ рдЕрд▓рд┐ рдмрдвреА рдкрд╛рдиреА рдЦрдкрдд рдЧрд░реЗрдВ, рддреНрдпреЛ 500 рд╣рдЬрд╛рд░ рд▓рд┐рдЯрд░ рд╣реЛ! рд░ рдлреНрд▓реИрд╢ рдорд╛ 500 рд╣рдЬрд╛рд░ рд░реЗрдХрд░реНрдбред рд░ рддреНрдпреЛ рдЪрд┐рд╕реЛ рдкрд╛рдиреА рдорд╛рддреНрд░ рд╣реЛред рддрдкрд╛рдИрд▓реЗ рдкрдХреНрдХреИ рдкрдирд┐ рдкреНрд░рддреНрдпреЗрдХ рджреБрдИ рд╡рд░реНрд╖рдорд╛ рдЪрд┐рдкрд▓рд╛рдИ рдкреБрди: рдмреЗрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрд░ рддреНрдпрд╣рд╛рдБ FRAM рдЪрд┐рдкрд╣рд░реВ рдЫрдиреНред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ, рдпреЛ рдЙрд╣реА I2C EEPROM рд╣реЛ, рдХреЗрд╡рд▓ рдзреЗрд░реИ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдкреБрди: рд▓реЗрдЦреНрдиреЗ рдЪрдХреНрд░рд╣рд░реВ (рд╕рдпреМрдВ рд▓рд╛рдЦрд╣рд░реВ) рд╕рдВрдЧред рдпреЛ рдорд╛рддреНрд░ рд╣реЛ рдХрд┐ рдо рдЕрдЭреИ рдкрдирд┐ рддреНрдпрд╕реНрддрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрдХрд┐рдЯрд╣рд░реВрдХреЛ рд╕рд╛рде рд╕реНрдЯреЛрд░рдорд╛ рдкреБрдЧреНрди рд╕рдХреНрджрд┐рди, рддреНрдпрд╕реИрд▓реЗ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдорд╛рдиреНрдп 24LC512 рдЦрдбрд╛ рд╣реБрдиреЗрдЫред
рдореБрджреНрд░рд┐рдд рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб
рд╕реБрд░реБрдорд╛ рдШрд░рдореИ рдмреЛрд░реНрдб рдмрдирд╛рдЙрдиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдХреЛ рдерд┐рдПрдБ ред рддреНрдпрд╕реИрд▓реЗ, рдмреЛрд░реНрдб рдПрдХрддрд░реНрдлреА рд░реВрдкрдорд╛ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рддрд░ рд▓реЗрдЬрд░ рдЖрдЗрд░рди рд░ рд╕реЛрд▓реНрдбрд░ рдорд╛рд╕реНрдХрдХреЛ рд╕рд╛рде рдПрдХ рдШрдгреНрдЯрд╛ рдмрд┐рддрд╛рдПрдкрдЫрд┐ (рдпрд╕ рдмрд┐рдирд╛ рдпреЛ рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рдХрд╛рд░рд▓реЗ рд╕рдореНрднрд╡ рдЫреИрди), рдореИрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдЪрд┐рдирд┐рдпрд╛рдБрдмрд╛рдЯ рдмреЛрд░реНрдбрд╣рд░реВ рдЕрд░реНрдбрд░ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред

рд▓рдЧрднрдЧ рдмреЛрд░реНрдб рдЕрд░реНрдбрд░ рдЧрд░реНрдиреБ рдЕрдШрд┐, рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдлреНрд▓реНрдпрд╛рд╕ рдореЗрдореЛрд░реА рдЪрд┐рдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдо I2C рдмрд╕рдорд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЬрд╕реНрддрд╛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреБред рдпрд╕рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЕрдЭреИ рдкреНрд░рд╢реНрди рдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рдмреЛрд░реНрдбрдорд╛ рд░реВрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдард┐рдХ рдЫ, рдо рдлреНрдпрд╛рдХреНрдЯреНрд░реАрдмрд╛рдЯ рдмреЛрд░реНрдбрд╣рд░реВ рдЕрд░реНрдбрд░ рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫреБ, рддреНрдпрд╣рд╛рдБ рдПрдХрд▓-рдкрдХреНрд╖реАрдп рдмреЛрд░реНрдбрдорд╛ рдЖрдлреВрд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрдиреЗ рдХреБрдиреИ рдЕрд░реНрде рдерд┐рдПрди, рддреНрдпрд╕реИрд▓реЗ I2C рд▓рд╛рдЗрдирд╣рд░реВ рдмреЛрд░реНрдбрдХреЛ рдкрдЫрд╛рдбрд┐рдкрдЯреНрдЯрд┐ рдорд╛рддреНрд░ рд╣реБрдиреНред
рдПрдХрддрд░реНрдлреА рддрд╛рд░рд┐рдЩрдорд╛ рдкрдирд┐ рдареВрд▓реЛ рд╕рдорд╕реНрдпрд╛ рдерд┐рдпреЛ ред рдХрд┐рдирднрдиреЗ рдмреЛрд░реНрдб рдПрдХ-рдкрдХреНрд╖реАрдп рд░реВрдкрдорд╛ рдХреЛрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рддреНрдпрд╕реИрд▓реЗ рдЯреНрд░реНрдпрд╛рдХ рд░ SMD рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдПрдХ рдЫреЗрдЙрдорд╛ рд░рд╛рдЦреНрдиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдЗрдПрдХреЛ рдерд┐рдпреЛ, рд░ рдЕрд░реНрдХреЛрдорд╛ рдЖрдЙрдЯрдкреБрдЯ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ, рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВ рд░ рдмрд┐рдЬреБрд▓реА рдЖрдкреВрд░реНрддрд┐ред рдЬрдм рдореИрд▓реЗ рдПрдХ рдорд╣рд┐рдирд╛ рдкрдЫрд┐ рдмреЛрд░реНрдбрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдВ, рдореИрд▓реЗ рдореВрд▓ рдпреЛрдЬрдирд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдмрд┐рд░реНрд╕реЗрдВ рд░ рдЕрдЧрд╛рдбрд┐ рдкрдХреНрд╖рдорд╛ рд╕рдмреИ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕реЛрд▓реНрдбрд░ рдЧрд░реЗрдВред рд░ рдЬрдм рдпреЛ рдкрд╛рд╡рд░ рд╕рдкреНрд▓рд╛рдИ рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдпреЛ рддрдм рдорд╛рддреНрд░ рдпреЛ рдмрд╛рд╣рд┐рд░рд┐рдпреЛ рдХрд┐ рдкреНрд▓рд╕ рд░ рдорд╛рдЗрдирд╕ рд░рд┐рднрд░реНрд╕рдорд╛ рддрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдЬрдореНрдкрд░ рд▓рдЧрд╛рдПрд░ рдЦреЗрддреА рдЧрд░реНрдиреБрдкрд░реНрдереНрдпреЛ ред рдорд╛рдерд┐рдХреЛ рддрд╕реНрд╡рд┐рд░рдорд╛, рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рддрд╛рд░рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рд╕рдХреЗрдХреЛ рдЫреБ, рддрд░ рдЬрдорд┐рдирд▓рд╛рдИ рдмреБрдЯ рдмрдЯрдирдХреЛ рдкрд┐рди рдорд╛рд░реНрдлрдд рдмреЛрд░реНрдбрдХреЛ рдПрдХ рднрд╛рдЧрдмрд╛рдЯ рдЕрд░реНрдХреЛрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ (рдпрджреНрдпрдкрд┐ рдпреЛ рджреЛрд╕реНрд░реЛ рддрд╣рдорд╛ рдЯреНрд░реНрдпрд╛рдХ рдХреЛрд░реНрди рд╕рдореНрднрд╡ рд╣реБрдиреЗрдЫ)ред
рдпрд╕рд░реА рдирд┐рд╕реНрдХрд┐рдпреЛ

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

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

рдХреЗрд╕ рднрд┐рддреНрд░ рддреНрдпрд╣рд╛рдБ рд╕реНрдЯрдбрд╣рд░реВ рдкрдирд┐ рдЫрдиреН рдЬрд╕рдорд╛ рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдПрдХрд▓ M3 рд╕реНрдХреНрд░реВрдХреЛ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ (рдмреЛрд░реНрдбрдорд╛ рдердк рдард╛рдЙрдБ рдерд┐рдПрди)
рдореИрд▓реЗ рдХреЗрд╕рдХреЛ рдкрд╣рд┐рд▓реЛ рдирдореВрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЫрд╛рдкреНрджрд╛ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдкреНрд░рджрд░реНрд╢рди рдЪрдпрди рдЧрд░реЗрдХреЛ рдЫреБред рдПрдХ рдорд╛рдирдХ рджреБрдИ-рд▓рд╛рдЗрди рд░рд┐рдбрд░ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдлрд┐рдЯ рднрдПрди, рддрд░ рддрд▓ рддреНрдпрд╣рд╛рдБ рдПрдХ OLED рдкреНрд░рджрд░реНрд╢рди SSD1306 128 ├Ч 32 рдерд┐рдпреЛред рдпреЛ рдереЛрд░реИ рд╕рд╛рдиреЛ рдЫ, рддрд░ рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╣рд░реЗрдХ рджрд┐рди рд╣реЗрд░рд┐рд░рд╣рдиреБ рдкрд░реНрджреИрди - рдпреЛ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЫред
рдпрд╕рд░реА рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрджреИ рд░ рдХрд╕рд░реА рддрд╛рд░рд╣рд░реВ рдпрд╕рдмрд╛рдЯ рд░реБрдЯ рд╣реБрдиреЗрдЫрдиреН, рдореИрд▓реЗ рдбрд┐рд╕реНрдкреНрд▓реЗрд▓рд╛рдИ рдХреЗрд╕рдХреЛ рдмреАрдЪрдорд╛ рдЯрд╛рдБрд╕реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВред рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХреНрд╕, рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдмрд░рд╛рдмрд░ рддрд▓ рдЫрдиреН - рдмрдЯрди рдорд╛рдерд┐ рдЫ, рдкреНрд░рджрд░реНрд╢рди рддрд▓ рдЫред рддрд░ рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рднрдиреЗрдХреЛ рдЫреБ рдХрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рдзреЗрд░реИ рдврд┐рд▓реЛ рдЖрдпреЛ рд░ рдмрдЯрди рд╕рд╛рд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдмреЛрд░реНрдбрд▓рд╛рдИ рдкреБрди: рддрд╛рд░ рдЧрд░реНрди рдо рдзреЗрд░реИ рдЕрд▓реНрдЫреА рдерд┐рдПрдБред
рдЙрдкрдХрд░рдг рдЬрдореНрдорд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдбреНрдпреБрд▓ рддрд╛рддреЛ рдЧреЛрдВрджрдХреЛ рд╕рд╛рде рд╕реНрдиреЛрдЯрдорд╛ рдЯрд╛рдБрд╕рд┐рдПрдХреЛ рдЫ


рдЕрдиреНрддрд┐рдо рдкрд░рд┐рдгрд╛рдо KDPV рдорд╛ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫ
рдлрд░реНрдорд╡реЗрдпрд░
рд╕рдлреНрдЯрд╡реЗрдпрд░ рднрд╛рдЧрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред рдпрд╕ рдЬрд╕реНрддреЛ рд╕рд╛рдирд╛ рд╢рд┐рд▓реНрдкрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рдорд▓рд╛рдИ рдкрд╛рдЗрдЬреЛрди () - рдХреЛрдб рдзреЗрд░реИ рдХрдореНрдкреНрдпрд╛рдХреНрдЯ рд░ рдмреБрдЭреНрди рд╕рдХрд┐рдиреЗ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХреЗрдиреНрдбрд╣рд░реВ рдирд┐рдЪреЛрдб рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рджрд░реНрддрд╛ рд╕реНрддрд░рдорд╛ рддрд▓ рдЬрд╛рди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди - рд╕рдмреИ рдХреБрд░рд╛ рдкрд╛рдЗрдердирдмрд╛рдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рд╕рдмреИ рдХреБрд░рд╛ рд╕рд░рд▓ рдЫ, рддрд░ рдзреЗрд░реИ рд╕рд░рд▓ рдЫреИрди - рдЙрдкрдХрд░рдгрдорд╛ рдзреЗрд░реИ рд╕реНрд╡рддрдиреНрддреНрд░ рдХрд╛рд░реНрдпрд╣рд░реВ рдЫрдиреН:
- рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдмрдЯрди рдкреЛрдХ рдЧрд░реНрдЫ рд░ рдбрд┐рд╕реНрдкреНрд▓реЗрдорд╛ рд╣реЗрд░реНрдЫ
- рд▓рд┐рдЯрд░рд╣рд░реВ рдлреНрд▓реНрдпрд╛рд╕ рдореЗрдореЛрд░реАрдорд╛ рдорд╛рдирд╣рд░реВ рдЯрд┐рдХ рд░ рдЕрдкрдбреЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН
- рдореЛрдбреНрдпреБрд▓рд▓реЗ WiFi рд╕рд┐рдЧреНрдирд▓рд▓рд╛рдИ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫ рд░ рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛ рдкреБрди: рдЬрдбрд╛рди рдЧрд░реНрджрдЫ
- рдард┐рдХ рдЫ, рдЭрд┐рдореНрдХрд┐рд░рд╣реЗрдХреЛ рдмрддреНрддреА рдмрд┐рдирд╛ рдпреЛ рдЕрд╕рдореНрднрд╡ рдЫ
рддрдкрд╛рдИрд▓реЗ рдорд╛рдиреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рдХрд┐ рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдХрд╛рдо рдЧрд░реЗрди рдпрджрд┐ рдЕрд░реНрдХреЛ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рдЕрдбреНрдХрд┐рдПрдХреЛ рдЫред рдорд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдХреНрдпрд╛рдХреНрдЯреАрдХреЛ рднрд░рд┐рдПрдХреЛ рдЫ рд░ рдЕрдм рдо рдЕрдЭреИ рдкрдирд┐ "рдЕрд░реНрдХреЛ рд▓рд┐рдЯрд░ рдЫреБрдЯреЗрдХреЛ рдХрд╛рд░рдг рдбрд┐рд╕реНрдкреНрд▓реЗ рддреНрдпрд╕ рдХреНрд╖рдгрдорд╛ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рднрдЗрд░рд╣реЗрдХреЛ рдерд┐рдпреЛ" рд╡рд╛ "рдореЛрдбреНрдпреБрд▓ рдЬрдбрд╛рди рд╣реБрдБрджрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдХреЗрд╣рд┐ рдЧрд░реНрди рд╕рдХреНрджреИрди" рдХреЛ рд╢реИрд▓реАрдорд╛ рдЧреНрд▓рд┐рдЪрд╣рд░реВ рджреЗрдЦреНрдЫреБред рд╡рд╛рдЗрдлрд╛рдЗред" рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдХреЗрд╣рд┐ рдЪреАрдЬрд╣рд░реВ рдЕрд╡рд░реЛрдзрд╣рд░реВ рдорд╛рд░реНрдлрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рддрдкрд╛рдИрдВ рдЕрд╡рдзрд┐рдорд╛ рд╕реАрдорд┐рддрддрд╛рд╣рд░реВ, рдХрд▓рд╣рд░реВрдХреЛ рдиреЗрд╕реНрдЯрд┐рдЩ, рд╡рд╛ рдЪрд░рд╣рд░реВрдорд╛ рдЧреИрд░-рдкрд░рдорд╛рдгреБ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдард┐рдХ рдЫ, рд╕рдмреИ рдХреБрд░рд╛ рдЧрд░реНрдиреЗ рдХреЛрдб рдЪрд╛рдБрдбреИ рдорд╢рдорд╛ рдкрд░рд┐рдгрдд рд╣реБрдиреНрдЫред
╨Т рдореИрд▓реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рд┐рдордкреНрдЯрд┐рдн рдорд▓реНрдЯрд┐рдЯрд╛рд╕реНрдХрд┐рдЩ рд░ FreeRTOS рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ, рддрд░ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдореЛрдбреЗрд▓ рдзреЗрд░реИ рдЙрдкрдпреБрдХреНрдд рднрдпреЛ ред рдпрд╕рдмрд╛рд╣реЗрдХ, coroutines рдХреЛ рдкрд╛рдЗрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рддреНрд░ рдЕрдЪрдореНрдордХреЛ рдЫ - рд╕рдмреИ рдХреБрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдкрдорд╛ рдЧрд░рд┐рдиреНрдЫред рдХреЗрд╡рд▓ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рддрд░реНрдХ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН, рдорд▓рд╛рдИ рдмрддрд╛рдЙрдиреБрд╣реЛрд╕реН рдХреБрди рдард╛рдЙрдБрд╣рд░реВрдорд╛ рддрдкрд╛рдИрдВ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╖рдпрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд┐рдордкреНрдЯрд┐рдн рд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдорд▓реНрдЯрд┐рдЯрд╛рд╕реНрдХрд┐рдЩ рдмреАрдЪрдХреЛ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдЕрдзреНрдпрдпрди рдЧрд░реНрди рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБред рдЕрдм рдЕрдиреНрддрдорд╛ рдХреЛрдбрдорд╛ рдЬрд╛рдФрдВред
#####################################
# Counter class - implements a single water counter on specified pin
#####################################
class Counter():
debounce_ms = const(25)
def __init__(self, pin_num, value_storage):
self._value_storage = value_storage
self._value = self._value_storage.read()
self._value_changed = False
self._pin = Pin(pin_num, Pin.IN, Pin.PULL_UP)
loop = asyncio.get_event_loop()
loop.create_task(self._switchcheck()) # Thread runs forever
рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдЙрдиреНрдЯрд░ рдХрд╛рдЙрдиреНрдЯрд░ рд╡рд░реНрдЧрдХреЛ рдЙрджрд╛рд╣рд░рдгрджреНрд╡рд╛рд░рд╛ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░рд┐рдиреНрдЫред рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рди EEPROM (value_storage) рдмрд╛рдЯ рдШрдЯрд╛рдЗрдиреНрдЫ - рдпрд╕рд░реА рдкрд╛рд╡рд░ рд╡рд┐рдлрд▓рддрд╛ рд▓рд╛рдЧреВ рднрдПрдкрдЫрд┐ рд░рд┐рдХрднрд░реА рд╣реБрдиреНрдЫред
рдкрд┐рди рдмрд┐рд▓реНрдЯ-рдЗрди рдкреБрд▓-рдЕрдкрдХреЛ рд╕рд╛рде рдкрд╛рд╡рд░ рд╕рдкреНрд▓рд╛рдИрдорд╛ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдЫ: рдпрджрд┐ рд░рд┐рдб рд╕реНрд╡рд┐рдЪ рдмрдиреНрдж рдЫ рднрдиреЗ, рд▓рд╛рдЗрди рд╢реВрдиреНрдп рдЫ, рдпрджрд┐ рд▓рд╛рдЗрди рдЦреБрд▓рд╛ рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдкрд╛рд╡рд░ рд╕рдкреНрд▓рд╛рдИрдорд╛ рддрд╛рдирд┐рдиреНрдЫ рд░ рдирд┐рдпрдиреНрддреНрд░рдХрд▓реЗ рдПрдЙрдЯрд╛ рдкрдвреНрдЫред
рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдЫреБрдЯреНрдЯреИ рдХрд╛рд░реНрдп рдкрдирд┐ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓реЗ рдкрд┐рди рдкреЛрд▓ рдЧрд░реНрдиреЗрдЫред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рдЙрдиреНрдЯрд░рд▓реЗ рдЖрдлреНрдиреИ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдЙрдиреЗрдЫред рдпрд╣рд╛рдБ рдЙрдирдХреЛ рдХреЛрдб рдЫ
""" Poll pin and advance value when another litre passed """
async def _switchcheck(self):
last_checked_pin_state = self._pin.value() # Get initial state
# Poll for a pin change
while True:
state = self._pin.value()
if state != last_checked_pin_state:
# State has changed: act on it now.
last_checked_pin_state = state
if state == 0:
self._another_litre_passed()
# Ignore further state changes until switch has settled
await asyncio.sleep_ms(Counter.debounce_ms)
рд╕рдореНрдкрд░реНрдХ рдмрд╛рдЙрдиреНрд╕ рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрди 25ms рдХреЛ рдврд┐рд▓рд╛рдЗ рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рдПрдХреИ рд╕рдордпрдорд╛ рдпрд╕рд▓реЗ рдХрд╛рд░реНрдп рдХрддрд┐ рдкрдЯрдХ рдмреНрдпреБрдБрдЭрдиреНрдЫ (рдпреЛ рдХрд╛рд░реНрдп рд╕реБрддрд┐рд░рд╣реЗрдХреЛ рдмреЗрд▓рд╛, рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ) рдирд┐рдпрдорди рдЧрд░реНрджрдЫред рдкреНрд░рддреНрдпреЗрдХ 25 рдорд┐рдиреЗрдЯрдорд╛ рдлрдВрдХреНрд╢рди рдЙрдареНрдЫ, рдкрд┐рди рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рд░ рдпрджрд┐ рд░рд┐рдб рд╕реНрд╡рд┐рдЪ рд╕рдореНрдкрд░реНрдХрд╣рд░реВ рдмрдиреНрдж рдЫрдиреН рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдЕрд░реНрдХреЛ рд▓рд┐рдЯрд░ рдорд┐рдЯрд░рдмрд╛рдЯ рдЧреБрдЬреНрд░рд┐рдПрдХреЛ рдЫ рд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
def _another_litre_passed(self):
self._value += 1
self._value_changed = True
self._value_storage.write(self._value)
рдЕрд░реНрдХреЛ рд▓рд┐рдЯрд░ рдкреНрд░рд╢реЛрдзрди рдорд╛рдореВрд▓реА рдЫ - рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рддреНрд░ рдмрдвреНрдЫред рдЦреИрд░, рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрднрдорд╛ рдирдпрд╛рдБ рдорд╛рди рд▓реЗрдЦреНрди рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗрдЫред
рдкреНрд░рдпреЛрдЧрдХреЛ рд╕рдЬрд┐рд▓реЛрдХреЛ рд▓рд╛рдЧрд┐, "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ" рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреНрдЫ
def value(self):
self._value_changed = False
return self._value
def set_value(self, value):
self._value = value
self._value_changed = False
рдЦреИрд░, рдЕрдм рдкрд╛рдЗрдерди рд░ uasync рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдЖрдирдиреНрджрдХреЛ рдлрд╛рдЗрджрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рддреАрдХреНрд╖рд╛рдпреЛрдЧреНрдп рдХрд╛рдЙрдиреНрдЯрд░ рд╡рд╕реНрддреБ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН (рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рд░реВрд╕реАрдорд╛ рдЕрдиреБрд╡рд╛рдж рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ? рддрдкрд╛рдИрдВрд▓реЗ рдЖрд╢рд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?)
def __await__(self):
while not self._value_changed:
yield from asyncio.sleep(0)
return self.value()
__iter__ = __await__
рдпреЛ рдпрд╕реНрддреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ рдЬреБрди рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рди рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрдиреНрдЫ - рдкреНрд░рдХрд╛рд░реНрдп рд╕рдордп-рд╕рдордпрдорд╛ рдЙрдареНрдЫ рд░ _value_changed рдлреНрд▓реНрдпрд╛рдЧ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рд░рд╛рдореНрд░реЛ рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рдХрд▓рд┐рдЩ рдХреЛрдб рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрджрд╛ рд╕реБрддреНрди рд╕рдХреНрдЫ рд░ рдирдпрд╛рдБ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдирднрдПрд╕рдореНрдо рд╕реБрддреНрди рд╕рдХреНрдЫред
рдЕрд╡рд░реЛрдзрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рд╣реЛ?рд╣реЛ, рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛ рддрдкрд╛рдИрд▓реЗ рдорд▓рд╛рдИ рдЯреНрд░реЛрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддрдкрд╛рдИрд▓реЗ рдЖрдлреИрдВрд▓реЗ рдЕрд╡рд░реЛрдзрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рднрдиреНрдиреБрднрдпреЛ, рддрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛ рддрдкрд╛рдИрд▓реЗ рдореВрд░реНрдЦ рдкрд┐рди рдкреЛрд▓ рдЧрд░реНрдиреБрднрдпреЛред рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрд╡рд░реЛрдзрд╣рд░реВ рдореИрд▓реЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдХреЛ рдкрд╣рд┐рд▓реЛ рдЪреАрдЬ рд╣реЛред ESP8266 рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдХрд┐рдирд╛рд░рд╛ рдЕрд╡рд░реЛрдз рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдкрд╛рдЗрдердирдорд╛ рдпреЛ рдЕрд╡рд░реЛрдзрдХреЛ рд▓рд╛рдЧрд┐ рд╣реНрдпрд╛рдиреНрдбрд▓рд░ рдкрдирд┐ рд▓реЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕ рдЕрд╡рд░реЛрдзрдорд╛, рдЪрд░рдХреЛ рдорд╛рди рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╕рдореНрднрд╡рддрдГ, рдпреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреЗрдЫ рдпрджрд┐ рдХрд╛рдЙрдиреНрдЯрд░ рдПрдХ рджрд╛рд╕ рдпрдиреНрддреНрд░ рдерд┐рдпреЛ - рдпреЛ рдорд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзрд┐рдПрдХреЛ рдирднрдПрд╕рдореНрдо рдкрд░реНрдЦрдиреЗ рдПрдХред
рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ (рд╡рд╛ рд╕реМрднрд╛рдЧреНрдпрд╡рд╢?) рдореЗрд░реЛ рдпрдиреНрддреНрд░ рд╕рдХреНрд░рд┐рдп рдЫ, рдпрд╕рд▓реЗ рдЖрдлреИрдВ MQTT рдкреНрд░реЛрдЯреЛрдХрд▓ рдорд╛рд░реНрдлрдд рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрдиреБ рдкрд░реНрдЫ рд░ EEPROM рдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдиреБ рдкрд░реНрдЫред рд░ рдпрд╣рд╛рдБ рдкреНрд░рддрд┐рдмрдиреНрдзрд╣рд░реВ рдЦреЗрд▓рдорд╛ рдЖрдЙрдБрдЫрдиреН - рддрдкрд╛рдЗрдБ рдЕрд╡рд░реЛрдзрд╣рд░реВрдорд╛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди рд░ рдареВрд▓реЛ рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрди, рдЬрд╕рдХреЛ рдорддрд▓рдм рддрдкрд╛рдЗрдБ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрди рдмрд┐рд░реНрд╕рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддреНрдпрд╣рд╛рдБ micropython.schedule() рдЬрд╕реНрддрд╛ рдмрдирд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ "рдЬрддрд┐ рд╕рдХреНрджреЛ рдЪрд╛рдБрдбреЛ" рдХрд╛рд░реНрдпрд╣рд░реВ рдЪрд▓рд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддрд░ рдкреНрд░рд╢реНрди рдЙрдареНрдЫ, "рдХреЗ рдХреБрд░рд╛ рд╣реЛ?" рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рд╣рд╛рдореА рдЕрд╣рд┐рд▓реЗ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрджреИрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдПрдХ рдЕрд╡рд░реЛрдз рдЖрдЙрдБрдЫ рд░ рдЪрд░рдХреЛ рдорд╛рдирд╣рд░реВ рдмрд┐рдЧрд╛рд░реНрдЫред рд╡рд╛, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рд░реНрднрд░рдмрд╛рдЯ рдирдпрд╛рдБ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рди рдЖрдпреЛ рдЬрдм рд╣рд╛рдореАрд▓реЗ рдкреБрд░рд╛рдиреЛрд▓рд╛рдИ рд▓реЗрдЦреЗрдХрд╛ рдерд┐рдПрдиреМрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рддрдкрд╛рдИрдВрд▓реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рди рдмреНрд▓рдХ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд╡рд╛ рдпрд╕рд▓рд╛рдИ рдХреБрдиреИ рдкрдирд┐ рддрд░рд┐рдХрд╛рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдирд┐рдХрд╛рд▓реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рд░ рд╕рдордп-рд╕рдордпрдорд╛ RuntimeError: рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдЯреНрдпрд╛рдХ рдкреВрд░реНрдг рдХреНрд░реНрдпрд╛рд╕рд╣рд░реВ рд░ рдХрд╕рд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐рди?
рд╕реНрдкрд╖реНрдЯ рдорддрджрд╛рди рд░ uasync рд╕рдВрдЧ, рдпреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдЕрдЭ рд╕реБрдиреНрджрд░ рд░ рднрд░рдкрд░реНрджреЛ рд╣реБрдиреНрдЫ
рдореИрд▓реЗ EEPROM рд╕рдБрдЧ рд╕рд╛рдиреЛ рдХрдХреНрд╖рд╛рдорд╛ рдХрд╛рдо рд▓реНрдпрд╛рдПрдБ
class EEPROM():
i2c_addr = const(80)
def __init__(self, i2c):
self.i2c = i2c
self.i2c_buf = bytearray(4) # Avoid creation/destruction of the buffer on each call
def read(self, eeprom_addr):
self.i2c.readfrom_mem_into(self.i2c_addr, eeprom_addr, self.i2c_buf, addrsize=16)
return ustruct.unpack_from("<I", self.i2c_buf)[0]
def write(self, eeprom_addr, value):
ustruct.pack_into("<I", self.i2c_buf, 0, value)
self.i2c.writeto_mem(self.i2c_addr, eeprom_addr, self.i2c_buf, addrsize=16)
рдкрд╛рдЗрдердирдорд╛, рдмрд╛рдЗрдЯрд╣рд░реВрд╕рдБрдЧ рд╕реАрдзрд╛ рдХрд╛рдо рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫ, рддрд░ рдпреЛ рдореЗрдореЛрд░реАрдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдмрд╛рдЗрдЯрд╣рд░реВ рд╣реЛред рдореИрд▓реЗ ustruct рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд░ рдмрд╛рдЗрдЯрд╣рд░реВ рдмреАрдЪрдХреЛ рд░реВрдкрд╛рдиреНрддрд░рдг рдмрд╛рдбреНрдиреБ рдкрд░реЗрдХреЛ рдерд┐рдпреЛред
рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ I2C рд╡рд╕реНрддреБ рд░ рдореЗрдореЛрд░реА рд╕реЗрд▓рдХреЛ рдареЗрдЧрд╛рдирд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдирдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдпреЛ рд╕рдмреИрд▓рд╛рдИ рд╕рд╛рдиреЛ рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд▓рд╛рд╕рд┐рдХрдорд╛ рдмреЗрд░реЗрдВред
class EEPROMValue():
def __init__(self, i2c, eeprom_addr):
self._eeprom = EEPROM(i2c)
self._eeprom_addr = eeprom_addr
def read(self):
return self._eeprom.read(self._eeprom_addr)
def write(self, value):
self._eeprom.write(self._eeprom_addr, value)
I2C рд╡рд╕реНрддреБ рдЖрдлреИрдВ рдпреА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ
i2c = I2C(freq=400000, scl=Pin(5), sda=Pin(4))
рд╣рд╛рдореА рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рднрд╛рдЧрдорд╛ рдЖрдЙрдБрдЫреМрдВ - MQTT рдорд╛рд░реНрдлрдд рд╕рд░реНрднрд░рд╕рдБрдЧ рд╕рдЮреНрдЪрд╛рд░рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЦреИрд░, рдкреНрд░реЛрдЯреЛрдХрд▓ рдЖрдлреИрдВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрди - рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реЗ ред рдпреЛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред
рдкреБрд╕реНрддрдХрд╛рд▓рдп MQTTClient рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд░рд╣реЗрдХреЛ CounterMQTTClient рдХрдХреНрд╖рд╛рдорд╛ рд╕рдмреИ рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рдХреБрд░рд╛рд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдкрд░рд┐рдзрд┐рдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВ
#####################################
# Class handles both counters and sends their status to MQTT
#####################################
class CounterMQTTClient(MQTTClient):
blue_led = Pin(2, Pin.OUT, value = 1)
button = Pin(0, Pin.IN)
hot_counter = Counter(12, EEPROMValue(i2c, EEPROM_ADDR_HOT_VALUE))
cold_counter = Counter(13, EEPROMValue(i2c, EEPROM_ADDR_COLD_VALUE))
рдпрд╣рд╛рдБ рддрдкрд╛рдИрдВрд▓реЗ рд▓рд╛рдЗрдЯ рдмрд▓реНрдм рдкрд┐рди рд░ рдмрдЯрдирд╣рд░реВ, рд╕рд╛рдереИ рдЪрд┐рд╕реЛ рд░ рддрд╛рддреЛ рдкрд╛рдиреА рдорд┐рдЯрд░ рд╡рд╕реНрддреБрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдкреНрд░рд╛рд░рдореНрднрд┐рдХрддрд╛ рд╕рдВрдЧ, рд╕рдмреИ рдХреБрд░рд╛ рдпрддрд┐ рддреБрдЪреНрдЫ рдЫреИрди
def __init__(self):
self.internet_outage = True
self.internet_outages = 0
self.internet_outage_start = ticks_ms()
with open("config.txt") as config_file:
config['ssid'] = config_file.readline().rstrip()
config['wifi_pw'] = config_file.readline().rstrip()
config['server'] = config_file.readline().rstrip()
config['client_id'] = config_file.readline().rstrip()
self._mqtt_cold_water_theme = config_file.readline().rstrip()
self._mqtt_hot_water_theme = config_file.readline().rstrip()
self._mqtt_debug_water_theme = config_file.readline().rstrip()
config['subs_cb'] = self.mqtt_msg_handler
config['wifi_coro'] = self.wifi_connection_handler
config['connect_coro'] = self.mqtt_connection_handler
config['clean'] = False
config['clean_init'] = False
super().__init__(config)
loop = asyncio.get_event_loop()
loop.create_task(self._heartbeat())
loop.create_task(self._counter_coro(self.cold_counter, self._mqtt_cold_water_theme))
loop.create_task(self._counter_coro(self.hot_counter, self._mqtt_hot_water_theme))
loop.create_task(self._display_coro())
mqtt_as рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрди, рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ - рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдиред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдареАрдХ рдЫрдиреН, рддрд░ рдзреЗрд░реИ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд╕рд┐рдзреИ рдХреЛрдбрдорд╛ рдирд▓реЗрдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ config.txt рдкрд╛рда рдлрд╛рдЗрд▓рдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдЫреБред рдпрд╕рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдХреЛ рдкрд░реНрд╡рд╛рд╣ рдирдЧрд░реА рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рд╕рд╛рдереИ рд╡рд┐рднрд┐рдиреНрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрд╕рдБрдЧ рдзреЗрд░реИ рд╕рдорд╛рди рдпрдиреНрддреНрд░рд╣рд░реВ рд░рд┐рднреЗрдЯ рдЧрд░реНрджрдЫред
рдХреЛрдбрдХреЛ рдЕрдиреНрддрд┐рдо рдмреНрд▓рдХрд▓реЗ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реЗрд╡рд╛ рдЧрд░реНрди рдзреЗрд░реИ рдХреЛрд░рд╛рдЙрдЯрд┐рдирд╣рд░реВ рд╕реБрд░реБ рдЧрд░реНрджрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдХреЛрд░реБрдЯрд┐рди рдЫ рдЬреБрди рд╕реЗрд╡рд╛рд╣рд░реВ рдХрд╛рдЙрдиреНрдЯрд░ рдЧрд░реНрджрдЫ
async def _counter_coro(self, counter, topic):
# Publish initial value
value = counter.value()
await self.publish(topic, str(value))
# Publish each new value
while True:
value = await counter
await self.publish_msg(topic, str(value))
рдХреЛрд░реБрдЯрд┐рдирд▓реЗ рдирдпрд╛рдБ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рд▓реБрдкрдорд╛ рдкрд░реНрдЦрдиреНрдЫ рд░, рдпреЛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗ рдмрд┐рддреНрддрд┐рдХреИ, MQTT рдкреНрд░реЛрдЯреЛрдХрд▓ рдорд╛рд░реНрдлрдд рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрдЫред рдХреЛрдбрдХреЛ рдкрд╣рд┐рд▓реЛ рдЯреБрдХреНрд░рд╛рд▓реЗ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рд░реНрдлрдд рдкрд╛рдиреА рдирдмрдвреЗ рдкрдирд┐ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдорд╛рди рдкрдард╛рдЙрдБрдЫред
рдЖрдзрд╛рд░ рд╡рд░реНрдЧ MQTTClient рд▓реЗ рдЖрдлреИрдВ рд╕реЗрд╡рд╛ рдЧрд░реНрджрдЫ, WiFi рдЬрдбрд╛рди рд╕реБрд░реБ рдЧрд░реНрдЫ рд░ рдЬрдбрд╛рди рд╣рд░рд╛рдЙрдБрджрд╛ рдкреБрди: рдЬрдбрд╛рди рд╣реБрдиреНрдЫред рдЬрдм рд╡рд╛рдЗрдлрд╛рдЗ рдЬрдбрд╛рдирдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╣реБрдиреНрдЫрдиреН, рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ wifi_connection_handler рд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рд╕реВрдЪрд┐рдд рдЧрд░реНрджрдЫред
async def wifi_connection_handler(self, state):
self.internet_outage = not state
if state:
self.dprint('WiFi is up.')
duration = ticks_diff(ticks_ms(), self.internet_outage_start) // 1000
await self.publish_debug_msg('ReconnectedAfter', duration)
else:
self.internet_outages += 1
self.internet_outage_start = ticks_ms()
self.dprint('WiFi is down.')
await asyncio.sleep(0)
рдкреНрд░рдХрд╛рд░реНрдп рдЗрдорд╛рдирджрд╛рд░реАрдкреВрд░реНрд╡рдХ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдмрд╛рдЯ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпрд╕рд▓реЗ рдЖрдЙрдЯреЗрдЬрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ (internet_outages) рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрд╡рдзрд┐ рдЧрдгрдирд╛ рдЧрд░реНрджрдЫред рдЬрдм рдЬрдбрд╛рди рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреНрдЫ, рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рдордп рд╕рд░реНрднрд░рдорд╛ рдкрдард╛рдЗрдиреНрдЫред
рд╡реИрд╕реЗ, рдЕрдиреНрддрд┐рдо рдирд┐рджреНрд░рд╛ рдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЫ - рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдпрд╕рд▓рд╛рдИ рдкрд░реНрдЦрд╛рдЗ рдорд╛рд░реНрдлрдд рднрдирд┐рдиреНрдЫ, рд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрд╣рд░реВ рдЬрд╕рдХреЛ рд╢рд░реАрд░рдорд╛ рдЕрд░реНрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫ рдХрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
WiFi рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрдиреБрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддрдкрд╛рдИрдВрд▓реЗ MQTT рдмреНрд░реЛрдХрд░ (рд╕рд░реНрднрд░) рдорд╛ рдЬрдбрд╛рди рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рдкрдирд┐ рдпреЛ рдЧрд░реНрдЫ, рд░ рдЬрдбрд╛рди рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдБрджрд╛ рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА рдЙрдкрдпреЛрдЧреА рдЧрд░реНрдиреЗ рдЕрд╡рд╕рд░ рдкрд╛рдЙрдБрдЫреМрдВ
async def mqtt_connection_handler(self, client):
await client.subscribe(self._mqtt_cold_water_theme)
await client.subscribe(self._mqtt_hot_water_theme)
рдпрд╣рд╛рдБ рд╣рд╛рдореА рдзреЗрд░реИ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреНрдЫреМрдВ - рд╕рд░реНрднрд░рд╕рдБрдЧ рдЕрдм рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдиреНрджреЗрд╢ рдкрдард╛рдПрд░ рд╣рд╛рд▓рдХреЛ рдХрд╛рдЙрдиреНрдЯрд░ рдорд╛рдирд╣рд░реВ рд╕реЗрдЯ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдЫред
def mqtt_msg_handler(self, topic, msg):
topicstr = str(topic, 'utf8')
self.dprint("Received MQTT message topic={}, msg={}".format(topicstr, msg))
if topicstr == self._mqtt_cold_water_theme:
self.cold_counter.set_value(int(msg))
if topicstr == self._mqtt_hot_water_theme:
self.hot_counter.set_value(int(msg))
рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЖрдЧрдорди рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджрдЫ, рд░ рд╡рд┐рд╖рдп (рд╕рдиреНрджреЗрд╢ рд╢реАрд░реНрд╖рдХ) рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ, рдХрд╛рдЙрдиреНрдЯрд░рд╣рд░реВ рдордзреНрдпреЗ рдПрдХрдХреЛ рдорд╛рдирд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд╣реБрдиреНрдЫрдиреНред
рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдПрдХ рдЬреЛрдбреА
# Publish a message if WiFi and broker is up, else discard
async def publish_msg(self, topic, msg):
self.dprint("Publishing message on topic {}: {}".format(topic, msg))
if not self.internet_outage:
await self.publish(topic, msg)
else:
self.dprint("Message was not published - no internet connection")
рдпрджрд┐ рдЬрдбрд╛рди рд╕реНрдерд╛рдкрд┐рдд рдЫ рднрдиреЗ рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрдЫред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдЬрдбрд╛рди рдЫреИрди рднрдиреЗ, рд╕рдиреНрджреЗрд╢рд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреНрдЫред
рд░ рдпреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдХрд╛рд░реНрдп рд╣реЛ рдЬрд╕рд▓реЗ рдбрд┐рдмрдЧрд┐рдЩ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ рд░ рдкрдард╛рдЙрдБрдЫред
async def publish_debug_msg(self, subtopic, msg):
await self.publish_msg("{}/{}".format(self._mqtt_debug_water_theme, subtopic), str(msg))
рдпрддрд┐ рдзреЗрд░реИ рдкрд╛рда, рд░ рд╣рд╛рдореАрд▓реЗ рдЕрдЭреИрд╕рдореНрдо рдПрд▓рдИрдбреА рдЭрд┐рдореНрдХреЗрдХрд╛ рдЫреИрдиреМрдВред рдпрд╣рд╛рдБ
# Blink flash LED if WiFi down
async def _heartbeat(self):
while True:
if self.internet_outage:
self.blue_led(not self.blue_led()) # Fast blinking if no connection
await asyncio.sleep_ms(200)
else:
self.blue_led(0) # Rare blinking when connected
await asyncio.sleep_ms(50)
self.blue_led(1)
await asyncio.sleep_ms(5000)
рдореИрд▓реЗ реи рдмреНрд▓рд┐рдЩреНрдХрд┐рдЩ рдореЛрдбрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдПрдХреЛ рдЫреБред рдпрджрд┐ рдЬрдбрд╛рди рд╣рд░рд╛рдПрдХреЛ рдЫ (рд╡рд╛ рдпреЛ рднрд░реНрдЦрд░реИ рд╕реНрдерд╛рдкрд┐рдд рднрдЗрд░рд╣реЗрдХреЛ рдЫ), рдЙрдкрдХрд░рдг рдЫрд┐рдЯреНрдЯреИ рдЭрд┐рдореНрдХрд┐рдиреЗрдЫред рдпрджрд┐ рдЬрдбрд╛рди рд╕реНрдерд╛рдкрд┐рдд рдЫ рднрдиреЗ, рдЙрдкрдХрд░рдг рдкреНрд░рддреНрдпреЗрдХ 2 рд╕реЗрдХреЗрдиреНрдбрдорд╛ рдПрдХ рдкрдЯрдХ рдЭрд┐рдореНрдХрд╛рдЙрдБрдЫред рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛, рдЕрдиреНрдп рдЭрд┐рдореНрдХрд╛рдЙрдиреЗ рдореЛрдбрд╣рд░реВ рдпрд╣рд╛рдБ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рддрд░ рдПрд▓рдИрдбреА рдХреЗрд╡рд▓ рд▓рд╛рдб рдЫред рд╣рд╛рдореАрд▓реЗ рдбрд┐рд╕реНрдкреНрд▓реЗрд▓рд╛рдИ рдкрдирд┐ рд▓рдХреНрд╖рд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред
async def _display_coro(self):
display = SSD1306_I2C(128,32, i2c)
while True:
display.poweron()
display.fill(0)
display.text("COLD: {:.3f}".format(self.cold_counter.value() / 1000), 16, 4)
display.text("HOT: {:.3f}".format(self.hot_counter.value() / 1000), 16, 20)
display.show()
await asyncio.sleep(3)
display.poweroff()
while self.button():
await asyncio.sleep_ms(20)
рдпреЛ рдореИрд▓реЗ рдХреБрд░рд╛ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдерд┐рдПрдБ - рдпреЛ рдХреЛрд░реБрдЯрд┐рдирд╣рд░реВрд╕рдБрдЧ рдХрддрд┐ рд╕рд░рд▓ рд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫред рдпреЛ рд╕рд╛рдиреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫред рдХреЛрд░реБрдЯрд┐рдирд▓реЗ рдмрдЯрди рдерд┐рдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдкрд░реНрдЦрдиреНрдЫ рд░ 3 рд╕реЗрдХреЗрдиреНрдбрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рджрд░реНрд╢рди рдЦреЛрд▓реНрдЫред рдбрд┐рд╕реНрдкреНрд▓реЗрд▓реЗ рд╣рд╛рд▓рдХреЛ рдорд┐рдЯрд░ рд░рд┐рдбрд┐рдЩрд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрдЫред
рд╕рд╛рдирд╛ рд╕рд╛рдирд╛ рдХреБрд░рд╛рд╣рд░реВ рдЕрдЭреИ рдмрд╛рдБрдХреА рдЫрдиреНред рдпрд╣рд╛рдБ (рдкреБрдирдГ) рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдЙрджреНрдпрдо рд╕реБрд░реБ рдЧрд░реНрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп рдЫред рдореБрдЦреНрдп рд▓реВрдкрд▓реЗ рдПрдХ рдорд┐рдиреЗрдЯрдорд╛ рдПрдХ рдкрдЯрдХ рд╡рд┐рднрд┐рдиреНрди рдбрд┐рдмрдЧрд┐рдЩ рдЬрд╛рдирдХрд╛рд░реА рдкрдард╛рдЙрдБрдЫред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдо рдпрд╕рд▓рд╛рдИ рдЙрджреНрдзреГрдд рдЧрд░реНрджрдЫреБ - рдорд▓рд╛рдИ рд▓рд╛рдЧреНрджреИрди рдХрд┐ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЯрд┐рдкреНрдкрдгреА рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ
async def main(self):
while True:
try:
await self._connect_to_WiFi()
await self._run_main_loop()
except Exception as e:
self.dprint('Global communication failure: ', e)
await asyncio.sleep(20)
async def _connect_to_WiFi(self):
self.dprint('Connecting to WiFi and MQTT')
sta_if = network.WLAN(network.STA_IF)
sta_if.connect(config['ssid'], config['wifi_pw'])
conn = False
while not conn:
await self.connect()
conn = True
self.dprint('Connected!')
self.internet_outage = False
async def _run_main_loop(self):
# Loop forever
mins = 0
while True:
gc.collect() # For RAM stats.
mem_free = gc.mem_free()
mem_alloc = gc.mem_alloc()
try:
await self.publish_debug_msg("Uptime", mins)
await self.publish_debug_msg("Repubs", self.REPUB_COUNT)
await self.publish_debug_msg("Outages", self.internet_outages)
await self.publish_debug_msg("MemFree", mem_free)
await self.publish_debug_msg("MemAlloc", mem_alloc)
except Exception as e:
self.dprint("Exception occurred: ", e)
mins += 1
await asyncio.sleep(60)
рдареАрдХ рдЫ, рд╡рд┐рд╡рд░рдг рдкреВрд░рд╛ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдХреЗрд╣реА рдердк рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рд░ рд╕реНрдерд┐рд░рддрд╛рд╣рд░реВ
#####################################
# Constants and configuration
#####################################
config['keepalive'] = 60
config['clean'] = False
config['will'] = ('/ESP/Wemos/Water/LastWill', 'Goodbye cruel world!', False, 0)
MQTTClient.DEBUG = True
EEPROM_ADDR_HOT_VALUE = const(0)
EEPROM_ADDR_COLD_VALUE = const(4)
рдпреЛ рд╕рдмреИ рдпрд╕рд░реА рд╕реБрд░реБ рд╣реБрдиреНрдЫ
client = CounterMQTTClient()
loop = asyncio.get_event_loop()
loop.run_until_complete(client.main())
рдореЗрд░реЛ рд╕рдореНрдЭрдирд╛рдорд╛ рдХреЗрд╣рд┐ рднрдпреЛ
рддреНрдпрд╕реИрд▓реЗ, рд╕рдмреИ рдХреЛрдб рддреНрдпрд╣рд╛рдБ рдЫред рдореИрд▓реЗ рдПрдореНрдкреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реЗрдВ - рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдиреНрддрд░рд┐рдХ (ESP-07 рдорд╛ рд░рд╣реЗрдХреЛ рдПрдЙрдЯрд╛) рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрднрдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рд░ рддреНрдпрд╕рдкрдЫрд┐ рдирд┐рдпрдорд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрдХреНрд░рдордмрд╛рдЯ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рддреНрдпрд╣рд╛рдБ рдореИрд▓реЗ mqtt_as, uasyncio, ssd1306 рд░ рдореИрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рд╕рдВрдЧреНрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рдкрдирд┐ рдЕрдкрд▓реЛрдб рдЧрд░реЗрдВ (mqtt_as рднрд┐рддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ)ред
рд╣рд╛рдореА рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ рд░... рд╣рд╛рдореАрд▓реЗ рдореЗрдореЛрд░реА рдПрд░рд░ рдкрд╛рдЙрдБрдЫреМрдВред рдпрд╕рдмрд╛рд╣реЗрдХ, рдореИрд▓реЗ рдЬрддрд┐ рдзреЗрд░реИ рдмреБрдЭреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВ рдХрд┐ рдореЗрдореЛрд░реА рдХрд╣рд╛рдБ рд▓рд┐рдХ рднрдЗрд░рд╣реЗрдХреЛ рдерд┐рдпреЛ, рдореИрд▓реЗ рдЬрддрд┐ рдзреЗрд░реИ рдбрд┐рдмрдЧ рдкреНрд░рд┐рдиреНрдЯрд╣рд░реВ рд░рд╛рдЦреЗрдВ, рдпреЛ рддреНрд░реБрдЯрд┐ рдкрд╣рд┐рд▓реЗ рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛред рдПрдЙрдЯрд╛ рдЫреЛрдЯреЛ рдЧреБрдЧрд▓ рдЦреЛрдЬрд▓реЗ рдорд▓рд╛рдИ рдпреЛ рдмреБрдЭреНрдпреЛ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рд╕рдБрдЧ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛, рдХреЗрд╡рд▓ 30 kB рдореЗрдореЛрд░реА рдЫ, рдЬрд╕рдорд╛ 65 kB рдХреЛрдб (рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд╕рд╣рд┐рдд) рдорд╛рддреНрд░ рдлрд┐рдЯ рд╣реБрди рд╕рдХреНрджреИрдиред
рддрд░ рддреНрдпрд╣рд╛рдБ рдПрдХ рдмрд╛рдЯреЛ рдЫред рдпреЛ micropython рд▓рд╛рдИ .py рдлрд╛рдЗрд▓рдмрд╛рдЯ рд╕реАрдзреИ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджреИрди - рдпреЛ рдлрд╛рдЗрд▓ рдкрд╣рд┐рд▓реЗ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпреЛ рд╕рд┐рдзреИ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдмрд╛рдЗрдЯрдХреЛрдбрдорд╛ рдкрд░рд┐рдгрдд рд╣реБрдиреНрдЫ, рдЬреБрди рддреНрдпрд╕рдкрдЫрд┐ рдореЗрдореЛрд░реАрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫред рдареАрдХ рдЫ, рдХрдореНрдкрд╛рдЗрд▓рд░рд▓реЗ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдЗрдБрд▓рд╛рдИ RAM рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдкрдирд┐ рдЪрд╛рд╣рд┐рдиреНрдЫред
рдЪрд╛рд▓ рднрдиреЗрдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рд▓рд╛рдИ рд╕реНрд░реЛрдд-рдЧрд╣рди рд╕рдВрдХрд▓рдирдмрд╛рдЯ рдмрдЪрд╛рдЙрдиреБ рд╣реЛред рддрдкрд╛рдИрдБрд▓реЗ рдареВрд▓реЛ рдХрдореНрдкреНрдпреБрдЯрд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рдорд╛ рддрдпрд╛рд░-рдмрд╛рдЗрдЯрдХреЛрдб рдЕрдкрд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ micropython рдлрд░реНрдорд╡реЗрдпрд░ рдбрд╛рдЙрдирд▓реЛрдб рд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ .
рдореИрд▓реЗ рдореЗрдХрдлрд╛рдЗрд▓ рд▓реЗрдЦреЗрдХреЛ рдЫреИрди, рддрд░ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓рд╣рд░реВ (рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд╕рд╣рд┐рдд) рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реЗрдВред
mpy-cross water_counter.py
.mpy рдПрдХреНрд╕реНрдЯреЗрдиреНрд╕рдирд╕рдБрдЧ рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫ, рдкрд╣рд┐рд▓реЗ рдпрдиреНрддреНрд░рдХреЛ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдмрд╛рдЯ рд╕рдореНрдмрдиреНрдзрд┐рдд .py рд▓рд╛рдИ рдореЗрдЯрд╛рдЙрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реНред
рдореИрд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо (IDE?) ESPlorer рдорд╛ рд╕рдмреИ рд╡рд┐рдХрд╛рд╕ рдЧрд░реЗред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рддреБрд░реБрдиреНрддреИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдореЗрд░реЛ рдорд╛рдорд▓рд╛рдорд╛, рд╕рдмреИ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рддрд░реНрдХ рд░ рд╕рд┐рд░реНрдЬрдирд╛ water_counter.py (.mpy) рдлрд╛рдЗрд▓рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рддрд░ рдпреЛ рд╕рдмреИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕реБрд░реБ рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рддреНрдпрд╣рд╛рдБ рд╕реБрд░реБрдорд╛ main.py рдирд╛рдордХ рдлрд╛рдЗрд▓ рдкрдирд┐ рд╣реБрдиреБрдкрд░реНрдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдпреЛ рдареНрдпрд╛рдХреНрдХреИ .py рд╣реБрдиреБрдкрд░реНрдЫ, рд░ рдкреВрд░реНрд╡-рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХреЛ .mpy рд╣реЛрдЗрдиред рдпрд╣рд╛рдБ рдпрд╕рдХреЛ рдорд╛рдореВрд▓реА рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЫрдиреН
import water_counter
рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ - рд╕рдмреИ рдХрд╛рдо рдЧрд░реНрджрдЫред рддрд░ рдирд┐: рд╢реБрд▓реНрдХ рдореЗрдореЛрд░реА рдЦрддрд░рдирд╛рдХ рд░реВрдкрдорд╛ рд╕рд╛рдиреЛ рдЫ - рд▓рдЧрднрдЧ 1kbред рдорд╕рдБрдЧ рдЕрдЭреИ рдкрдирд┐ рдЙрдкрдХрд░рдгрдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рдЫ, рд░ рдпреЛ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдиред рддрд░ рдпреЛ рдШрдЯрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдПрдХ рдмрд╛рдЯреЛ рдЫ рдХрд┐ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрд┐рдпреЛред
рдпрд╣рд╛рдБ рдХреБрд░рд╛ рдЫред рдпрджреНрдпрдкрд┐ рдлрд╛рдЗрд▓рд╣рд░реВ рдмрд╛рдЗрдЯрдХреЛрдбрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН рд░ рдЖрдиреНрддрд░рд┐рдХ рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдорд╛ рд░рд╣рдиреНрдЫрдиреН, рд╡рд╛рд╕реНрддрд╡рдорд╛ рддрд┐рдиреАрд╣рд░реВ рдЕрдЭреИ рдкрдирд┐ RAM рдорд╛ рд▓реЛрдб рд╣реБрдиреНрдЫрдиреН рд░ рддреНрдпрд╣рд╛рдБрдмрд╛рдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реБрдиреНрдЫрдиреНред рддрд░ рдпреЛ рдмрд╛рд╣рд┐рд░ рдЬрд╛рдиреНрдЫ рдХрд┐ micropython рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реАрдмрд╛рдЯ рд╕реАрдзрд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХреНрдЫ, рддрд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рд┐рдзреИ рдлрд░реНрдорд╡реЗрдпрд░рдорд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдЧрд╛рд╣реНрд░реЛ рдЫреИрди, рдпрджреНрдпрдкрд┐ рдпрд╕рд▓реЗ рдореЗрд░реЛ рдиреЗрдЯрдмреБрдХрдорд╛ рдзреЗрд░реИ рд╕рдордп рд▓рд┐рдпреЛ (рддреНрдпрд╣рд╛рдБ рдорд╛рддреНрд░ рдорд╕рдБрдЧ рд▓рд┐рдирдХреНрд╕ рднрдПрдХреЛ рдерд┐рдпреЛ)ред
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЫ:
- рдбрд╛рдЙрдирд▓реЛрдб рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН ред рдпреЛ рдЪреАрдЬрд▓реЗ ESP8266 рдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХрдореНрдкрд╛рдЗрд▓рд░ рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рднреЗрд▓рд╛ рдЧрд░реНрджрдЫред рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдореБрдЦреНрдп рдкреГрд╖реНрдардорд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рднреЗрд▓рд╛ рднрдпреЛ (рдореИрд▓реЗ рд╕реНрдЯреНрдпрд╛рдиреНрдбрд▓реЛрди = рд╣реЛ рд╕реЗрдЯрд┐рдЩ рд░реЛрдЬреЗрдВ)
- рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН
- рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдЗрдерди рд░реВрдЦ рднрд┐рддреНрд░ рдкреЛрд░реНрдЯ/esp8266/рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН
- рд╣рд╛рдореА рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рдлрд░реНрдорд╡реЗрдпрд░ рднреЗрд▓рд╛ рдЧрд░реНрдЫреМрдВ
- рд╣рд╛рдореА рдорд╛рдЗрдХреНрд░реЛрдХрдиреНрдЯреНрд░реЛрд▓рд░рдорд╛ рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдкрд▓реЛрдб рдЧрд░реНрдЫреМрдВ (рдо ESP8266Flasher рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛ Python esptool рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Windows рдорд╛ рдпреЛ рдЧрд░реНрдЫреБ)
рдпреЛ рд╣реЛ, рдЕрдм 'рдЗрдореНрдкреЛрд░реНрдЯ ssd1306' рд▓реЗ рдлрд░реНрдорд╡реЗрдпрд░рдмрд╛рдЯ рд╕реАрдзреИ рдХреЛрдб рд▓рд┐рдиреЗрдЫ рд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ RAM рдЦрдкрдд рд╣реБрдиреЗ рдЫреИрдиред рдпрд╕ рдЪрд╛рд▓рдХреЛ рд╕рд╛рде, рдореИрд▓реЗ рдлрд░реНрдорд╡реЗрдпрд░рдорд╛ рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдЕрдкрд▓реЛрдб рдЧрд░реЗрдВ, рдЬрдмрдХрд┐ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдлрд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реАрдмрд╛рдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдлрд░реНрдорд╡реЗрдпрд░ рдкреБрди: рдХрдореНрдкрд╛рдЗрд▓ рдирдЧрд░реА рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЕрд╣рд┐рд▓реЗ рдорд╕рдБрдЧ 8.5kb рдирд┐:рд╢реБрд▓реНрдХ RAM рдЫред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рднрд╡рд┐рд╖реНрдпрдорд╛ рдзреЗрд░реИ рдлрд░рдХ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫред рдареАрдХ рдЫ, рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдЫреИрди рднрдиреЗ, рддрдкрд╛рдЗрдБ рдлрд░реНрдорд╡реЗрдпрд░рдорд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдзрдХреЗрд▓реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рддреНрдпрд╕реЛрднрдП рдЕрдм рд╣рд╛рдореАрд▓реЗ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рдЧрд░реНрдиреБрдкрд░реНрдЫ?
рдареАрдХ рдЫ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЛрд▓реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдлрд░реНрдорд╡реЗрдпрд░ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ, рдмрдХреНрд╕ рдЫрд╛рдкрд┐рдПрдХреЛ рдЫ, рдЙрдкрдХрд░рдг рднрд┐рддреНрддрд╛рдорд╛ рдЕрдбреНрдХрд┐рдПрдХреЛ рдЫ рд░ рдЦреБрд╕реАрд╕рд╛рде рдмрддреНрддреА рдЭрд┐рдореНрдХрд╛рдЙрдБрдЫред рддрд░ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рд╕рдмреИ рдмреНрд▓реНрдпрд╛рдХ рдмрдХреНрд╕ рд╣реЛ (рд╢рд╛рдмреНрджрд┐рдХ рд░ рд▓рд╛рдХреНрд╖рдгрд┐рдХ рд░реВрдкрдорд╛) рд░ рдпреЛ рдЕрдЭреИ рдереЛрд░реИ рдкреНрд░рдпреЛрдЧрдХреЛ рдЫред рд╕рд░реНрднрд░рдорд╛ рдкрдард╛рдЗрдПрдХрд╛ MQTT рд╕рдиреНрджреЗрд╢рд╣рд░реВрд╕рдБрдЧ рдХреЗрд╣реА рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред
рдореЗрд░реЛ "рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо" рдШреБрдорд┐рд░рд╣реЗрдХреЛ рдЫ ред MQTT рдореЛрдбреНрдпреБрд▓ рдпрд╛ рдд рдмрдХреНрд╕рдмрд╛рдЯ рдмрд╛рд╣рд┐рд░ рдЖрдЙрдБрдЫ, рд╡рд╛ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдПрдб-рдЕрди рдмрдЬрд╛рд░рдмрд╛рдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреНрдЫ - рдорд▓рд╛рдИ рдпреЛ рдХрд╣рд╛рдБрдмрд╛рдЯ рдЖрдпреЛ рдпрд╛рдж рдЫреИрдиред MQTT рдПрдХ рдЖрддреНрдо-рдкрд░реНрдпрд╛рдкреНрдд рдЪреАрдЬ рд╣реЛрдЗрди - рддрдкрд╛рдИрдВрд▓рд╛рдИ рддрдерд╛рдХрдерд┐рдд рдЪрд╛рд╣рд┐рдиреНрдЫ рдмреНрд░реЛрдХрд░ - рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ MQTT рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ, рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреЗ рд░ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдиреЗ рд╕рд░реНрднрд░ред рдо рд▓рд╛рдордЦреБрдЯреНрдЯреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ, рдЬреБрди (рдореЗрдЬрд░рдбреЛрдореЛ рдЬрд╕реНрддреИ) рдЙрд╣реА рдиреЗрдЯрдмреБрдХрдорд╛ рдЪрд▓реНрдЫред
рдпрдиреНрддреНрд░рд▓реЗ рдХрдореНрддрд┐рдорд╛ рдПрдХ рдкрдЯрдХ рд╕рдиреНрджреЗрд╢ рдкрдард╛рдПрдкрдЫрд┐, рдорд╛рди рддреБрд░реБрдиреНрддреИ рд╕реВрдЪреАрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫред

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

рдпреЛ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫ рдХрд┐ рд░рд╛рддрдорд╛ рд▓рдЧрднрдЧ рдХрд╕реИрд▓реЗ рдкрд╛рдиреА рдкреНрд░рдпреЛрдЧ рдирдЧрд░реЗрдХреЛред рдПрдХ рджреБрдИ рдкрдЯрдХ рдХреЛрд╣реА рд╢реМрдЪрд╛рд▓рдп рдЧрдП, рд░ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рд░рд┐рднрд░реНрд╕ рдУрд╕реНрдореЛрд╕рд┐рд╕ рдлрд┐рд▓реНрдЯрд░ рдкреНрд░рддрд┐ рд░рд╛рдд рдПрдХ рдЬреЛрдбреА рд▓реАрдЯрд░ рдЪреВрд╕реНрдЫред рдмрд┐рд╣рд╛рди, рдЦрдкрдд рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдмрдвреНрдЫред рдо рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдмреЛрдпрд▓рд░рдмрд╛рдЯ рдкрд╛рдиреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ, рддрд░ рддреНрдпрд╕рдкрдЫрд┐ рдо рдиреБрд╣рд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдкрдорд╛ рд╢рд╣рд░рдХреЛ рддрд╛рддреЛ рдкрд╛рдиреАрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ - рдпреЛ рддрд▓реНрд▓реЛ рдЧреНрд░рд╛рдлрдорд╛ рдкрдирд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рджреЗрдЦрд┐рдиреНрдЫред
рдпреЛ рдЧреНрд░рд╛рдлрдмрд╛рдЯ рдореИрд▓реЗ рдерд╛рд╣рд╛ рдкрд╛рдПрдБ рдХрд┐ рд╢реМрдЪрд╛рд▓рдп рдЬрд╛рди рем-рен рд▓рд┐рдЯрд░ рдкрд╛рдиреА, рдиреБрд╣рд╛рдЙрди реиреж-рейреж рд▓рд┐рдЯрд░, рднрд╛рдБрдбрд╛ рдзреБрди реиреж рд▓рд┐рдЯрд░ рд░ рдиреБрд╣рд╛рдЙрди резремреж рд▓рд┐рдЯрд░ рдкрд╛рдиреА рдЪрд╛рд╣рд┐рдиреНрдЫред рдореЗрд░реЛ рдкрд░рд┐рд╡рд╛рд░рд▓реЗ рдкреНрд░рддрд┐ рджрд┐рди рд▓рдЧрднрдЧ 6-7 рд▓рд┐рдЯрд░ рдЦрдкрдд рдЧрд░реНрдЫред
рддреА рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдЙрддреНрд╕реБрдХ рдЫрдиреН, рддрдкрд╛рдЗрдБ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореВрд▓реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рд░реЗрдХрд░реНрдбрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ

рдпрд╣рд╛рдБрдмрд╛рдЯ рдореИрд▓реЗ рд╕рд┐рдХреЗрдБ рдХрд┐ рдЬрдм рдЯреНрдпрд╛рдк рдЦреБрд▓рд╛ рд╣реБрдиреНрдЫ, рдкрд╛рдиреА рд▓рдЧрднрдЧ 1 рд▓рд┐рдЯрд░ рдкреНрд░рддрд┐ 5 рд╕реЗрдХреЗрдиреНрдбрдХреЛ рдЧрддрд┐рдорд╛ рдмрдЧреНрдЫред
рддрд░ рдпрд╕ рдлрд╛рд░рдордорд╛ рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫреИрдиред Majordomo рд╕рдБрдЧ рджрд┐рди, рд╣рдкреНрддрд╛ рд░ рдорд╣рд┐рдирд╛ рдЕрдиреБрд╕рд╛рд░ рдЦрдкрдд рдЪрд╛рд░реНрдЯрд╣рд░реВ рд╣реЗрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдкрдирд┐ рдЫред рдпрд╣рд╛рдБ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдмрд╛рд░рд╣рд░реВрдорд╛ рдЦрдкрдд рдЧреНрд░рд╛рдл рд╣реЛ

рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рдорд╕рдБрдЧ рдПрдХ рд╣рдкреНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдбрд╛рдЯрд╛ рдЫред рдПрдХ рдорд╣рд┐рдирд╛рдорд╛, рдпреЛ рдЧреНрд░рд╛рдл рдЕрдзрд┐рдХ рд╕реВрдЪрдХ рд╣реБрдиреЗрдЫ - рдкреНрд░рддреНрдпреЗрдХ рджрд┐рди рдПрдХ рдЕрд▓рдЧ рд╕реНрддрдореНрдн рд╣реБрдиреЗрдЫред рдореИрд▓реЗ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реЗрдХреЛ рдорд╛рдирд╣рд░реВрдорд╛ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реЗрд░ рддрд╕реНрд╡рд┐рд░ рдереЛрд░реИ рдмрд┐рдЧреНрд░рд┐рдПрдХреЛ рдЫ (рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рд╕реНрддрдореНрдн)ред рд░ рдпреЛ рдЕрдЭреИ рд╕реНрдкрд╖реНрдЯ рдЫреИрди рдХрд┐ рдореИрд▓реЗ рдЧрд▓рдд рд░реВрдкрдорд╛ рдкрд╣рд┐рд▓реЛ рдорд╛рдирд╣рд░реВ рд╕реЗрдЯ рдЧрд░реЗрдВ, рд▓рдЧрднрдЧ рдПрдХ рдХреНрдпреВрдм рдХрдо, рд╡рд╛ рдпреЛ рдлрд░реНрдорд╡реЗрдпрд░рдорд╛ рдмрдЧ рд╣реЛ рд░ рд╕рдмреИ рд▓рд┐рдЯрд░рд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрдиред рдердк рд╕рдордп рдЪрд╛рд╣рд┐рдиреНрдЫред
рдЧреНрд░рд╛рдлрд╣рд░реВ рдЖрдлреИрдВрд▓рд╛рдИ рдЕрдЭреИ рдкрдирд┐ рдХреЗрд╣реА рдЬрд╛рджреВ, рд╕реЗрддреЛ рдзреБрдиреЗ, рдЪрд┐рддреНрд░рдХрд╛рд░реА рдЪрд╛рд╣рд┐рдиреНрдЫред рд╕рд╛рдпрдж рдо рдбрд┐рдмрдЧ рдЧрд░реНрдиреЗ рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдореЗрдореЛрд░реА рдЦрдкрддрдХреЛ рдЧреНрд░рд╛рдл рдкрдирд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗрдЫреБ - рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреЗрд╣рд┐ рдЪреБрд╣рд╛рд╡рдЯ рднрдЗрд░рд╣реЗрдХреЛ рдЫред рд╕рд╛рдпрдж рдо рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рд╕рдордпрд╛рд╡рдзрд┐рд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреЗрдЫреБ рдЬрдм рддреНрдпрд╣рд╛рдБ рдЗрдиреНрдЯрд░рдиреЗрдЯ рдерд┐рдПрдиред рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐, рдпреЛ рд╕рдмреИ рд╡рд┐рдЪрд╛рд░рдХреЛ рд╕реНрддрд░рдорд╛ рдЫред
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рдЖрдЬ рдореЗрд░реЛ рдЕрдкрд╛рд░реНрдЯрдореЗрдиреНрдЯ рдЕрд▓рд┐ рд╕реНрдорд╛рд░реНрдЯ рднрдПрдХреЛ рдЫред рдпрд╕реНрддреЛ рд╕рд╛рдиреЛ рдЙрдкрдХрд░рдг рд╕рдВрдЧ, рдпреЛ рдШрд░ рдорд╛ рдкрд╛рдиреА рдЦрдкрдд рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрдиреЗрдЫред рдпрджрд┐ рдкрд╣рд┐рд▓реЗ рдо "рдлреЗрд░рд┐, рд╣рд╛рдореАрд▓реЗ рдПрдХ рдорд╣рд┐рдирд╛рдорд╛ рдзреЗрд░реИ рдкрд╛рдиреА рдЙрдкрднреЛрдЧ рдЧрд░реНрдпреМрдВ" рдорд╛ рдХреНрд░реЛрдзрд┐рдд рдерд┐рдП рднрдиреЗ, рдЕрдм рдо рдпреЛ рдЦрдкрддрдХреЛ рд╕реНрд░реЛрдд рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдЫреБред
рдорд┐рдЯрд░рдмрд╛рдЯ рдПрдХ рдорд┐рдЯрд░ рдЯрд╛рдврд╛ рднрдПрдорд╛ рд╕реНрдХреНрд░рд┐рдирдорд╛ рднрдПрдХрд╛ рд░рд┐рдбрд┐рдЩрд╣рд░реВ рд╣реЗрд░реНрджрд╛ рдХрд╕реИ-рдХрд╕реИрд▓рд╛рдИ рдЕрдиреМрдареЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫред рддрд░ рдзреЗрд░реИ рдЯрд╛рдврд╛рдХреЛ рднрд╡рд┐рд╖реНрдпрдорд╛, рдо рдЕрд░реНрдХреЛ рдЕрдкрд╛рд░реНрдЯрдореЗрдиреНрдЯрдорд╛ рдЬрд╛рдиреЗ рдпреЛрдЬрдирд╛ рдЧрд░реНрдЫреБ, рдЬрд╣рд╛рдБ рдзреЗрд░реИ рдкрд╛рдиреА рд░рд╛рдЗрдЬрд░рд╣рд░реВ рд╣реБрдиреЗрдЫрдиреН, рд░ рдорд┐рдЯрд░рд╣рд░реВ рд╕рдореНрднрд╡рддрдГ рдЕрд╡рддрд░рдгрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫрдиреНред рддреНрдпрд╕реИрд▓реЗ рд░рд┐рдореЛрдЯ рдкрдвреНрдиреЗ рдЙрдкрдХрд░рдг рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред
рдо рдпрдиреНрддреНрд░рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рдкрдирд┐ рдЧрд░реНрдЫреБред рдо рдкрд╣рд┐рд▓реЗ рдиреИ рдореЛрдЯрд░ рдЪрд╛рд▓рд┐рдд рднрд▓реНрдн рд╣реЗрд░реНрджреИ рдЫреБред рдЕрдм, рдмреЙрдпрд▓рд░рд▓рд╛рдИ рд╕рд╣рд░рдХреЛ рдкрд╛рдиреАрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди, рдореИрд▓реЗ рдкреБрдЧреНрди рдЧрд╛рд╣реНрд░реЛ рдард╛рдЙрдБрдорд╛ 3 рдЯреНрдпрд╛рдкрд╣рд░реВ рдШреБрдорд╛рдЙрдиреБ рдкрд░реНрдЫред рдпреЛ рдПрдХ рдмрдЯрди рд╕рдВрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдВрдХреЗрдд рд╕рдВрдЧ рдпреЛ рдЧрд░реНрди рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрдиреЗрдЫред рдЦреИрд░, рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпреЛ рд▓реАрдХ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫред
рд▓реЗрдЦрдорд╛ рдореИрд▓реЗ ESP8266 рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдпрдиреНрддреНрд░рдХреЛ рдореЗрд░реЛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрдгрди рдЧрд░реЗрдХреЛ рдЫреБред рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рдо рдорд╛рдЗрдХреНрд░реЛрдкрд╛рдЗрдерди рдлрд░реНрдорд╡реЗрдпрд░рдХреЛ рдПрдХ рдзреЗрд░реИ рд░реЛрдЪрдХ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд╕рд╛рде рдЖрдПрдХреЛ рд╣реБрдБ рдХреЛрд░реБрдЯрд┐рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ - рд╕рд░рд▓ рд░ рд░рд╛рдореНрд░реЛред рдореИрд▓реЗ рдЕрднрд┐рдпрд╛рдирдХреЛ рдХреНрд░рдордорд╛ рд╕рд╛рдордирд╛ рдЧрд░реЗрдХрд╛ рдзреЗрд░реИ рдХрдореА рд░ рдХрдордЬреЛрд░реАрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдВред рд╕рд╛рдпрдж рдореИрд▓реЗ рд╕рдмреИ рдХреБрд░рд╛рд▓рд╛рдИ рдзреЗрд░реИ рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рд╡рд░реНрдгрди рдЧрд░реЗрдВ; рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛, рдПрдХ рдкрд╛рдардХрдХреЛ рд░реВрдкрдорд╛, рдорд▓рд╛рдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪреАрдЬрд╣рд░реВ рдЫреЛрдбреНрди рдкрдЫрд┐ рдирднрдирд┐рдПрдХреЛ рдХреЗ рдЫреЛрдбрд┐рдпреЛ рднрдиреЗрд░ рд╕реЛрдЪреНрдиреБ рднрдиреНрджрд╛ рд╕рдЬрд┐рд▓реЛ рдЫред
рд╕рдзреИрдВ рдЬрд╕реНрддреИ, рдо рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдЧрд░реНрди рдЦреБрд▓рд╛ рдЫреБред
рд╕реНрд░реЛрдд: www.habr.com
