рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмреНрд▓реВрдЯреВрде рдореМрд╕рдо рд╕реНрдЯреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП (рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ :)) рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓рдЯрд░ рдкрд░ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗрдВред
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕реЗрдВрд╕рд░ рдкрд░ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ 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);
BLE.advertise();
рд╕рд░рдгреА рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдЕрдм рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рд╣рдо рдПрдХ рд░реЛрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдмрдирд╛рддреЗ рд╣реИрдВ, рд░реЗрдбрд┐рдпреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкреНрд░рд╕рд╛рд░рдг рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдСрдкрд░реЗрд╢рди рд╣рд░ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредBLE.stopAdvertise();
---------------------
---------------------
byte data[8] = { 0x00, 0x01, t1, t2, h1, h2, p1, p2};
BLE.setManufacturerData(data, 8);
BLE.advertise();
delay(2000);
рдпрд╣ рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╕реЗрдВрд╕рд░ рдкреНрд░рддреНрдпреЗрдХ 100ms рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рд░ 2sec рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдореМрд╕рдо рдХреЛрдб рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗрдВрд╕рд░ рдерд╛редрдЕрдм рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рдореИрдВ рддреБрд░рдВрдд рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛: рдореИрдВ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВредрдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ VSCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝реНрд▓рдЯрд░ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╛рддрд╛рд╡рд░рдг рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рд╣реИред BLE рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Flutter_blue рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ , рдЬрд┐рд╕рдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░ рджрд┐рдпрд╛редрдЖрд╡реЗрджрди рдХрд╛ рддрд░реНрдХ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░рд╛ рд╕реЗрдВрд╕рд░ рд╕рд╛рдорд╛рдиреНрдп рдмреАрдХрди рдореЛрдб рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:- рд╕реНрдХреИрди рдкреНрд░рд╕рд╛рд░рдг - рджрд┐рдП рдЧрдП рдирд╛рдо рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдвреВрдВрдвреЗрдВ,
- рд╕реНрдХреНрд░реАрди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдЯрд╛рдЗрдорд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ 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 рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдЗрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдПрдХ рдРрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЧрд┐рдердм рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред