рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо REDMOND рдмреНрд░рд╛рдВрдб рдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рд╕реНрдХрд╛рдИрд╕реНрдХреЗрдЯ 202 рдПрд╕ред рдЗрд╕ рд╕реЛрд╕рд▓ рдХреЗ рд╕рд░реНрдХрд┐рдЯреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдиреЗ рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛, рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рдЙрдкрдХрд░рдг рд╕реЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХрдВрдкрдиреА рдиреЙрд░реНрдбрд┐рдХ рд╕реЗрдореАрдХрдВрдбрдХреНрдЯрд░ 51 рд╢реНрд░реГрдВрдЦрд▓рд╛ (nRF51822) рд╕реЗ рдПрдХ рдЪрд┐рдк рд╣реИред
рдЗрд╕ рд╕рдордп рдореЗрд░рд╛ рдореБрдЦреНрдп рд╢реМрдХ рд╕реНрдорд╛рд░реНрдЯ рдШрд░ рдмрдирд╛рдирд╛ рд╣реИред рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ MySensors рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдПрдХ рд░реЗрдбрд┐рдпреЛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдП, рддреЛ рд╢рд╛рдпрдж рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд░реНрджреБрдиреЛ рдЖрдИрдбреАрдИ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдЖрдк рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЕрд░реНрдбреБрдЗрдиреЛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рд░реЗрдбрд┐рдпреЛ рд╕реЗрдВрд╕рд░ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ MySensors рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП nRF51822 рдФрд░ nRF52832 рд░реЗрдбрд┐рдпреЛ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЙрдкрдХрд░рдг рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдЖрдзрд╛рд░ рдХреЛ рджреЗрдЦрд╛ред


рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдореЗрдВ рдЗрд╕реЗ рдЦрд░реАрджрдиреЗ (700 рд░реВрдмрд▓ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдлреА рдкреИрд╕реЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдмреЛрд░реНрдб рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 4 рд╕рдВрдкрд░реНрдХ рджреЗрдЦреЗред рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЪреАрдиреА рдПрд╕рдЯреА-рд▓рд┐рдВрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдорд▓реНрдЯреАрдореАрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд▓рд┐рдпрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдЖрд░реЗрдЦ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЛрд░реНрдб рдХреА рддрд╛рд░реЛрдВ рдХреЛ рдЙрдард╛ рд▓рд┐рдпрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдЖрд░реЗрдЦ рдХреЛ рдКрдкрд░ рдЦреАрдВрдЪрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдХреЗрд╡рд▓ 4 рдкрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд┐рди p0.27 рдкрд░ рдПрдХ рдмрдЯрди, рдкрд┐рди p0.26 рдкрд░ рдПрдХ рдмрд╕, рдкрд┐рди p0.16 рдкрд░ рдПрдХ triac рд░рд┐рд▓реЗ рдФрд░ рдкрд┐рди p0.00 рдкрд░ рдПрдХ рд╢реВрдиреНрдп рдбрд┐рдЯреЗрдХреНрдЯрд░ рд╕рд░реНрдХрд┐рдЯред 20 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Arduino IDE рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ (рдпрд╣ MySensors рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рддреЗрдЬрд╝ рдерд╛), ST-LINK рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░, рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рд╕рдВрдХрд▓рди, рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд░реНрдорд╡реЗрдпрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреБрд░рдВрдд рд╣реА рдореИрдВрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓ рджрд┐рдпрд╛, рдореЗрдЬрд╝рд░реНрдбреЛрдореЛ рдХреЛ рдЦреЛрд▓рд╛, MySensors рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдирдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - REDMOND nRF51 1.0ред рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ, рдмрдЯрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рддреБрд░рдВрдд рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдПрдХ-рдбреЗрдврд╝ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдмреЗрд╕ рдореЗрдВ рд▓рд╛рдЗрдЯ рдмрд▓реНрдм рдХреЛ MySensors рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ред

рд╣рдорд╛рд░реЗ mysensors рд╕рдореБрджрд╛рдп рдХреА рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ, рдЬрд╣рд╛рдБ рд╣рд░ рдХреЛрдИ рдмрддрд╛рдПрдЧрд╛ рдФрд░ рдорджрдж рдХрд░реЗрдЧрд╛ - https://t.me/mysensors_rus
Arduino рдХреЛрдб (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреИрдХрд▓рд╛рдЗрдЯ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ):
#define BUTTON_PIN 27 #define BIZZER_PIN 26 #define ZERO_CROSS_PIN 0 #define RELAY_PIN 16 boolean iswitch = 1; boolean flag_button = 0; static uint32_t previousMillis; //#define MY_DEBUG #define MY_DISABLED_SERIAL #define MY_RADIO_NRF5_ESB //#define MY_PASSIVE_NODE #define MY_NODE_ID 200 #define MY_PARENT_NODE_ID 0 #define MY_PARENT_NODE_IS_STATIC //#define MY_TRANSPORT_UPLINK_CHECK_DISABLED #define MY_REPEATER_FEATURE #define RELAY_ID 1 #include <MySensors.h> MyMessage lMsg(RELAY_ID, V_STATUS); void preHwInit() { pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(BIZZER_PIN, OUTPUT); pinMode(ZERO_CROSS_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); } void before() { //delay(2000); while (digitalRead(ZERO_CROSS_PIN) != 0) { //digitalWrite(RELAY_PIN, iswitch); //wait(200); } digitalWrite(RELAY_PIN, iswitch); } void presentation() { sendSketchInfo("REDMOND nRF51", "1.0"); wait(100); present(RELAY_ID, S_BINARY, "LIGHT SWITCH"); } void setup() { myTone(800, 50); delay(70); myTone(1500, 150); delay(30); wait(500); send(lMsg.set(iswitch)); wait(100); } void loop() { if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) { flag_button = 1; previousMillis = millis(); wait(20); myTone(800, 50); delay(100); //myTone(1500, 200); //delay(30); } if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) { } if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) { if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) { flag_button = 0; myTone(800, 50); delay(70); myTone(1500, 150); delay(30); iswitch = !iswitch; while (digitalRead(ZERO_CROSS_PIN) != 0) { //iswitch = !iswitch; } digitalWrite(RELAY_PIN, iswitch); myTone(1500, 150); delay(30); wait(100); send(lMsg.set(iswitch)); wait(300); } if (millis() - previousMillis > 3000) { flag_button = 0; wait(100); } } } void receive(const MyMessage & message) { if (message.type == V_STATUS) { if (message.sensor == RELAY_ID) { if (mGetCommand(message) == 1) { if (message.isAck()) { //AckG = 1; } else { // iswitch = !iswitch; while (digitalRead(ZERO_CROSS_PIN) != 0) { //iswitch = !iswitch; } digitalWrite(RELAY_PIN, iswitch); wait(200); myTone(800, 50); delay(70); myTone(1500, 150); delay(30); wait(100); send(lMsg.set(iswitch)); wait(1000); } } if (mGetCommand(message) == 2) { } } } /* if (message.isAck()) { (message.sensor == LIGHT_SENS_ID) { } (message.sensor == TEMP_INT_ID) { } } */ } void myTone(uint32_t j, uint32_t k) { j = 500000 / j; k += millis(); while (k > millis()) { digitalWrite(BIZZER_PIN, HIGH); delayMicroseconds(j); digitalWrite(BIZZER_PIN, LOW ); delayMicroseconds(j); } } void playSound() { }
рдирд┐рд░рдВрддрд░рддрд╛ - рд╕реНрдорд╛рд░реНрдЯ рд╕реЙрдХреЗрдЯ REDMOND