ESP8266 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛рдпрд░ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг

рдПрдХ "рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо" рдмрдирд╛рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ ...



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

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

рджреЗрд╢реА рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред

рджреЗрд╢реА рд╡рд╛рдИрдлрд╛рдИ рд╣рд╛рдпрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐


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

рдЖрдзрд╛рд░ рдХреЛ ESP8266 12F рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ MQTT рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред IOBroker рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ , рдЬреЛ MQTT рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рдХреЗ рд╕рд╛рде рд╣реА рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рд╛ред рдкрд┐рдЫрд▓реЗ рдореЙрдбрд▓реЛрдВ рдХреЗ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдЗрдХрд╛рдИ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ TTL рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд UART рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред RX / TX рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ UART / USB рдПрдбреЙрдкреНрдЯрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕рднреА рдбреЗрдЯрд╛ рдкрдврд╝рд╛ред

рдлреЛрдЯреЛ рдорджрд░рдмреЛрд░реНрдб рдорджрд░рдмреЛрд░реНрдбред

рд╣рд╛рдпрд░ рдиреЗрдЯрд┐рд╡ рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рдмреЛрд░реНрдб


рдмреЛрд░реНрдб 3.3 рд╡реА рдбреАрд╕реА / рдбреАрд╕реА рдХрдирд╡рд░реНрдЯрд░ рдФрд░ рддрд░реНрдХ рд╕реНрддрд░ рдХреЗ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдиреЗ рд╢реВрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рддрд╣рдд рдЕрдЬреНрдЮрд╛рдд рдХреНрдпрд╛ рд╣реИред

рд╣рд╛рдпрд░ рдиреЗрдЯрд┐рд╡ рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рдмреЛрд░реНрдб


рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрд▓рдЯрдлреЗрд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ред
рд╡рд┐рдирд┐рдордп рджрд░ 9600/8-N-1 рд╣реИред рд╡рд╛рдИрдлрд╛рдИ рдореЙрдбреНрдпреВрд▓ рд╣рд░ 13 рд╕реЗрдХрдВрдб (13 рдмрд╛рдЗрдЯреНрд╕) рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рд╕рднреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЯ (37 рдмрд╛рдЗрдЯреНрд╕) рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд, рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдИред

рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд░реЛрдЯреЛрдХреЙрд▓
1 тАФ FF c
2 тАФ FF c
3 тАФ 22
4 тАФ 00
5 тАФ 00
6 тАФ 00
7 тАФ 00
8 тАФ 00
9 тАФ 01
10 тАФ 01 тАФ , 02 тАФ
11 тАФ 4D тАФ , 6D тАФ
12 тАФ 5F тАФ
13 тАФ 00
14 тАФ 1A тАФ 26 , 1B тАФ 27,
15 тАФ 00
16 тАФ 00
17 тАФ 00
18 тАФ 00 тАФ , 7F-
19 тАФ 00
20 тАФ 00
21 тАФ 00
22 тАФ 00
23 тАФ 00
24 тАФ 00 тАФ smart, 01 тАФ cool, 02 тАФ heat, 03 тАФ , 04 тАФ DRY,
25 тАФ 00
26 тАФ 00 тАФ max, 01 тАФ mid, 02 тАФ min, 03 тАФ auto тАФ FanSpeed
27 тАФ 00
28 тАФ 00 тАФ ., 01 тАФ . 02 тАФ / . 03 тАФ
29 тАФ 00 тАФ , 80 .
30 тАФ 00 тАФ power off, x1 тАФ power on, (1x ) тАФ ? x9 тАФ QUIET
31 тАФ 00
32 тАФ 00 тАФ fresh off, 01 тАФ fresh on
33 тАФ 00
34 тАФ 00
35 тАФ 00
36 тАФ 00 тАФ 16 , 01 тАФ 17 0E тАФ 30 .
37 тАФ . .

рдЫреЛрдЯреА рдЯреАрдореЗрдВ
FF FF 0A 00 00 00 00 00 01 01 4D 02 5B
FF FF 0A 00 00 00 00 00 01 01 4D 03 5C
FF FF 0A 00 00 00 00 00 01 03 00 00 0E
FF FF 0A 00 00 00 00 00 01 01 4D 01 5A

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдкрдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
рдПрдлрдПрдл рдПрдлрдПрдл 22 00 00 00 00 00 01 01 4D 5F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 04 048 - 20 рдбрд┐рдЧреНрд░реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рд╣рдо рд╕рд░реНрдХрд┐рдЯ рдЖрд░реЗрдЦ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рд╕рд░реНрдХрд┐рдЯ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рд╕реЗ 5 рд╡реЛрд▓реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ ESP8266 рдХреА рдЖрдкреВрд░реНрддрд┐ рд╡реЛрд▓реНрдЯреЗрдЬ 3.3 рд╡реЛрд▓реНрдЯ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рд╡реЛрд▓реНрдЯреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдЦрд┐рдХ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░ LM1117 (AMS1117) рд╣реИред рддрд░реНрдХ рд╕реНрддрд░ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рддрддреНрд╡реЛрдВ R1, Q1, R3 рдФрд░ R2, R3 рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ ESP8266 рдореЙрдбреНрдпреВрд▓ рдХреЗ RXD TXD 5 V рдХреЗ рд▓рд┐рдП рд╕рд╣рд┐рд╖реНрдгреБ рдирд╣реАрдВ рд╣реИред ESP рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, U2 U3 рдХреЗ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рд░реНрдХрд┐рдЯ рдЖрд░реЗрдЦред
рдпреЛрдЬрдирд╛


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

рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдлреЛрдЯреЛ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдмреЛрд░реНрдбред

рдХреЛрдб рдПрдХ Arduino рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рдХреЛрдб
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "...";
const char* password = "...";
const char* mqtt_server = "xx.xx.xx.xx"; // MQTT

IPAddress ip(xx,xx,xx,x); //IP 
IPAddress gateway(xx,xx,xx,xx); // 
IPAddress subnet(xx,xx,xx,xx); // 

WiFiClient espClient;
PubSubClient client(espClient);

#define ID_CONNECT "myhome-Conditioner"
#define LED     12
#define LEN_B   37

#define B_CUR_TMP   13  // 
#define B_CMD       17  // 00- 7F- ???
#define B_MODE      23  //04 - DRY, 01 - cool, 02 - heat, 00 - smart 03 - 
#define B_FAN_SPD   25  // 02 - min, 01 - mid, 00 - max, 03 - auto
#define B_SWING     27  //01 -     . 00 - . 02 - / . 03 -  
#define B_LOCK_REM  28  //80  . 00 -  
#define B_POWER     29  //on/off 01 - on, 00 - off (10, 11)-??? 09 - QUIET
#define B_FRESH     31  //fresh 00 - off, 01 - on
#define B_SET_TMP   35  // 

int fresh;
int power;
int swing;
int lock_rem;
int cur_tmp;
int set_tmp;
int fan_spd;
int Mode;
long prev = 0;
byte inCheck = 0;
byte qstn[] = {255,255,10,0,0,0,0,0,1,1,77,1,90}; //  
//byte start[] = {255,255};
byte data[37] = {}; // 
byte on[]   = {255,255,10,0,0,0,0,0,1,1,77,2,91}; //  
byte off[]  = {255,255,10,0,0,0,0,0,1,1,77,3,92}; //  
byte lock[] = {255,255,10,0,0,0,0,0,1,3,0,0,14};  //  
//byte buf[10];

void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    digitalWrite(LED, !digitalRead(LED));
  }
  digitalWrite(LED, HIGH);
}

void reconnect() {
  digitalWrite(LED, !digitalRead(LED));
  while (!client.connected()) {
    if (client.connect(ID_CONNECT)) {
      client.publish("myhome/Conditioner/connection", "true");
      client.publish("myhome/Conditioner/RAW", "");
      client.subscribe("myhome/Conditioner/#");
      digitalWrite(LED, HIGH);
    } else {
      delay(5000);
    }
  }
}

void InsertData(byte data[], size_t size){
    set_tmp = data[B_SET_TMP]+16;
    cur_tmp = data[B_CUR_TMP];
    Mode = data[B_MODE];
    fan_spd = data[B_FAN_SPD];
    swing = data[B_SWING];
    power = data[B_POWER];
    lock_rem = data[B_LOCK_REM];
    fresh = data[B_FRESH];
  /////////////////////////////////
  if (fresh == 0x00){
      client.publish("myhome/Conditioner/Fresh", "off");
  }
  if (fresh == 0x01){
      client.publish("myhome/Conditioner/Fresh", "on");
  }
  /////////////////////////////////
  if (lock_rem == 0x80){
      client.publish("myhome/Conditioner/Lock_Remote", "true");
  }
  if (lock_rem == 0x00){
      client.publish("myhome/Conditioner/Lock_Remote", "false");
  }
  /////////////////////////////////
  if (power == 0x01 || power == 0x11){
      client.publish("myhome/Conditioner/Power", "on");
  }
  if (power == 0x00 || power == 0x10){
      client.publish("myhome/Conditioner/Power", "off");
  }
  if (power == 0x09){
      client.publish("myhome/Conditioner/Power", "quiet");
  }
  if (power == 0x11 || power == 0x10){
      client.publish("myhome/Conditioner/Compressor", "on");
  } else {
    client.publish("myhome/Conditioner/Compressor", "off");
  }
  /////////////////////////////////
  if (swing == 0x00){
      client.publish("myhome/Conditioner/Swing", "off");
  }
  if (swing == 0x01){
      client.publish("myhome/Conditioner/Swing", "ud");
  }
  if (swing == 0x02){
      client.publish("myhome/Conditioner/Swing", "lr");
  }
  if (swing == 0x03){
      client.publish("myhome/Conditioner/Swing", "all");
  }
  /////////////////////////////////  
  if (fan_spd == 0x00){
      client.publish("myhome/Conditioner/Fan_Speed", "max");
  }
  if (fan_spd == 0x01){
      client.publish("myhome/Conditioner/Fan_Speed", "mid");
  }
  if (fan_spd == 0x02){
      client.publish("myhome/Conditioner/Fan_Speed", "min");
  }
  if (fan_spd == 0x03){
      client.publish("myhome/Conditioner/Fan_Speed", "auto");
  }
  /////////////////////////////////
  char b[5]; 
  String char_set_tmp = String(set_tmp);
  char_set_tmp.toCharArray(b,5);
  client.publish("myhome/Conditioner/Set_Temp", b);
  ////////////////////////////////////
  String char_cur_tmp = String(cur_tmp);
  char_cur_tmp.toCharArray(b,5);
  client.publish("myhome/Conditioner/Current_Temp", b);
  ////////////////////////////////////
  if (Mode == 0x00){
      client.publish("myhome/Conditioner/Mode", "smart");
  }
  if (Mode == 0x01){
      client.publish("myhome/Conditioner/Mode", "cool");
  }
  if (Mode == 0x02){
      client.publish("myhome/Conditioner/Mode", "heat");
  }
  if (Mode == 0x03){
      client.publish("myhome/Conditioner/Mode", "vent");
  }
  if (Mode == 0x04){
      client.publish("myhome/Conditioner/Mode", "dry");
  }
  
  String raw_str;
  char raw[75];
  for (int i=0; i < 37; i++){
     if (data[i] < 10){
       raw_str += "0";
       raw_str += String(data[i], HEX);
     } else {
      raw_str += String(data[i], HEX);
     }    
  }
  raw_str.toUpperCase();
  raw_str.toCharArray(raw,75);
  client.publish("myhome/Conditioner/RAW", raw);
  
///////////////////////////////////
}

byte getCRC(byte req[], size_t size){
  byte crc = 0;
  for (int i=2; i < size; i++){
      crc += req[i];
  }
  return crc;
}

void SendData(byte req[], size_t size){
  //Serial.write(start, 2);
  Serial.write(req, size - 1);
  Serial.write(getCRC(req, size-1));
}

inline unsigned char toHex( char ch ){
   return ( ( ch >= 'A' ) ? ( ch - 'A' + 0xA ) : ( ch - '0' ) ) & 0x0F;
}

void callback(char* topic, byte* payload, unsigned int length) {
  payload[length] = '\0';
  String strTopic = String(topic);
  String strPayload = String((char*)payload);
  ///////////
  if (strTopic == "myhome/Conditioner/Set_Temp"){
    set_tmp = strPayload.toInt()-16;
    if (set_tmp >= 0 && set_tmp <= 30){
      data[B_SET_TMP] = set_tmp;      
    }
  }
  //////////
  if (strTopic == "myhome/Conditioner/Mode"){
     if (strPayload == "smart"){
      data[B_MODE] = 0; 
    }
    if (strPayload == "cool"){
        data[B_MODE] = 1;
    }
    if (strPayload == "heat"){
        data[B_MODE] = 2; 
    }
    if (strPayload == "vent"){
        data[B_MODE] = 3;
    }
    if (strPayload == "dry"){
        data[B_MODE] = 4;
    }
  }
  //////////
  if (strTopic == "myhome/Conditioner/Fan_Speed"){
     if (strPayload == "max"){
      data[B_FAN_SPD] = 0; 
    }
    if (strPayload == "mid"){
        data[B_FAN_SPD] = 1;
    }
    if (strPayload == "min"){
        data[B_FAN_SPD] = 2; 
    }
    if (strPayload == "auto"){
        data[B_FAN_SPD] = 3; 
    }
  }
  ////////
  if (strTopic == "myhome/Conditioner/Swing"){
     if (strPayload == "off"){
      data[B_SWING] = 0; 
    }
    if (strPayload == "ud"){
        data[B_SWING] = 1;
    }
    if (strPayload == "lr"){
        data[B_SWING] = 2; 
    }
    if (strPayload == "all"){
        data[B_SWING] = 3; 
    }
  }
  ////////
  if (strTopic == "myhome/Conditioner/Lock_Remote"){
     if (strPayload == "true"){
      data[B_LOCK_REM] = 80;
    }
    if (strPayload == "false"){
        data[B_LOCK_REM] = 0;
    }
  }
  ////////
  if (strTopic == "myhome/Conditioner/Power"){
     if (strPayload == "off" || strPayload == "false" || strPayload == "0"){
      SendData(off, sizeof(off)/sizeof(byte));
      return;
    }
    if (strPayload == "on" || strPayload == "true" || strPayload == "1"){
      SendData(on, sizeof(on)/sizeof(byte));
      return;
    }
    if (strPayload == "quiet"){
        data[B_POWER] = 9;
    }
  }
  ////////
  if (strTopic == "myhome/Conditioner/RAW"){
    char buf[75];
    char hexbyte[3] = {0};
    strPayload.toCharArray(buf, 75);
    int octets[sizeof(buf) / 2] ;
    for (int i=0; i < 76; i += 2){
      hexbyte[0] = buf[i] ;
      hexbyte[1] = buf[i+1] ;
      data[i/2] = (toHex(hexbyte[0]) << 4) | toHex(hexbyte[1]);
    }
    Serial.write(data, 37);
    client.publish("myhome/Conditioner/RAW", buf);
  }
  
  data[B_CMD] = 0;
  data[9] = 1;
  data[10] = 77;
  data[11] = 95;
  SendData(data, sizeof(data)/sizeof(byte));
}

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if(Serial.available() > 0){
    Serial.readBytes(data, 37);
    while(Serial.available()){
      delay(2);
      Serial.read();
    }
    if (data[36] != inCheck){
      inCheck = data[36];
      InsertData(data, 37);
    }
  }
  
  if (!client.connected()){
    reconnect();
  }
  client.loop();

  long now = millis();
  if (now - prev > 5000) {
    prev = now;
    SendData(qstn, sizeof(qstn)/sizeof(byte)); // 
  }
}


рдИрдПрд╕рдкреА 8266 рдЪрдордХрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд░ рдореЗрдВ рд░рдЦрд╛ред рд╡рд┐рд╖рдп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ MQTT рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб


рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдПрдпрд░ рдХрдВрдбреАрд╢рдирд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ред
рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб

рдПрдХ рд╡реЗрдм рдкреЗрдЬ рд╕реЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЙрдЗрд╕ рдХрдорд╛рдВрдб рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА IOBroker рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА ред
рдПрдХ рд▓рд╛рдЧрдд рдкрд░, рдирдП рдореЙрдбреНрдпреВрд▓ рдХреА рд▓рд╛рдЧрдд рд▓рдЧрднрдЧ 200 рд░реВрдмрд▓ рд╣реИред


рдкрд╣рд▓рд╛ рднрд╛рдЧ - рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо, рд╢реБрд░реБрдЖрддред
рднрд╛рдЧ рджреЛ - рдмрд╛рдерд░реВрдо рдЖрдЧрдВрддреБрдХ рдХрд╛рдЙрдВрдЯрд░

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


All Articles