рд╕реНрдкрдВрджрди + рдЕрд░реБрдбрд┐рдиреЛ рдиреИрдиреЛ 33 рдмреАрдПрд▓рдИ рднрд╛рд╡рдирд╛ = рдмрд╣реБрдд рд╕рд░рд▓ рдмреАрдПрд▓рдИ рд╕реЗрдВрд╕рд░

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмреНрд▓реВрдЯреВрде рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП (рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ :)) рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓рдЯрд░ рдкрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗрдВред



рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕реЗрдВрд╕рд░ рдкрд░ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ


рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ Arduino рдиреИрдиреЛ 33 BLE рд╕реЗрдВрд╕ рдмреЛрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ред

рдмреЛрд░реНрдб nrf52840 рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ arduino рдореЗрдВ рдмреЛрд░реНрдб рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред



рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рддреБрд░рдВрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


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

рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ


рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд▓рдЧ-рдЗрди рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдерд╛, рдмрд▓реНрдХрд┐ рдЙрдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рдг рдкреИрдХреЗрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред

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

рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреИрдХреЗрдЬ рдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ 31 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо, рд╕рд┐рд╕реНрдЯрдо рдбреЗрдЯрд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ред рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ, рдирд┐рд░реНрдорд╛рддрд╛ рджрд╛рддрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рдЧрднрдЧ 20 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдпрд╣ рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдХрдо рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдлрд╛рдпрджреЗ, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рдВрдмрдВрдз рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдкреНрд░рд╕рд╛рд░рдгред рдРрд╕рд╛ рд╕рдВрджреЗрд╢ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдирд┐рд░реНрдорд╛рддрд╛рдбреИрдЯ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдФрд░ рдЕрдм рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ


Arduino рдХреЛрдб рдореЗрдВ, рд╣рдо BLE рднрд╛рдЧ рдХреЗ рдХрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдорд╛рддрд╛ рджрд╛рддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИред

BLE.setLocalName("nrf52840.ru");
BLE.setConnectable(false);
byte data[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
BLE.setManufacturerData(data, 8);
// start advertising
BLE.advertise();

рд╕рд░рдгреА рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рд╣рдо рдПрдХ рд░реЛрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмрдирд╛рддреЗ рд╣реИрдВ, рд░реЗрдбрд┐рдпреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкреНрд░рд╕рд╛рд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдСрдкрд░реЗрд╢рди рд╣рд░ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

BLE.stopAdvertise();
// read all the sensor values
---------------------
       
---------------------
byte data[8] = { 0x00, 0x01, t1, t2, h1, h2, p1, p2}; // t -  (2 ), h -  (2 ), p -  (2 )
BLE.setManufacturerData(data, 8);
BLE.advertise();
// wait 2 second to print again
delay(2000);

рдпрд╣ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╕реЗрдВрд╕рд░ рдкреНрд░рддреНрдпреЗрдХ 100ms рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рд░ 2sec рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдореМрд╕рдо рдХреЛрдб рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗрдВрд╕рд░ рдерд╛ред

рдЕрдм рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ


рдореИрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛: рдореИрдВ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВред

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

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

  1. рд╕реНрдХреИрди рдкреНрд░рд╕рд╛рд░рдг - рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдвреВрдВрдвреЗрдВ,
  2. рд╕реНрдХреНрд░реАрди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЯрд╛рдЗрдорд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ 2 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдЯреВрде рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдмрд╛рд░ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдпрд╣ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдмреИрдЯрд░реА рдХреА рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдЧреА, рдФрд░ рд╕реЗрдВрд╕рд░ рдЖрдорддреМрд░ рдкрд░ рд╣рд░ 100ms рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

DeviceScanner() {
   _subscribeToScanEvents();
   _timer = new Timer.periodic(const Duration(seconds: 10), startScan);
 }

void startScan(Timer timer) {
   FlutterBlue.instance.startScan(timeout: Duration(seconds: 2));
}

рдЕрдЧрд▓рд╛, рд╣рдо рд╕реНрдХреИрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдХреИрди рд╕реВрдЪреА рдореЗрдВ рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдкреИрдХреЗрдЬ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


  void _subscribeToScanEvents() {
    FlutterBlue.instance.scanResults.listen((scanResults) {
      for (ScanResult scanResult in scanResults) {
        if (scanResult.device.name.toString() == "nrf52840.ru") {
          final int rssi = scanResult.rssi;
          final String name = scanResult.device.name;
          final String mac = scanResult.device.id.toString();
          final double temp = scanResult.advertisementData.manufacturerData[256]
                  [0] +
              scanResult.advertisementData.manufacturerData[256][1] * 0.01;
          final double humm = scanResult.advertisementData.manufacturerData[256]
                  [2] +
              scanResult.advertisementData.manufacturerData[256][3] * 0.01;
          final double press =
              scanResult.advertisementData.manufacturerData[256][4] +
                  scanResult.advertisementData.manufacturerData[256][5] * 0.01;
          final SensorData sensorData = new SensorData(
              name: name,
              rssi: rssi,
              mac: mac,
              temperature: temp,
              humidity: humm,
              pressure: press);
          _streamController.add(sensorData);
          print(
              'Manufacturer data ${scanResult.advertisementData.manufacturerData}');
          FlutterBlue.instance.stopScan();
        }

        print(
            '${scanResult.device.name} found! mac: ${scanResult.device.id} rssi: ${scanResult.rssi}');
      }
    });
  }

рдереЛрдбрд╝реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБред рдлреНрд▓рдЯрд░ рдХреЗ рд▓рд┐рдП рдмреНрд▓реВрдЯреВрде рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЗрдВрдЯ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрд░реНрдбрд┐рдиреЛ рдореЗрдВ рд╣рдо рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░ рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ рдмрдирд╛рдпрд╛ред 25.85 рдбрд┐рдЧреНрд░реА рдХреЗ рддрд╛рдкрдорд╛рди рдХреЛ рджреЛ рдорд╛рдиреЛрдВ 25 рдФрд░ 85 рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдЗрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧрд┐рдердм рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

All Articles