рдЙрдиреНрдирдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдпрд░рд▓реЗрд╕ рд╕реЗрдВрд╕рд░

рдореИрдВ рд╣реЗрдмрд░ рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "DIY рдпрд╛ рд╕реНрд╡рдпрдВ рдХрд░реВрдБ" рдЕрдиреБрднрд╛рдЧ рдХреЗ рдкрд╛рдардХреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдБ! рдФрд░ рдЕрдЧрд░ рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рддреЛ рдореИрдВ рдПрдХ рдЕрд░реНрджреАрдиреЛ рд╣реВрдВ, рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ... рдореИрдВ рд▓рд┐рдлреНрдЯ рдХреИрдм рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ рд╣реВрдВ :)ред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореИрдВ рдПрдХ рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рд╕реЗрдВрд╕рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ рд╕реЗрдВрд╕рд░, рдореЗрд░реЗ рдмрд╛рдХреА рд╢рд┐рд▓реНрдкреЛрдВ рдХреА рддрд░рд╣, рдЬреЛ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдиреЙрд░реНрдбрд┐рдХ рд╕реЗрдореАрдХрдВрдбрдХреНрдЯрд░ рдХреЗ рдЪрд┐рдкреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╕реЗрдВрд╕рд░ рдиреЗ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдПрдХ nRF52840 рдЪрд┐рдк рдкрд░ рдФрд░ рджреВрд╕рд░рд╛ nRF52811 рдЪрд┐рдк рдкрд░ред



рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП nRF52840 рдЪрд┐рдк рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ E73_2G4M08S1C рдХрдВрдкрдиреА EBYTE рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , verciya рдЪрд┐рдк рдореЙрдбреНрдпреВрд▓ nRF52811 MC50SFA рдХрдВрдкрдиреА MiNEW рдХреЗ рд▓рд┐рдП ред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╕рд╕реНрддреА nRF52811 рдЪрд┐рдкреНрд╕ рдХреА рдЦреЛрдЬ рдЕрднреА рднреА рдПрдХ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рдерд╛ред рд▓реЗрдХрд┐рди рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЗрд╕ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, MINEW рд╕реЗ nRF52811 рдЪрд┐рдк рдкрд░ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд┐рд▓рд╛рдП рдЧрдП рдЪрд┐рдкреНрд╕ рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдиреНрд╕ nRF52810 рдФрд░ nRF52832 рд╣реИрдВред



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

рд╕рд░реНрдХрд┐рдЯ рдЖрд░реЗрдЦ:


Arduino рдпреЛрдЬрдирд╛ :)



рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рдХреЗ рдЗрд╕ рд╕рдВрд╡реЗрджрдХ рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкрддрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рдкрд░ рдХреНрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рд╕реЗрдВрд╕рд░ рднреА рдЕрдлреНрд░реАрдХрд╛ рдореЗрдВ рдЙрджреНрдШрд╛рдЯрди рдФрд░ рд╕рдорд╛рдкрди рд╕реЗрдВрд╕рд░ рд╣реИред рд╕рдмрд╕реЗ "рдЙрдиреНрдирдд" рд╕рдорд╛рдзрд╛рди REDMOND рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЙрдирдХреЗ BLE рд╕реЗрдВрд╕рд░ рдореЗрдВ (рд╡реИрд╕реЗ, рдиреЙрд░реНрдбрд┐рдХ рдХреА рдПрдХ рдЪрд┐рдк рдкрд░ рднреА), рд░реАрдб рд╕реНрд╡рд┐рдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, TTP223 рдЪрд┐рдк рдкрд░ рдПрдХ рдЯреЗрдореНрдкрд░реЗрдЪрд░ рд╕реЗрдВрд╕рд░ рдФрд░ рдПрдХ рдХреИрдкреЗрд╕рд┐рдЯрд┐рд╡ рдмрдЯрди рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ рдореБрдЭреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рджрд░рд╡рд╛рдЬреЗ рдпрд╛ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдкрд╛рд╕ рддрд╛рдкрдорд╛рди рд░реАрдбрд┐рдВрдЧ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ (рдФрд░ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдЪрд┐рдк рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ) рдФрд░ рдХрд┐рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЦрд┐рдбрд╝рдХреА рдпрд╛ рджрд░рд╡рд╛рдЬреЗ рдкрд░ рд▓рдЧреЗ рд╕реЗрдВрд╕рд░ рдкрд░ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЗрдирдкреБрдЯ :) рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдореБрдЦреНрдп рдЪрдпрди рдорд╛рдирджрдВрдб рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдВрд╕рд░ рдХреА рдЦрдкрдд рдереА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реЗрдВрд╕рд░ рдореЗрдВ рд╕реАрдЖрд░ 2032 рдмреИрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рдЬреЗрддрд╛ рджреЛ рд╕реЗрдВрд╕рд░, LIS2DW12 рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдФрд░ DRV5032FB рдЪреБрдВрдмрдХреАрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗрдВрд╕рд░ рдереЗред

LIS2DW12 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдХрд┐рдлрд╛рдпрддреА рддреНрд╡рд░рдХ рд╣реИред рдХрдо рдЦрдкрдд рдореЛрдб рдореЗрдВ, рдпрд╣ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ 1 ╬╝A ( рдбреЗрдЯрд╛рд╢реАрдЯ ) рдЦрдкрдд рдХрд░рддрд╛ рд╣реИ ред DRV5032FB рдЪреБрдВрдмрдХреАрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗрдВрд╕рд░ рдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЦрдкрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреА рджрд┐рдЦрд╛рдпрд╛ред рдЗрд╕рдХреА рдЦрдкрдд рд▓рдЧрднрдЧ 500nA ( рдбреЗрдЯрд╛рд╢реАрдЯ ) рд╣реИред

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



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣рд┐рд╕реНрд╕рд╛ рдореЗрдиреНрд╕реЗрдВрд╕рд░реНрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреЛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдПред рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдиреЙрд░реНрдбрд┐рдХ рдЪрд┐рдкреНрд╕ (nRF24 (+ atmega 328, stm32f1), nRF51 рдФрд░ nRF52) рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдпреЗрдирд╕рд░реНрд╕ рдиреЙрд░реНрдбрд┐рдХ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ - рдПрдирд╣реЙрдХ ShockBurst (ESB) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ nRF24 рдФрд░ nRF51-52 рдкрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕рдВрдЧрддрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддреА рд╣реИред рдореЗрдиреНрд╕реЗрдВрд╕рд░реНрд╕ рдПрдХ рдЦреБрд▓реА рдЕрд░реБрдбрд┐рдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрдИ рджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛ рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди nRF52 рдЪрд┐рдкреНрд╕ рдкрд░ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ Maysensors (ESB) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЬрд╝рд┐рдЧрдмреА рдпрд╛ рдмреАрдПрд▓рдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪрд┐рдкреНрд╕ рдорд▓реНрдЯреА-рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВред ... рдмреАрдПрд▓рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЦреЛрджреВрдВрдЧрд╛, рдЬреЛ рдПрдХ рд╢рд╛рдирджрд╛рд░ Arduino NANO 33 BLE E73_2G4M08S1C рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдореЗрд░реЗ рдиреИрдиреЛ 33 рдХреА рд▓рд╛рдЧрдд $ 4 рд╣реИред



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

рдореИрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдСрдкрд░реЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдореЛрдб рдореЗрдВ, рд╕реЗрдВрд╕рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдмрд╛рд╣рд░реА рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдкрдиреЗ рдореЗрдВ рд╣реИ, рдХреЗрд╡рд▓ 4 рд╡реНрдпрд╡рдзрд╛рдиред рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рджреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ; рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрд╡рд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рджрд░рд╡рд╛рдЬрд╛ рдЦреБрд▓рд╛ рд╣реИ, рддреЛ рд╕рджрдореЗ рд╕реЗрдВрд╕рд░ рдФрд░ рдЪреБрдВрдмрдХреАрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рдзрд╛рди рдЕрдХреНрд╖рдо рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рджрд░рд╡рд╛рдЬрд╛ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ, рдЗрдирдореЗрдВ рд╕реЗ рджреЛ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рдзрд╛рди рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЗрд╕ рддрдереНрдп рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдЙрджреНрдШрд╛рдЯрди рдХреЗ рджреМрд░рд╛рди рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдереАрдВ рдЬрдм рд░реАрдб рд╕реНрд╡рд┐рдЪ рд╕реЗ рдкрд╣рд▓реЗ рд╢реЙрдХ рд╕реЗрдВрд╕рд░ рдЪрд╛рд▓реВ рд╣реЛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд▓реЙрдХ рдЦреЛрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрдВрдкрди рд╕реЗ рдЖрдпрд╛ рдерд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЙрдЪреНрдЪ рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рджрд░реНрдЬ рдХреА рдЧрдИ рдереАред

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

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











Arduino IDE рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рд╕реИрдВрдбрдкреАрдорд┐рд╕реНрдЯреНрд░реА / рдЕрд░рдбреНрдпреВрдиреЛ-рдПрдирдЖрд░рдПрдл 5
рдорд╛рдЗрд╕реЗрдиреНрд╕рд░реНрд╕ / рдЕрд░реБрдбрд┐рдиреЛрдмреЛрд░реНрдбреНрд╕
рд▓рд╛рдЗрдмреНрд░реЗрд░реА:

рдореИрд╕реЗрдВрд╕рд░
LIS2DWR

рдкреНрд░реЛрдЧреНрд░рд╛рдорд░: рд╕реЗрдВрдЯ-рд▓рд┐рдВрдХ, рдЬреЗ-рд▓рд┐рдВрдХред

рд╕реНрдХреЗрдЪ рдХрд╛рд░реНрдпрдХреНрд░рдо
bool configMode = 0;
int8_t int_status = 0;
bool door_status = 1;
bool check;
bool magnet_status = 1;
bool nosleep = 0;
bool button_flag = 0;
bool onoff = 1;
bool flag_update_transport_param;
bool flag_sendRoute_parent;
bool flag_no_present;
bool flag_nogateway_mode;
bool flag_find_parent_process;
bool flag_fcount;
bool Ack_TL;
bool Ack_FP;
bool PRESENT_ACK;
bool send_a;
bool batt_flag;
byte conf_vibro_set = 2;
byte err_delivery_beat;
byte problem_mode_count;
uint8_t  countbatt = 0;
uint8_t batt_cap;
uint8_t old_batt_cap = 100;
uint32_t BATT_TIME;
uint32_t SLEEP_TIME = 10800000;
uint32_t SLEEP_NOGW = 60000;
uint32_t oldmillis;
uint32_t newmillis;
uint32_t previousMillis;
uint32_t lightMillisR;
uint32_t configMillis;
uint32_t interrupt_time;
uint32_t SLEEP_TIME_W;
uint32_t axel_time;
uint32_t axel_time0;
int16_t myid;
int16_t mypar;
int16_t old_mypar = -1;
bool vibro = 1;
uint32_t PIN_BUTTON_MASK;
uint32_t AXEL_INT_MASK;
uint32_t GERKON_INT_MASK;
uint32_t MAGNET_INT_MASK;
float ODR_1Hz6_LP_ONLY = 1.6f;
float ODR_12Hz5 = 12.5f;
float ODR_25Hz = 25.0f;
float ODR_50Hz = 50.0f;
float ODR_100Hz = 100.0f;
float ODR_200Hz = 200.0f;
volatile byte axelIntStatus = 0;
volatile byte gerkIntStatus = 0;
volatile byte magIntStatus = 0;
volatile byte buttIntStatus = 0;
uint16_t batteryVoltage;
int16_t linkQuality;
int16_t old_linkQuality;

//#define MY_DEBUG
#ifndef MY_DEBUG
#define MY_DISABLED_SERIAL
#endif
#define MY_RADIO_NRF5_ESB
int16_t mtwr;
#define MY_TRANSPORT_WAIT_READY_MS (mtwr)
#define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX)

#include <MySensors.h>

extern "C" {
#include "app_gpiote.h"
#include "nrf_gpio.h"
}
#define APP_GPIOTE_MAX_USERS 1
static app_gpiote_user_id_t m_gpiote_user_id;

#include <LIS2DW12Sensor.h>
LIS2DW12Sensor *lis2;

#define DWS_CHILD_ID 0
#define V_SENS_CHILD_ID 1
#define M_CHILD_ID 2
#define LEVEL_SENSIV_V_SENS_CHILD_ID 230
#define SIGNAL_Q_ID 250

MyMessage dwsMsg(DWS_CHILD_ID, V_TRIPPED);
MyMessage mMsg(M_CHILD_ID, V_TRIPPED);
MyMessage vibroMsg(V_SENS_CHILD_ID, V_TRIPPED);
MyMessage conf_vsensMsg(LEVEL_SENSIV_V_SENS_CHILD_ID, V_VAR1);
#define SN "DOOR & WINDOW SENS"
#define SV "1.12"


void before() {
  board_Init();
  happy_init();
  delay(500);
  batteryVoltage = hwCPUVoltage();
  digitalWrite(BLUE_LED, LOW);
}


void presentation()
{
  NRF_POWER->DCDCEN = 0;
  wait(10);

  check = sendSketchInfo(SN, SV);
  wait(30);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(30);
    check = sendSketchInfo(SN, SV);
    wait(30);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = present(DWS_CHILD_ID, S_DOOR, "STATUS RS SENS");
  wait(40);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(40);
    check = present(DWS_CHILD_ID, S_DOOR, "STATUS RS SENS");
    wait(40);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = present(V_SENS_CHILD_ID, S_VIBRATION, "STATUS SHOCK SENS");
  wait(50);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(50);
    check = present(V_SENS_CHILD_ID, S_VIBRATION, "STATUS SHOCK SENS");
    wait(50);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = present(M_CHILD_ID, S_DOOR, "ANTI-MAGNET ALARM");
  wait(60);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(60);
    check = present(M_CHILD_ID, S_DOOR, "ANTI-MAGNET ALARM");
    wait(60);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = present(SIGNAL_Q_ID, S_CUSTOM, "SIGNAL %");
  wait(70);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(70);
    check = present(SIGNAL_Q_ID, S_CUSTOM, "SIGNAL %");
    wait(70);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = present(LEVEL_SENSIV_V_SENS_CHILD_ID, S_CUSTOM, "SENS LEVEL VIBRO");
  wait(80);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(80);
    check = present(LEVEL_SENSIV_V_SENS_CHILD_ID, S_CUSTOM, "SENS LEVEL VIBRO");
    wait(80);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }

  check = send(conf_vsensMsg.set(conf_vibro_set));
  wait(90);
  if (!check) {
    _transportSM.failedUplinkTransmissions = 0;
    wait(90);
    check = send(conf_vsensMsg.set(conf_vibro_set));
    wait(90);
    _transportSM.failedUplinkTransmissions = 0;
  }
  if (check) {
    blinky(1, 1, BLUE_LED);
  } else {
    blinky(1, 1, RED_LED);
  }
  NRF_POWER->DCDCEN = 0;
  wait(10);
}


void setup() {
  digitalWrite(BLUE_LED, HIGH);
  config_Happy_node();
  sensors_Init();
}


void loop() {
  if (flag_update_transport_param == 1) {
    update_Happy_transport();
  }
  if (flag_sendRoute_parent == 1) {
    present_only_parent();
  }
  if (isTransportReady() == true) {
    if (flag_nogateway_mode == 0) {
      if (flag_find_parent_process == 1) {
        find_parent_process();
      }
      if (configMode == 0) {
        if ((axelIntStatus == AXEL_INT) || (buttIntStatus == PIN_BUTTON) || (gerkIntStatus == GERKON_INT) || (magIntStatus == MAGNET_INT)) {
          nosleep = 1;
          newmillis = millis();
          interrupt_time = newmillis - oldmillis;
          BATT_TIME = BATT_TIME - interrupt_time;
          if (BATT_TIME < 60000) {
            BATT_TIME = SLEEP_TIME;
            batteryVoltage = hwCPUVoltage();
            batt_flag = 1;
          }

          if (gerkIntStatus == GERKON_INT) {
            send_Gerkon();
            axel_time = millis();
            nosleep = 0;
          }

          if (magIntStatus == MAGNET_INT) {
            send_Magnet();
            nosleep = 0;
          }

          if (axelIntStatus == AXEL_INT) {
            if (millis() - axel_time0 >= 2000) {
              send_Axel();
              nosleep = 0;
            } else {
              if (digitalRead(GERKON_INT) == LOW) {
                send_Gerkon();
                axel_time = millis();
                nosleep = 0;
              }
            }
          }

          if (buttIntStatus == PIN_BUTTON) {
            if (digitalRead(PIN_BUTTON) == 0 && button_flag == 0) {
              button_flag = 1;
              previousMillis = millis();
              ledsOff();
            }
            if (digitalRead(PIN_BUTTON) == 0 && button_flag == 1) {
              if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 1750)) {
                if (millis() - lightMillisR > 70) {
                  lightMillisR = millis();
                  onoff = !onoff;
                  digitalWrite(BLUE_LED, onoff);
                }
              }
              if ((millis() - previousMillis > 1750) && (millis() - previousMillis <= 2000)) {
                ledsOff();
              }
              if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 3750)) {
                if (millis() - lightMillisR > 50) {
                  lightMillisR = millis();
                  onoff = !onoff;
                  digitalWrite(GREEN_LED, onoff);
                }
              }
              if ((millis() - previousMillis > 3750) && (millis() - previousMillis <= 4000)) {
                ledsOff();
              }
              if ((millis() - previousMillis > 4000) && (millis() - previousMillis <= 5750)) {
                if (millis() - lightMillisR > 30) {
                  lightMillisR = millis();
                  onoff = !onoff;
                  digitalWrite(RED_LED, onoff);
                }
              }
              if (millis() - previousMillis > 5750) {
                ledsOff();
              }
            }

            if (digitalRead(PIN_BUTTON) == 1 && button_flag == 1) {
              if ((millis() - previousMillis <= 1750) && (button_flag == 1))
              {
                ledsOff();
                blinky(2, 2, BLUE_LED);
                button_flag = 0;
                buttIntStatus = 0;
                presentation();
                nosleep = 0;
              }
              if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 3750) && (button_flag == 1))
              {
                ledsOff();
                blinky(2, 2, GREEN_LED);
                configMode = 1;
                button_flag = 0;
                configMillis = millis();
                interrupt_Init(1);
                NRF_POWER->DCDCEN = 0;
                buttIntStatus = 0;
                NRF5_ESB_startListening();
                wait(50);
              }

              if ((millis() - previousMillis > 4000) && (millis() - previousMillis <= 5750) && (button_flag == 1))
              {
                ledsOff();
                blinky(3, 3, RED_LED);
                //new_device();
              }

              if ((((millis() - previousMillis > 1750) && (millis() - previousMillis <= 2000)) || ((millis() - previousMillis > 3750) && (millis() - previousMillis <= 4000)) || ((millis() - previousMillis > 5750))) && (button_flag == 1))
              {
                ledsOff();
                nosleep = 0;
                button_flag = 0;
                buttIntStatus = 0;
              }
            }
          }
        } else {
          batteryVoltage = hwCPUVoltage();
          BATT_TIME = SLEEP_TIME;
          sendBatteryStatus(1);
          nosleep = 0;
        }
      } else {
        if (millis() - configMillis > 30000) {
          blinky(3, 3, GREEN_LED);
          configMode = 0;
          nosleep = 0;
          interrupt_Init(0);
          NRF_POWER->DCDCEN = 1;
          wait(50);
        }
      }
    } else {
      if (buttIntStatus == PIN_BUTTON) {
        if (digitalRead(PIN_BUTTON) == 0 && button_flag == 0) {
          button_flag = 1;
          nosleep = 1;
          previousMillis = millis();
          ledsOff();
        }
        if (digitalRead(PIN_BUTTON) == 0 && button_flag == 1) {
          if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 1750)) {
            if (millis() - lightMillisR > 25) {
              lightMillisR = millis();
              onoff = !onoff;
              digitalWrite(GREEN_LED, onoff);
            }
          }
          if ((millis() - previousMillis > 1750) && (millis() - previousMillis <= 2000)) {
            ledsOff();
          }
          if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 4000)) {
            if (millis() - lightMillisR > 25) {
              lightMillisR = millis();
              onoff = !onoff;
              digitalWrite(RED_LED, onoff);
            }
          }
          if (millis() - previousMillis > 4000) {
            ledsOff();
          }
        }

        if (digitalRead(PIN_BUTTON) == 1 && button_flag == 1) {
          if ((millis() - previousMillis <= 1750) && (button_flag == 1))
          {
            ledsOff();
            blinky(2, 2, BLUE_LED);
            button_flag = 0;
            buttIntStatus = 0;
            check_parent();
            nosleep = 0;
          }
          if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 4000) && (button_flag == 1))
          {
            ledsOff();
            blinky(3, 3, RED_LED);
            //new_device();
          }

          if ((((millis() - previousMillis > 1750) && (millis() - previousMillis <= 2000)) || ((millis() - previousMillis > 4000))) && (button_flag == 1))
          {
            ledsOff();
            nosleep = 0;
            button_flag = 0;
            buttIntStatus = 0;
          }
        }
      } else {
        check_parent();
      }
    }
  }

  if (_transportSM.failureCounter > 0)
  {
    _transportConfig.parentNodeId = loadState(101);
    _transportConfig.nodeId = myid;
    _transportConfig.distanceGW = loadState(103);
    mypar = _transportConfig.parentNodeId;
    nosleep = 0;
    flag_fcount = 1;
    err_delivery_beat = 6;
    happy_node_mode();
    gateway_fail();
  }

  if (nosleep == 0) {
    oldmillis = millis();
    axelIntStatus = 0;
    buttIntStatus = 0;
    gerkIntStatus = 0;
    magIntStatus = 0;
    sleep(SLEEP_TIME_W, false);
    nosleep = 1;
  }
}


void blinky(uint8_t pulses, uint8_t repit, uint8_t ledColor) {
  for (int x = 0; x < repit; x++) {
    if (x > 0) {
      wait(150);
    }
    for (int i = 0; i < pulses; i++) {
      if (i > 0) {
        wait(40);
      }
      digitalWrite(ledColor, LOW);
      wait(10);
      digitalWrite(ledColor, HIGH);
    }
  }
}


void board_Init() {
  pinMode(PIN_BUTTON, INPUT_PULLUP);
  pinMode(MAGNET_INT, INPUT);
  pinMode(GERKON_INT, INPUT);
  pinMode(AXEL_INT, INPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  pinMode(BLUE_LED, OUTPUT);
  ledsOff();
  NRF_POWER->DCDCEN = 1;
  wait(5);
#ifndef MY_DEBUG
  NRF_UART0->ENABLE = 0;
  wait(5);
#endif
  //NRF_NFCT->TASKS_DISABLE = 1;
  // NRF_NVMC->CONFIG = 1;
  // NRF_UICR->NFCPINS = 0;
  // NRF_NVMC->CONFIG = 0;
  // NRF_SAADC ->ENABLE = 0;
  // NRF_PWM0  ->ENABLE = 0;
  // NRF_PWM1  ->ENABLE = 0;
  // NRF_PWM2  ->ENABLE = 0;
  // NRF_TWIM1 ->ENABLE = 0;
  // NRF_TWIS1 ->ENABLE = 0;
  NRF_RADIO->TXPOWER = 8;
  wait(5);

  conf_vibro_set = loadState(230);
  if ((conf_vibro_set > 5) || (conf_vibro_set == 0)) {
    conf_vibro_set = 2;
    saveState(230, conf_vibro_set);
  }

  blinky(1, 1, BLUE_LED);
}


void ledsOff() {
  digitalWrite(RED_LED, HIGH);
  digitalWrite(GREEN_LED, HIGH);
  digitalWrite(BLUE_LED, HIGH);
}


void happy_init() {
  //hwWriteConfig(EEPROM_NODE_ID_ADDRESS, 255); // ******************** checking the node config reset *************************

  if (hwReadConfig(EEPROM_NODE_ID_ADDRESS) == 0) {
    hwWriteConfig(EEPROM_NODE_ID_ADDRESS, 255);
  }
  if (loadState(100) == 0) {
    saveState(100, 255);
  }
  CORE_DEBUG(PSTR("EEPROM NODE ID: %d\n"), hwReadConfig(EEPROM_NODE_ID_ADDRESS));
  CORE_DEBUG(PSTR("USER MEMORY SECTOR NODE ID: %d\n"), loadState(100));

  if (hwReadConfig(EEPROM_NODE_ID_ADDRESS) == 255) {
    mtwr = 0;
  } else {
    mtwr = 11000;
    no_present();
  }
  CORE_DEBUG(PSTR("MY_TRANSPORT_WAIT_MS: %d\n"), mtwr);
}

void no_present() {
  _coreConfig.presentationSent = true;
  _coreConfig.nodeRegistered = true;
}


void interrupt_Init(bool start) {
  //***
  //SET
  //NRF_GPIO_PIN_NOPULL
  //NRF_GPIO_PIN_PULLUP
  //NRF_GPIO_PIN_PULLDOWN
  //***
  nrf_gpio_cfg_input(PIN_BUTTON, NRF_GPIO_PIN_PULLUP);
  nrf_gpio_cfg_input(AXEL_INT, NRF_GPIO_PIN_NOPULL);
  nrf_gpio_cfg_input(GERKON_INT, NRF_GPIO_PIN_NOPULL);
  nrf_gpio_cfg_input(MAGNET_INT, NRF_GPIO_PIN_NOPULL);
  APP_GPIOTE_INIT(APP_GPIOTE_MAX_USERS);
  PIN_BUTTON_MASK = 1 << PIN_BUTTON;
  AXEL_INT_MASK = 1 << AXEL_INT;
  GERKON_INT_MASK = 1 << GERKON_INT;
  MAGNET_INT_MASK = 1 << MAGNET_INT;
  //  app_gpiote_user_register(p_user_id, pins_low_to_high_mask, pins_high_to_low_mask, event_handler)
  if (start == 0) {
    app_gpiote_user_register(&m_gpiote_user_id, AXEL_INT_MASK | GERKON_INT_MASK, GERKON_INT_MASK | MAGNET_INT_MASK | PIN_BUTTON_MASK, gpiote_event_handler);
    wait(5);
  } else if (start == 1) {
    app_gpiote_user_register(&m_gpiote_user_id, GERKON_INT_MASK, GERKON_INT_MASK | MAGNET_INT_MASK | PIN_BUTTON_MASK, gpiote_event_handler);
    wait(5);
  }
  app_gpiote_user_enable(m_gpiote_user_id);
  wait(5);
  axelIntStatus = 0;
  buttIntStatus = 0;
  gerkIntStatus = 0;
  magIntStatus = 0;
}


void gpiote_event_handler(uint32_t event_pins_low_to_high, uint32_t event_pins_high_to_low)
{
  MY_HW_RTC->CC[0] = (MY_HW_RTC->COUNTER + 2); // Taken from d0016 example code, ends the sleep delay

  if (PIN_BUTTON_MASK & event_pins_high_to_low) {
    if ((buttIntStatus == 0) && (axelIntStatus == 0) && (gerkIntStatus == 0) && (magIntStatus == 0)) {
      buttIntStatus = PIN_BUTTON;
    }
  }
  if (flag_nogateway_mode == 0) {
    if (AXEL_INT_MASK & event_pins_low_to_high) {
      if ((axelIntStatus == 0) && (buttIntStatus == 0) && (gerkIntStatus == 0) && (magIntStatus == 0) && (door_status == 1)) {
        axelIntStatus = AXEL_INT;
        axel_time0 = millis();
      }
    }
    if ((GERKON_INT_MASK & event_pins_low_to_high) || (GERKON_INT_MASK & event_pins_high_to_low)) {
      if ((axelIntStatus == 0) && (buttIntStatus == 0) && (gerkIntStatus == 0) && (magIntStatus == 0)) {
        gerkIntStatus = GERKON_INT;
      }
    }
    if (MAGNET_INT_MASK & event_pins_high_to_low) {
      if ((axelIntStatus == 0) && (buttIntStatus == 0) && (gerkIntStatus == 0) && (magIntStatus == 0) && (door_status == 1)) {
        magIntStatus = MAGNET_INT;
      }
    }
  }
}


void sensors_Init() {
  Wire.begin();
  wait(100);
  lis2 = new LIS2DW12Sensor (&Wire);
  vibro_Init();
  if (flag_nogateway_mode == 0) {
    if (digitalRead(GERKON_INT) == HIGH) {
      door_status = 1;
      interrupt_Init(0);
    } else {
      door_status = 0;
      interrupt_Init(1);
    }
    send(dwsMsg.set(door_status));
    wait(50);

    SLEEP_TIME_W = SLEEP_TIME;
    axelIntStatus = 0;
    buttIntStatus = 0;
    gerkIntStatus = 0;
    magIntStatus = 0;
    sendBatteryStatus(0);
    wait(100);
    blinky(2, 1, BLUE_LED);
    wait(100);
    blinky(2, 1, GREEN_LED);
    wait(100);
    blinky(2, 1, RED_LED);
    axel_time = millis();
  } else {
    interrupt_Init(0);
    blinky(5, 3, RED_LED);
  }
}


void config_Happy_node() {
  if (mtwr == 0) {
    myid = getNodeId();
    saveState(100, myid);
    mypar = _transportConfig.parentNodeId;
    old_mypar = mypar;
    saveState(101, mypar);
    saveState(102, _transportConfig.distanceGW);
  }
  if (mtwr != 0) {
    myid = getNodeId();
    if (myid != loadState(100)) {
      saveState(100, myid);
    }
    if (isTransportReady() == true) {
      mypar = _transportConfig.parentNodeId;
      if (mypar != loadState(101)) {
        saveState(101, mypar);
      }
      if (_transportConfig.distanceGW != loadState(102)) {
        saveState(102, _transportConfig.distanceGW);
      }
      present_only_parent();
    }
    if (isTransportReady() == false)
    {
      no_present();
      flag_fcount = 1;
      err_delivery_beat = 6;
      _transportConfig.nodeId = myid;
      _transportConfig.parentNodeId = loadState(101);
      _transportConfig.distanceGW = loadState(102);
      mypar = _transportConfig.parentNodeId;
      happy_node_mode();
      gateway_fail();
    }
  }
}


void send_Axel() {
  if (millis() - axel_time >= 5000) {
    blinky(2, 1, GREEN_LED);
    blinky(2, 1, RED_LED);
    blinky(2, 1, GREEN_LED);
    blinky(2, 1, RED_LED);
    blinky(2, 1, GREEN_LED);
    blinky(2, 1, RED_LED);

    send_a = send(vibroMsg.set(vibro));
    wait(50);
    if (send_a == false) {
      send_a = send(vibroMsg.set(vibro));
      wait(100);
    }
    if (send_a == true) {
      err_delivery_beat = 0;
      if (flag_nogateway_mode == 1) {
        flag_nogateway_mode = 0;
        CORE_DEBUG(PSTR("MyS: NORMAL GATEWAY MODE\n"));
        err_delivery_beat = 0;
      }
    } else {
      _transportSM.failedUplinkTransmissions = 0;
      if (err_delivery_beat < 6) {
        err_delivery_beat++;
      }
      if (err_delivery_beat == 5) {
        if (flag_nogateway_mode == 0) {
          gateway_fail();
          CORE_DEBUG(PSTR("MyS: LOST GATEWAY MODE\n"));
        }
      }
    }
    axel_time = millis();
    axelIntStatus = 0;
    nosleep = 0;
  } else {
    axelIntStatus = 0;
    nosleep = 0;
  }
}


void send_Gerkon() {
  if (digitalRead(GERKON_INT) == HIGH) {
    door_status = 1;
    interrupt_Init(0);
  } else {
    door_status = 0;
    interrupt_Init(1);
  }
  if (door_status == 1) {
    blinky(1, 1, GREEN_LED);
  } else {
    blinky(1, 1, RED_LED);
  }
  send_a = send(dwsMsg.set(door_status));
  wait(50);
  if (send_a == false) {
    send_a = send(dwsMsg.set(door_status));
    wait(100);
    if (send_a == false) {
      send_a = send(dwsMsg.set(door_status));
      wait(150);
    }
  }
  if (send_a == true) {
    err_delivery_beat = 0;
    if (flag_nogateway_mode == 1) {
      flag_nogateway_mode = 0;
      CORE_DEBUG(PSTR("MyS: NORMAL GATEWAY MODE\n"));
      err_delivery_beat = 0;
    }
  } else {
    _transportSM.failedUplinkTransmissions = 0;
    if (err_delivery_beat < 6) {
      err_delivery_beat++;
    }
    if (err_delivery_beat == 5) {
      if (flag_nogateway_mode == 0) {
        gateway_fail();
        CORE_DEBUG(PSTR("MyS: LOST GATEWAY MODE\n"));
      }
    }
  }
  gerkIntStatus = 0;
  nosleep = 0;
}


void send_Magnet() {
  blinky(2, 1, BLUE_LED);
  blinky(2, 1, RED_LED);
  blinky(2, 1, BLUE_LED);
  blinky(2, 1, RED_LED);
  blinky(2, 1, BLUE_LED);
  blinky(2, 1, RED_LED);
  send_a = send(mMsg.set(magnet_status));
  wait(50);
  if (send_a == false) {
    send_a = send(mMsg.set(magnet_status));
    wait(100);
  }
  if (send_a == true) {
    err_delivery_beat = 0;
    if (flag_nogateway_mode == 1) {
      flag_nogateway_mode = 0;
      CORE_DEBUG(PSTR("MyS: NORMAL GATEWAY MODE\n"));
      err_delivery_beat = 0;
    }
  } else {
    _transportSM.failedUplinkTransmissions = 0;
    if (err_delivery_beat < 6) {
      err_delivery_beat++;
    }
    if (err_delivery_beat == 5) {
      if (flag_nogateway_mode == 0) {
        gateway_fail();
        CORE_DEBUG(PSTR("MyS: LOST GATEWAY MODE\n"));
      }
    }
  }
  magIntStatus = 0;
  nosleep = 0;
}


void new_device() {
  hwWriteConfig(EEPROM_NODE_ID_ADDRESS, 255);
  saveState(100, 255);
  wdt_enable(WDTO_15MS);
}


void update_Happy_transport() {
  CORE_DEBUG(PSTR("MyS: UPDATE TRANSPORT CONFIGURATION\n"));
  mypar = _transportConfig.parentNodeId;
  if (mypar != loadState(101))
  {
    saveState(101, mypar);
  }
  if (_transportConfig.distanceGW != loadState(102))
  {
    saveState(102, _transportConfig.distanceGW);
  }
  present_only_parent();
  wait(50);
  nosleep = 0;
  flag_update_transport_param = 0;
}


void present_only_parent() {
  if (old_mypar != mypar) {
    CORE_DEBUG(PSTR("MyS: SEND LITTLE PRESENT:) WITH PARENT ID\n"));
    if (_sendRoute(build(_msgTmp, 0, NODE_SENSOR_ID, C_INTERNAL, 6).set(mypar))) {
      flag_sendRoute_parent = 0;
      old_mypar = mypar;
    } else {
      flag_sendRoute_parent = 1;
    }
  }
}


void happy_node_mode() {
  _transportSM.findingParentNode = false;
  _transportSM.transportActive = true;
  _transportSM.uplinkOk = true;
  _transportSM.pingActive = false;
  _transportSM.failureCounter = 0;
  _transportSM.uplinkOk = true;
  _transportSM.failureCounter = 0u;
  _transportSM.failedUplinkTransmissions = 0u;
  transportSwitchSM(stReady);
  CORE_DEBUG(PSTR("TRANSPORT: %d\n"), isTransportReady());
}


void gateway_fail() {
  flag_nogateway_mode = 1;
  flag_update_transport_param = 0;
  SLEEP_TIME_W = SLEEP_NOGW;
}


void check_parent() {
  _transportSM.findingParentNode = true;
  CORE_DEBUG(PSTR("MyS: SEND FIND PARENT REQUEST, WAIT RESPONSE\n"));
  _sendRoute(build(_msg, 255, NODE_SENSOR_ID, C_INTERNAL, 7).set(""));
  wait(1500, C_INTERNAL, 8);
  if (_msg.sensor == 255) {
    if (mGetCommand(_msg) == 3) {
      if (_msg.type == 8) {
        Ack_FP = 1;
        CORE_DEBUG(PSTR("MyS: PARENT RESPONSE FOUND\n"));
      }
    }
  }
  if (Ack_FP == 1) {
    CORE_DEBUG(PSTR("MyS: FIND PARENT PROCESS\n"));
    Ack_FP = 0;
    transportSwitchSM(stParent);
    flag_nogateway_mode = 0;
    flag_find_parent_process = 1;
    problem_mode_count = 0;
  } else {
    _transportSM.findingParentNode = false;
    CORE_DEBUG(PSTR("MyS: PARENT RESPONSE NOT FOUND\n"));
    _transportSM.failedUplinkTransmissions = 0;
    CORE_DEBUG(PSTR("TRANSPORT: %d\n"), isTransportReady());
    nosleep = 0;
    if (problem_mode_count < 9) {
      CORE_DEBUG(PSTR("PROBLEM MODE COUNTER: %d\n"), problem_mode_count);
      problem_mode_count++;
      SLEEP_TIME_W = SLEEP_TIME_W + SLEEP_TIME_W;
    }
  }
}


void find_parent_process() {
  flag_update_transport_param = 1;
  flag_find_parent_process = 0;
  CORE_DEBUG(PSTR("MyS: STANDART TRANSPORT MODE IS RESTORED\n"));
  err_delivery_beat = 0;
  SLEEP_TIME_W = SLEEP_TIME;
  nosleep = 0;
}


void sendBatteryStatus(bool start) {
  batt_cap = battery_level_in_percent(batteryVoltage);
  if (start == 1) {
    //if (batt_cap < old_batt_cap) {
    sendBatteryLevel(battery_level_in_percent(batteryVoltage), 1);
    wait(1500, C_INTERNAL, I_BATTERY_LEVEL);
    old_batt_cap = batt_cap;
    // }
  } else {
    sendBatteryLevel(battery_level_in_percent(batteryVoltage), 1);
    wait(1500, C_INTERNAL, I_BATTERY_LEVEL);
  }

  linkQuality = calculationRxQuality();
  if (linkQuality != old_linkQuality) {
    wait(10);
    sendSignalStrength(linkQuality);
    wait(50);
    old_linkQuality = linkQuality;
  }
}


bool sendSignalStrength(const int16_t level, const bool ack)
{
  return _sendRoute(build(_msgTmp, GATEWAY_ADDRESS, SIGNAL_Q_ID, C_SET, V_VAR1,
                          ack).set(level));
}
int16_t calculationRxQuality() {
  int16_t nRFRSSI_temp = transportGetReceivingRSSI();
  int16_t nRFRSSI = map(nRFRSSI_temp, -85, -40, 0, 100);
  if (nRFRSSI < 0) {
    nRFRSSI = 0;
  }
  if (nRFRSSI > 100) {
    nRFRSSI = 100;
  }
  return nRFRSSI;
}


void receive(const MyMessage & message)
{
  if (message.sensor == LEVEL_SENSIV_V_SENS_CHILD_ID) {
    if (message.type == V_VAR1) {
      conf_vibro_set = message.getByte();
      vibro_Init();
      saveState(230, conf_vibro_set);
      wait(200);
      send(conf_vsensMsg.set(conf_vibro_set));
      wait(200);
      blinky(3, 3, GREEN_LED);
      configMode = 0;
      nosleep = 0;
    }
  }
}


void vibro_Init() {
  if (conf_vibro_set == 1) {
    lis2->ODRTEMP = ODR_1Hz6_LP_ONLY;
  }
  if (conf_vibro_set == 2) {
    lis2->ODRTEMP = ODR_12Hz5;
  }
  if (conf_vibro_set == 3) {
    lis2->ODRTEMP = ODR_25Hz;
  }
  if (conf_vibro_set == 4) {
    lis2->ODRTEMP = ODR_100Hz;
  }
  if (conf_vibro_set == 5) {
    lis2->ODRTEMP = ODR_200Hz;
  }
  lis2->Enable_X();
  wait(100);
  lis2->Enable_Wake_Up_Detection();
  wait(100);
}


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдЧрд┐рдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

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


рдлрд┐рд▓рд╣рд╛рд▓, рдореЗрдЬрд░рдбреЛрдореЛ рдпреВрдбреА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рдкреВрд░реНрдг, рд╕рдорд░реНрдерд┐рдд рд╣реИ:

  • рд╕рднреА mesensors рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░,
  • OTA рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ,
  • рдПрдХ рдореЙрдбреНрдпреВрд▓ (рдорд▓реНрдЯреА-рдЧреЗрдЯ) рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдиреЗрдЯрд╡рд░реНрдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛,
  • SmartSleep рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди,
  • рдореЙрдбреНрдпреВрд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ,
  • рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз,
  • рд╕реЗрд╡рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣, рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди, рдкреНрд░рд╕реНрддреБрддрд┐, рд░рд┐рдмреВрдЯ,
  • NodeManager рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ

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

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

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



if($this->getProperty('value2') == '1'){
$this->setProperty('status','1');
}

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

if (gg("MysensorsSmoke03.status") == "1") {
SetTimeOut('AlarmShock','sg("MysensorsSmoke03.status","0");',10);
}

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


рдбрд┐рд╡рд╛рдЗрд╕ рдмреЛрд░реНрдб рдХреЛ рдбреАрдкреНрд░реЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдиреЗ рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рдирд╣реАрдВ рд╣реВрдВ, рдорджрд░рдмреЛрд░реНрдб рдХреЗ рдШрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдбреЗрдврд╝ рдпрд╛ рджреЛ рд╕рд╛рд▓ рдХрд╛ рд╣реИред рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬреЛ рдмреНрд░реЗрдбрдмреЛрд░реНрдб рдкрд░ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдореИрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, YouTube рд╡реАрдбрд┐рдпреЛ рдореИрдиреБрдЕрд▓ рд╕реЗ рднрд░рд╛ рд╣реИред





рдореЗрд╕реЗрдВрд╕рд░ рдореЗрдВ nRF5 рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рдВрджреАрдк рдорд┐рд╕реНрддреНрд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ - arduino-nRF5ред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ nRF52840, nRF52810 рдЪрд┐рдкреНрд╕ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП nRF52811 рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдореБрдЭреЗ рдЗрди рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдВрдЯрд╛ рдФрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдерд╛, рдиреЙрд░реНрдбрд┐рдХ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдПрдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд░рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрд╕реЗрдВрд╕рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ nRF52840 рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 1 рдХрд╛ рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдерд╛ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдореЗрд░рд╛ рд╢реЛрдз рдФрд░ рдореЗрд╕реЗрдВрд╕рд░ рд╕рдореБрджрд╛рдп рдХреЗ рдПрдХ рдЕрдиреНрдп рд╕рджрд╕реНрдп рдХреЗ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЛ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, nRF52840 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА port1 рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рд╕рдореБрджреНрд░ рдмрди рдЧрдпрд╛ред

рд╕реЙрд▓рд┐рдбрд╡рд░реНрдХреНрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдпреВрдЯреНрдпреВрдм рдкрд░ рдкрд╛рдареЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдерд╛ред рдорд╛рдорд▓рд╛ рдХрд┐рд╕реА рднреА FOTON SLA рдкреНрд░рд┐рдВрдЯрд░ рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рд┐рдВрдЯ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╕рдЯреАрдХрддрд╛ рд╕реЗ рдореИрдВ рдмрд╣реБрдд рдЦреБрд╢ рдерд╛ред рдХреЗрд╡рд▓ рдирдХрд╛рд░рд╛рддреНрдордХ рдпреВрд╡реА рд░реЗрдЬрд┐рди рдХрд╛ рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдРрд╕реЗ рдШрд░реЗрд▓реВ рдкреНрд░рд┐рдВрдЯрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдорд▓реЗ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЖрдпрд╛рдо: рд▓рдВрдмреЗ 43 рдорд┐рдореА, рдЪреМрдбрд╝рд╛рдИ 26 рдорд┐рдореА, рдКрдВрдЪрд╛рдИ 12.5 рдорд┐рдореАред рдЪреБрдВрдмрдХ рдХреЗ рд╕рд╛рде рдХреЗрд╕ рдЖрдпрд╛рдо: рд▓рдВрдмрд╛рдИ 37 рдорд┐рдореА, рдЪреМрдбрд╝рд╛рдИ 11 рдорд┐рдореА, рдКрдБрдЪрд╛рдИ 12.5 рдорд┐рдореАред









рдПрдХ рд╕рдкрдиреЗ рдореЗрдВ рд╕реЗрдВрд╕рд░ рдХреА рдЦрдкрдд 4 ╬╝A рд╕реЗ 7 ╬╝A рддрдХ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЪрдпрдирд┐рдд рдЪрд┐рдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдореЛрдб рдореЗрдВ рдЙрдкрднреЛрдЧ 8 mA рдерд╛ред

рд╕реЗрдВрд╕рд░ CR2032 рдмреИрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдорд╛рдк рдЪреАрдиреА "рдорд▓реНрдЯреАрдлрд╝рд┐рд▓реНрдЯрд░" рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗ :) рдЗрд╕рдХреА рдмрдбрд╝реА рд▓рд╛рдЧрдд рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреА рдХрдореА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП :(ред

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

рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ ZIGBEE рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рддрд╣рдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ, рддреЛ рдореИрдВ рд╕рд╣рд░реНрд╖ рд╕рд╣рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдЖрдк рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддрд╛рд░ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛, рд╡рд╣рд╛рдБ рд╣рдореЗрд╢рд╛ рди рдХреЗрд╡рд▓ рдорд╛рд╣рд┐рд░ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ Maysensors рдкреНрд░реЛрдЯреЛрдХреЙрд▓ , рд▓реЗрдХрд┐рди рдпрд╣ рднреА Zigbee рдФрд░ BLE nRF5 рдкрд░, рд╡реЗ рддреБрд░рдВрдд Arduino рдЖрдИрдбреАрдИ рдореЗрдВ nRF52 рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рди рдХреЗрд╡рд▓ рдЙрд╕ рдореЗрдВ рд╕реЗ рд╕рднреА рдореБрджреНрджреЛрдВ рдкрд░ рд╕рд▓рд╛рд╣ рджреЗрдЧрд╛ред

рдЬрд╣рд╛рдБ рдореИрдВ рд░рд╣рддрд╛ рд╣реВрдБ рдФрд░ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧ - @MYSENSORS_RUS рдЪреИрдЯ рдХрд░рддреЗ рд╣реИрдВ ред

рд╕рднреА рдХреЛ рдЕрдЪреНрдЫрд╛!

All Articles