рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рд╣реИрдмрд░ рдкрд░ "DIY рдпрд╛ рдбреВ рдЗрдЯ рдпреЛрд░рд╕реЗрд▓реНрдл" рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЖрдЬ рдХрд╛ рд▓реЗрдЦ TTP223 рдЪрд┐рдк рдкрд░ рдЯрдЪ рд╕реНрд╡рд┐рдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ | рдбреЗрдЯрд╛ рд╢реАрдЯ. рд╕реНрд╡рд┐рдЪ nRF52832 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ | рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдбреЗрдЯрд╛ рд╢реАрдЯ, рдПрдХ рдореБрджреНрд░рд┐рдд рдПрдВрдЯреАрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ YJ-17103 рдореЙрдбреНрдпреВрд▓ рдФрд░ рдмрд╛рд╣рд░реА MHF4 рдПрдВрдЯреАрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЯрдЪ рд╕реНрд╡рд┐рдЪ CR2430 рдпрд╛ CR2450 рдмреИрдЯрд░реА рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдореЛрдб рдореЗрдВ рдЦрдкрдд 8 рдПрдордП рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд╕реНрд▓реАрдк рдореЛрдб рдореЗрдВ 6 ╬╝A рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдкрд┐рдЫрд▓реЗ рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддрд░рд╣, рдпрд╣ рднреА рдПрдХ Arduino рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо Arduino IDE рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди Mysensors рдкреНрд░реЛрдЯреЛрдХреЙрд▓ | рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЧрд┐рдЯрд╣рдм рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝, nRF5 рдмреЛрд░реНрдб GitHub рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдореИрд╕реВрд░ рдореЗрдВ. рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рд╕рдореБрджрд╛рдп рдордВрдЪ - http://forum.mysensors.org, рд░реВрд╕реА рднрд╛рд╖рд╛ рд╕рдореБрджрд╛рдп рдордВрдЪ - http://mysensors.ru/forum/
(рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЕрднрд┐рд▓реЗрдЦ, рд╕реАрд░рд┐рдпрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, API, рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдкрд╛рд░реНрд╕рд░ | рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП (рдпреЛрдЧрджрд╛рди) рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ - рдЕрднрд┐рд▓реЗрдЦ)

рдЯрдЪ рд╕реНрд╡рд┐рдЪ рдмреЛрд░реНрдб рдХреЛ рд▓реЗрдЬрд░ рдЖрдпрд░рдирд┐рдВрдЧ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА (рдПрд▓рдпреВрдЯреА) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдбреАрдкрдЯреНрд░реЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреЛрд░реНрдб рдХреЛ 60x60 рдорд┐рдореА (рдПрдХ рдорд╛рдирдХ рдЧреНрд▓рд╛рд╕ рдкреИрдирд▓ рдХреЗ рдЖрдпрд╛рдо 80x80 рдорд┐рдореА) рдХреЗ рдЖрдпрд╛рдореЛрдВ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдПрдВрдЯреАрдирд╛ рдкрддреНрд░рд┐рдХрд╛ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ "рд▓реЗрди" рд╕реЗрдЯрд┐рдВрдЧ (рдЕрдзрд┐рдХрддрдо рд╢рдХреНрддрд┐) рдХреЗ рд╕рд╛рде рдмреЙрд╢ рдЖрдпрд░рди рдХреЗ рд╕рд╛рде рдПрдХ рджреЛ рддрд░рдлрд╛ рдлрд╝реЙрдЗрд▓ рдлрд╛рдЗрдмрд░рдЧреНрд▓рд╛рд╕ рдмреЛрд░реНрдб 1.5 рдорд┐рдореА, 35╬╝m (рджреВрд╕рд░реЗ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ) рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдирдХрд╝реНрдХрд╝рд╛рд╢реА рдлреЗрд░рд┐рдХ рдХреНрд▓реЛрд░рд╛рдЗрдб рдХреЗ рдШреЛрд▓ рд╕реЗ рдХреА рдЧрдИ, рдЬреЛ рдкрд╣рд▓реЗ 1.5 рдЪрдореНрдордЪ рдкреНрд░рддрд┐ 250 рдорд┐рд▓реАрд▓реАрдЯрд░ рдЧрд░реНрдо рдкрд╛рдиреА рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 15 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧрд╛ред
рдЗрдВрдЯрд░рд▓реЗрдпрд░ рд╡рд┐рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдмреИрдЯрд░реА рд╣реЛрд▓реНрдбрд░ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЗрджреЛрдВ рдХреА рдбреНрд░рд┐рд▓рд┐рдВрдЧ DREMEL 3000 рдбреНрд░рд┐рд▓ рд╕реНрдЯреИрдВрдб рдкрд░ рд▓рдЧреЗ DREMEL 220 рдорд┐рдиреА-рдбреНрд░рд┐рд▓ рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рдереАред рдЗрдВрдЯрд░рд▓реЗрдпрд░ рд╡рд┐рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЫреЗрдж 0,4 рдорд┐рдореА рдбреНрд░рд┐рд▓ рдХреЗ рд╕рд╛рде рдбреНрд░рд┐рд▓ рдХрд┐рдП рдЧрдП рдереЗ, рдмреИрдЯрд░реА рд╣реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдЫреЗрдж 1,1 рдорд┐рдореА рдбреНрд░рд┐рд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП рдереЗ . рдмреЛрд░реНрдб рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЯреНрд░рд┐рдорд┐рдВрдЧ DREMEL 540 рдЕрдЯреИрдЪрдореЗрдВрдЯ (рдХрдЯрд┐рдВрдЧ рд╕рд░реНрдХрд▓ d = 32.0 рдорд┐рдореА) рдХреЗ рд╕рд╛рде рдЙрд╕реА рдорд┐рдиреА-рдбреНрд░рд┐рд▓ рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рдереАред рдХрд╛рдЯ-рдЫрд╛рдБрдЯ рдПрдХ рд╢реНрд╡рд╛рд╕рдпрдВрддреНрд░ рдореЗрдВ рдХреА рдЧрдИ рдереАред
рдирдХрд╝реНрдХрд╝рд╛рд╢реАрджрд╛рд░ рдмреЛрд░реНрдб рдХреА рдЯрд┐рдирд┐рдВрдЧ рдПрдХ рдЬрд▓реАрдп рдШреЛрд▓ (рдкреНрд░рддрд┐ 1 рдорд┐рд▓реАрд▓реАрдЯрд░ рдкрд╛рдиреА рдореЗрдВ 300 рдЪрдореНрдордЪ рдХреНрд░рд┐рд╕реНрдЯрд▓реАрдХреГрдд рд╕рд╛рдЗрдЯреНрд░рд┐рдХ рдПрд╕рд┐рдб) рдореЗрдВ рдЧреБрд▓рд╛рдм рдорд┐рд╢реНрд░ рдзрд╛рддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЧрдИ рдереАред

рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рд▓рдЧрд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЗрдВрдЯрд░рд▓реЗрдпрд░ рд╡рд┐рдЕрд╕ рдХреЗ рд▓рд┐рдП рдЫреЗрдж рдореЗрдВ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░ (рдЯрд┐рдирдпреБрдХреНрдд, 0.4 рдорд┐рдореА рд╡реНрдпрд╛рд╕) рдореЗрдВ рд╡реНрдпрддреАрдд рд╣реБрдЖред

рдмреЛрд░реНрдб рдХреЛ рдлреНрд▓рдХреНрд╕ рдСрдл рдПрдпрд░реЛрд╕реЛрд▓ рдХреНрд▓реАрдирд░ рд╕реЗ рдзреЛрдпрд╛ рдЧрдпрд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдбрд┐рд╡рд╛рдЗрд╕ рдмреЙрдбреА рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рддреНрд░рд┐-рдЖрдпрд╛рдореА рдХрдВрдкреНрдпреВрдЯрд░-рдПрдбреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЗрд╕ рдХрд╛ рдЖрдпрд╛рдо 78,5 рдорд┐рдореА X 78,5 рдорд┐рдореА X 12 рдорд┐рдореАред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

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

Aliexpress рдХреЗ рдЧреНрд▓рд╛рд╕ рдкреИрдирд▓ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд┐рдкрдХреЗ рд╣реБрдП рдкреНрд▓рд╛рд╕реНрдЯрд┐рдХ рдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рдмреЗрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ; рдлреНрд░реЗрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдореИрдВрдиреЗ рдЧреНрд▓рд╛рд╕ рдкреИрдирд▓ рдХреЛ рдирд┐рдпрдорд┐рдд рд╣реЗрдЕрд░ рдбреНрд░рд╛рдпрд░ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЧрд░реНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдПрд▓рдИрдбреА рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдбрд┐рдлреНрдпреВрдЬрд╝рд░ рдРрдХреНрд░реЗрд▓рд┐рдХ рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓рд╛ 3M 9088-200 рдХреЗ рд╕рд╛рде рджреЛ рддрд░рдлрд╛ рдЯреЗрдк рд╕реЗ рдмрдирд╛ рдерд╛ред рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рд░реЛрд╢рдиреА рдХреЗ рд▓рд┐рдП рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд╛рдордЧреНрд░рд┐рдпрд╛рдВ рдереАрдВ, рдЪреАрдиреА рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓рд╛ рдЯреЗрдк рдФрд░ рдШрд░реЗрд▓реВ рдХрдВрдкрдиреА рд▓реНрдпреВрдорд┐рдиреЛрдлреЛрд░ рд╕реЗ рдЯреЗрдк рдореЗрдВ рдХрд╛рдЯрд╛ рдЧрдпрд╛ рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рдЧрдЬред рдЪреБрдирд╛рд╡ рдПрдХ рдШрд░реЗрд▓реВ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореЗрд░реА рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдЕрдзрд┐рдХ рдЪрдордХреАрд▓рд╛ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрдордХрддрд╛ рд░рд╣рд╛ред рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рд░рдВрдЧрджреНрд░рд╡реНрдп рд╡рд╛рд▓реЗ рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдХреЛ 3M 9088-200 рджреЛ рддрд░рдлрд╛ рдЯреЗрдк рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ рдкрд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЧреНрд▓рд╛рд╕ рдХреЛ 3M VHB 4910 рдРрдХреНрд░реЗрд▓рд┐рдХ рдЪрд┐рдкрдХрдиреЗ рд╡рд╛рд▓реЗ рджреЛ рддрд░рдлрд╛ рдЯреЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рд┐рдЪ рдмреЙрдбреА рд╕реЗ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдХрд╡рд░ рдХреЛ рдПрдХ рд╕реНрдХреНрд░реВ M 1,4 X 5 рдорд┐рдореА рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдХреАрдордд 890 рд░реВрдмрд▓ рдереАред

рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рднрд╛рдЧ рдЖрдпрд╛ред рдХреБрдЫ рджрд┐рдХреНрдХрддреЗрдВ рдереАрдВ. рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ TTP223 рд╕реЗрдВрд╕рд░ рдЪрд┐рдкреНрд╕ рд╕реНрдерд┐рд░ 3.3V рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рд╕реНрдЪрд╛рд░реНрдЬ рдмреИрдЯрд░реА рд╕реЗ рд╕реАрдзреЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд▓рдЧрднрдЧ 2.5v рдХреА рдмрд┐рдЬрд▓реА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╕рд╛рде рд╣реА рдореИрд╕реВрд░ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд "рдбреНрд░рд╛рдбрд╛рдЙрди" рдХреЗ рдмрд╛рдж, TTP223 рдорд╛рдЗрдХреНрд░реЛрдХреНрд░рд┐рдХрд┐рдЯ (рдЕрдВрд╢рд╛рдВрдХрди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж) рдиреЗ рдПрдордХреЗ рдореЗрдВ рд░реБрдХрд╛рд╡рдЯ рдкреИрджрд╛ рдХрд░ рджреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рдХреНрд░рд┐рдп рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдерд╛ред

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

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рджреЗрдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдореИрд╕реЗрдВрд╕рд░реНрд╕ рдореЗрдВ рд╕реНрдХреЗрдЪ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд▓реЗрдВредvoid before()
{
// ╨Ф╨╛╨┐╨╛╨╗╨╜╨╕╤В╨╡╨╗╤М╨╜╨░╤П ╤Д╤Г╨╜╨║╤Ж╨╕╤П, ╨╡╤Б╨╗╨╕ ╤Б╤А╨░╨▓╨╜╨╕╨▓╨░╤В╤М ╤Б╨╛ ╤Б╤В╨░╨╜╨┤╨░╤А╤В╨╜╨╛╨╣ ╤Б╤В╤А╤Г╨║╤В╤Г╤А╨╛╨╣ ╨Р╤А╨┤╤Г╨╕╨╜╨╛ ╤Б╨║╨╡╤В╤З╨╡╨╣, ╤В╨╛ before() ╤Н╤В╨╛ ╨┐╨╛╨┤╨╛╨▒╨╕╨╡ setup(), ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨░ ╨┐╤А╨╛╨╕╤Б╤Е╨╛╨┤╨╕╤В ╨┤╨╛ ╨╕╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨░╤Ж╨╕╨╕ ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╨╛╨│╨╛ ╤Г╤А╨╛╨▓╨╜╤П Mysensors, ╤А╨╡╨║╨╛╨╝╨╡╨╜╨┤╤Г╨╡╤В╤Б╤П ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А ╨┤╨╗╤П ╨╕╨╜╨╕╤Ж╨╕╨░╨╗╨╕╨╖╨░╤Ж╨╕╨╕ ╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓ SPI
}

void setup()
{

}

void presentation()
{
//╨в╤Г╤В ╨┐╤А╨╛╨╕╤Б╤Е╨╛╨┤╨╕╤В ╨┐╤А╨╡╨╖╨╡╨╜╤В╨░╤Ж╨╕╤П ╨╜╨╛╨┤╤Л ╨╕ ╨╡╨╡ ╤Б╨╡╨╜╤Б╨╛╤А╨╛╨▓ ╨╜╨░ ╨║╨╛╨╜╤В╤А╨╛╨╗╨╡╤А╨╡ ╤З╨╡╤А╨╡╨╖ ╨╝╨░╤А╤И╤А╤Г╤В╨╕╨╖╨░╤В╨╛╤А
sendSketchInfo("Name of my sensor node", "1.0"); // ╨┐╤А╨╡╨╖╨╡╨╜╤В╨░╤Ж╨╕╤П ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П ╨╜╨╛╨┤╤Л, ╨▓╨╡╤А╤Б╨╕╨╕ ╨Я╨Ю
present(CHILD_ID, S_WHATEVER, "Description"); // ╨┐╤А╨╡╨╖╨╡╨╜╤В╨░╤Ж╨╕╤П ╤Б╨╡╨╜╤Б╨╛╤А╨╛╨▓ ╨╜╨╛╨┤╤Л, ╨╛╨┐╨╕╤Б╨░╨╜╨╕╤П ╤Б╨╡╨╜╤Б╨╛╤А╨╛╨▓
}

void loop()
{

}

рдЯрдЪ рд╕реНрд╡рд┐рдЪ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░реАрдХреНрд╖рдг рдХреЛрдб:test_sens.ino
/**
╨в╨Х╨б╨в╨Ю╨Т╨л╨Щ ╨б╨Ъ╨Х╨в╨з ╨б╨Х╨Э╨б╨Ю╨а╨Э╨Ю╨У╨Ю ╨Т╨л╨Ъ╨Ы╨о╨з╨Р╨в╨Х╨Ы╨п ╨б ╨Я╨а╨Х╨а╨л╨Т╨Р╨Э╨Ш╨п╨Ь╨Ш ╨Э╨Р NRF_LPCOMP
*/
bool button_flag;
bool sens_flag;
bool send_flag;
bool detection;
bool nosleep;
byte timer;
unsigned long SLEEP_TIME = 21600000; //6 hours
unsigned long oldmillis;
unsigned long newmillis;
unsigned long interrupt_time;
unsigned long SLEEP_TIME_W;
uint16_t currentBatteryPercent;
uint16_t batteryVoltage = 0;
uint16_t battery_vcc_min = 2400;
uint16_t battery_vcc_max = 3000;

#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 30
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define IRT_PIN 3 //(PORT0, gpio 5)
#include <MySensors.h>
// see https://www.mysensors.org/download/serial_api_20
#define SENS_CHILD_ID 0
#define CHILD_ID_VOLT 254
MyMessage sensMsg(SENS_CHILD_ID, V_VAR1);
//MyMessage voltMsg(CHILD_ID_VOLT, V_VOLTAGE);

void preHwInit() {
sleep(2000);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
pinMode(GREEN_LED, OUTPUT);
digitalWrite(GREEN_LED, HIGH);
pinMode(BLUE_LED, OUTPUT);
digitalWrite(BLUE_LED, HIGH);
pinMode(MODE_PIN, INPUT);
pinMode(SENS_PIN, INPUT);
}

void before()
{
NRF_POWER->DCDCEN = 1;
NRF_UART0->ENABLE = 0;
sleep(1000);
digitalWrite(BLUE_LED, LOW);
sleep(150);
digitalWrite(BLUE_LED, HIGH);
}

void presentation() {
sendSketchInfo("EFEKTA Sens 1CH Sensor", "1.1");
present(SENS_CHILD_ID, S_CUSTOM, "SWITCH STATUS");
//present(CHILD_ID_VOLT, S_MULTIMETER, "Battery");
}

void setup() {
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
sleep(200);
digitalWrite(BLUE_LED, LOW);
sleep(100);
digitalWrite(BLUE_LED, HIGH);
lpComp();
detection = false;
SLEEP_TIME_W = SLEEP_TIME;
pinMode(31, OUTPUT);
digitalWrite(31, HIGH);
/*
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(5);
digitalWrite(GREEN_LED, HIGH);
wait(500);
}
timer = 0;
*/
sleep(7000);
while (timer < 3) {
timer++;
digitalWrite(GREEN_LED, LOW);
sleep(15);
digitalWrite(GREEN_LED, HIGH);
sleep(85);
}
timer = 0;
sleep(1000);
}

void loop() {

if (detection) {
if (digitalRead(MODE_PIN) == 1 && button_flag == 0 && digitalRead(SENS_PIN) == 0) {
//back side button detection
button_flag = 1;
nosleep = 1;
}
if (digitalRead(MODE_PIN) == 1 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
digitalWrite(RED_LED, LOW);
wait(10);
digitalWrite(RED_LED, HIGH);
wait(50);
}
if (digitalRead(MODE_PIN) == 0 && button_flag == 1 && digitalRead(SENS_PIN) == 0) {
nosleep = 0;
button_flag = 0;
digitalWrite(RED_LED, HIGH);
lpComp_reset();
}

if (digitalRead(SENS_PIN) == 1 && sens_flag == 0 && digitalRead(MODE_PIN) == 0) {
//sens detection
sens_flag = 1;
nosleep = 1;
newmillis = millis();
interrupt_time = newmillis - oldmillis;
SLEEP_TIME_W = SLEEP_TIME_W - interrupt_time;
if (send(sensMsg.set(detection))) {
send_flag = 1;
}
}
if (digitalRead(SENS_PIN) == 1 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
if (send_flag == 1) {
while (timer < 10) {
timer++;
digitalWrite(GREEN_LED, LOW);
wait(20);
digitalWrite(GREEN_LED, HIGH);
wait(30);
}
timer = 0;
} else {
while (timer < 10) {
timer++;
digitalWrite(RED_LED, LOW);
wait(20);
digitalWrite(RED_LED, HIGH);
wait(30);
}
timer = 0;
}
}
if (digitalRead(SENS_PIN) == 0 && sens_flag == 1 && digitalRead(MODE_PIN) == 0) {
sens_flag = 0;
nosleep = 0;
send_flag = 0;
digitalWrite(GREEN_LED, HIGH);
sleep(500);
lpComp_reset();
}
if (SLEEP_TIME_W < 60000) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
}
else {
//if (detection == -1) {
SLEEP_TIME_W = SLEEP_TIME;
sendBatteryStatus();
}
if (nosleep == 0) {
oldmillis = millis();
sleep(SLEEP_TIME_W);
}
}

void sendBatteryStatus() {
wait(20);
batteryVoltage = hwCPUVoltage();
wait(2);

if (batteryVoltage > battery_vcc_max) {
currentBatteryPercent = 100;
}
else if (batteryVoltage < battery_vcc_min) {
currentBatteryPercent = 0;
} else {
currentBatteryPercent = (100 * (batteryVoltage - battery_vcc_min)) / (battery_vcc_max - battery_vcc_min);
}

sendBatteryLevel(currentBatteryPercent, 1);
wait(2000, C_INTERNAL, I_BATTERY_LEVEL);
//send(powerMsg.set(batteryVoltage), 1);
//wait(2000, 1, V_VAR1);
}

void lpComp() {
NRF_LPCOMP->PSEL = IRT_PIN;
NRF_LPCOMP->ANADETECT = 1;
NRF_LPCOMP->INTENSET = B0100;
NRF_LPCOMP->ENABLE = 1;
NRF_LPCOMP->TASKS_START = 1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}

void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR = B0100;
}
}

void r_lpComp() {
NRF_LPCOMP->INTENSET = B0100;
}

#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event)
event = 0;
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif

extern "C" {
void LPCOMP_IRQHandler(void) {
detection = true;
NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP);
NRF_LPCOMP->EVENTS_UP = 0;
MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2);
}
}

void lpComp_reset () {
s_lpComp();
detection = false;
NRF_LPCOMP->EVENTS_UP = 0;
r_lpComp();
}

MyBoardNRF5.cpp
#ifdef MYBOARDNRF5
#include <variant.h>

/*
* Pins descriptions. Attributes are ignored by arduino-nrf5 variant.
* Definition taken from Arduino Primo Core with ordered ports
*/
const PinDescription g_APinDescription[]=
{
{ NOT_A_PORT, 0, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ NOT_A_PORT, 1, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // LFCLK
{ PORT0, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A0, PWM4, NOT_ON_TIMER},
{ PORT0, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A1, PWM5, NOT_ON_TIMER},
{ PORT0, 4, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A2, PWM6, NOT_ON_TIMER},
{ PORT0, 5, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A3, PWM7, NOT_ON_TIMER},
{ PORT0, 6, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT3
{ PORT0, 7, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT4
{ PORT0, 8, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM10, NOT_ON_TIMER}, //USER_LED
{ PORT0, 9, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC1
{ PORT0, 10, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // NFC2
{ PORT0, 11, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TX
{ PORT0, 12, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // RX
{ PORT0, 13, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA
{ PORT0, 14, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL
{ PORT0, 15, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SDA1
{ PORT0, 16, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // SCL1
{ PORT0, 17, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP4
{ PORT0, 18, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // TP5
{ PORT0, 19, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT2
{ PORT0, 20, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 21, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT1
{ PORT0, 22, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM9, NOT_ON_TIMER},
{ PORT0, 23, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM8, NOT_ON_TIMER},
{ PORT0, 24, PIO_DIGITAL, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER}, // INT
{ PORT0, 25, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //RED_LED
{ PORT0, 26, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //GREEN_LED
{ PORT0, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM11, NOT_ON_TIMER}, //BLUE_LED
{ PORT0, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A4, PWM3, NOT_ON_TIMER},
{ PORT0, 29, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A5, PWM2, NOT_ON_TIMER},
{ PORT0, 30, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A6, PWM1, NOT_ON_TIMER},
{ PORT0, 31, PIO_DIGITAL, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), ADC_A7, PWM0, NOT_ON_TIMER}
};

// Don't remove this line
#include <compat_pin_mapping.h>

#endif

MyBoardNRF5.h
#ifndef _MYBOARDNRF5_H_
#define _MYBOARDNRF5_H_

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// Number of pins defined in PinDescription array
#define PINS_COUNT (32u)
#define NUM_DIGITAL_PINS (32u)
#define NUM_ANALOG_INPUTS (8u)
#define NUM_ANALOG_OUTPUTS (8u)

/*
* LEDs
*
* This is optional
*
* With My Sensors, you can use
* hwPinMode() instead of pinMode()
* hwPinMode() allows to use advanced modes like OUTPUT_H0H1 to drive LEDs.
* https://github.com/mysensors/MySensors/blob/development/drivers/NRF5/nrf5_wiring_constants.h
*
*/
#define PIN_LED1 (16)
#define PIN_LED2 (15)
#define PIN_LED3 (17)
#define RED_LED (PIN_LED1)
#define GREEN_LED (PIN_LED2)
#define BLUE_LED (PIN_LED3)
#define INTERRUPT_PIN (5)
#define MODE_PIN (25)
#define SENS_PIN (27)

/*
* Analog ports
*
* If you change g_APinDescription, replace PIN_AIN0 with
* port numbers mapped by the g_APinDescription Array.
* You can add PIN_AIN0 to the g_APinDescription Array if
* you want provide analog ports MCU independed, you can add
* PIN_AIN0..PIN_AIN7 to your custom g_APinDescription Array
* defined in MyBoardNRF5.cpp
*/
static const uint8_t A0 = ADC_A0;
static const uint8_t A1 = ADC_A1;
static const uint8_t A2 = ADC_A2;
static const uint8_t A3 = ADC_A3;
static const uint8_t A4 = ADC_A4;
static const uint8_t A5 = ADC_A5;
static const uint8_t A6 = ADC_A6;
static const uint8_t A7 = ADC_A7;

/*
* Serial interfaces
*
* RX and TX are required.
* If you have no serial port, use unused pins
* CTS and RTS are optional.
*/
#define PIN_SERIAL_RX (11)
#define PIN_SERIAL_TX (12)

#ifdef __cplusplus
}
#endif

#endif

рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдЯрдЪ рдмрдЯрди рдФрд░ рдПрдХ рдЯреИрдХ рдмрдЯрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЯреИрдХреНрдЯ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд┐рд╕ рдореЛрдб, рдУрд╡рд░-рдж-рдПрдпрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЛрдб рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд░реАрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрдЯрди рдореЗрдВ рдЖрдпрд░рди рдПрдВрдЯреА-рдмрд╛рдЙрдВрд╕ рдлреАрдЪрд░ рд╣реИред рдХреИрдкреЗрд╕рд┐рдЯрд┐рд╡ рд╕реЗрдВрд╕рд░ рдХреА рд▓рд╛рдЗрди рдФрд░ рдЯреИрдХ рдмрдЯрди рдХреА рд▓рд╛рдЗрди рд╢реЛрдЯреНрдХреА рдбрд╛рдпреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдирд╛рд▓реЙрдЧ рдкрд┐рди p0.05 рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреИрдкреЗрд╕рд┐рдЯрд┐рд╡ рд╕реЗрдВрд╕рд░ рдФрд░ рдЯреИрдХ рдмрдЯрди рд╕реЗ рдПрдордХреЗ рдкрд┐рди p0.25 рдФрд░ p0.27 рдХреА рд▓рд╛рдЗрдиреЗрдВ рднреА рд╣реЛрддреА рд╣реИрдВ рдкрд┐рди рдкреА0.05. 0.05 рдкрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрдврд╝рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП .XNUMXред рдкрд┐рди pXNUMX рдкрд░, EVENTS_UP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреБрд▓рдирд┐рддреНрд░ (NRF_LPCOMP) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реНрдпрд╡рдзрд╛рди рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд▓реА рдпрд╣рд╛рдВ ╨╕ рдпрд╣рд╛рдВ.

рд╕реНрд╡рд┐рдЪ рдХреЛ рдореИрд╕реЗрдВрд╕рд░реНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рдХрдВрдЯреНрд░реЛрд▓рд░ рдорд╛рдЬрд░реНрдбреЛрдореЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЙрддреНрддрд░ рджреАрдЬрд┐рдП)

рд╕реНрдЯреЗрдЯрд╕рдЕрдкрдбреЗрдЯ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП PHP рдХреЛрдб

if (getGlobal("MysensorsButton01.status")==1) {
if (getGlobal('MysensorsRelay04.status') == 0) {
setGlobal('MysensorsRelay04.status', '1');
} else if (getGlobal('MysensorsRelay04.status') == 1) {
setGlobal('MysensorsRelay04.status', '0');
} 
}

рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рджреЗрдЦреЗрдВ рд░рд┐рдЬрд▓реНрдЯ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

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

рджреЗрдЦрдирд╛рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреАрдереВрдм - github.com/smartboxchannel/EFEKTA_WIRELESS_TOUCH_SWITCH

рд░реВрд╕реА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рд╛рдЗрдЯ рдореИрд╕реВрд░

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдорд╛рдпрд╕реЗрдВрд╕рд░реНрд╕ - рдореИрд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди, рдЯрд┐рдкреНрд╕, рдЯреНрд░рд┐рдХреНрд╕, рдмреЛрд░реНрдб рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, Arduino IDE рдореЗрдВ atmega 328, stm32, nRF5 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ - @mysensors_rus

рдХреБрдЫ рддрд╕реНрд╡реАрд░реЗрдВрдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рдЕрддрд┐рд░рд┐рдХреНрдд рдлреНрд▓реЛрд░реЛрд╕реЗрдВрдЯ рдмреИрдХрд▓рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд╛рдпрд░рд▓реЗрд╕ рдЯрдЪ рд╕реНрд╡рд┐рдЪ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ