HX711 ADC рд▓рд╛ NRF52832 рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ

1. рдкрд░рд┐рдЪрдп

nrf52832 рдорд╛рдпрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░рд╕рд╛рдареА рджреЛрди рд╣рд╛рдл-рдмреНрд░рд┐рдЬ рдЪрд╛рдпрдиреАрдЬ рд╕реНрдЯреНрд░реЗрди рдЧреЗрдЬрд╕рд╣ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рдЕрдЬреЗрдВрдбреНрдпрд╛рд╡рд░ рд╣реЛрддреЗ.

рд╣реЗ рдХрд╛рд░реНрдп рд╕реЛрдкреЗ рдирд╡реНрд╣рддреЗ, рдХрд╛рд░рдг рдорд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реБрдЧрдо рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛. рдиреЙрд░реНрдбрд┐рдХ рд╕реЗрдореАрдХрдВрдбрдХреНрдЯрд░рдЪреНрдпрд╛ SDK рдордзреНрдпреЗ тАЬрд╡рд╛рдИрдЯрд╛рдЪреЗ рдореВрд│тАЭ рдЕрд╕рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЬрд╛рд╕реНрдд рдЖрд╣реЗ - рд╕рддрдд рдЖрд╡реГрддреНрддреА рдЕрджреНрдпрддрдиреЗ, рдХрд╛рд╣реА рдЕрдирд╛рд╡рд╢реНрдпрдХрддрд╛ рдЖрдгрд┐ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрдгрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛. рдорд▓рд╛ рд╕реБрд░рд╡рд╛рддреАрдкрд╛рд╕реВрди рд╕рд░реНрд╡рдХрд╛рд╣реА рд▓рд┐рд╣рд╛рдпрдЪреЗ рд╣реЛрддреЗ.

рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдпрд╛ рдЪрд┐рдкрдордзреНрдпреЗ BLE рд╕реНрдЯреЕрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдКрд░реНрдЬрд╛ рдмрдЪрдд рдореЛрдбрд╕рд╛рдареА "рдЧреБрдбреАрдЬ" рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЪ рдЖрд╣реЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛ рд╡рд┐рд╖рдп рдЕрдЧрджреА рд╕рдорд░реНрдкрдХ рдЖрд╣реЗ. рдкрдг рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдмрд░реЗрдЪ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рд▓реЗ рдЧреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдореА рддрд╛рдВрддреНрд░рд┐рдХ рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЬрд╛рд╕реНрдд рдЦреЛрд▓рд╡рд░ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА.

2. рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╡рд░реНрдгрди

HX711 ADC рд▓рд╛ NRF52832 рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ

рд▓реЛрд╣:

  • Adafruit Feather nRF52 Bluefruit LE (рдХрд╛рдп рдЭрд╛рд▓реЗ рддреЗ рд╣рд╛рддрд╛рд╢реА рдЖрд╣реЗ)
  • HX711 ADC
  • рдЪрд┐рдиреА рд╕реНрдЯреНрд░реЗрди рдЧреЗрдЬ 2 рдкреАрд╕реА. (релрежxреи рдХрд┐рд▓реЛ)
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ ST-LINK V2

рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░:

  • IDE VSCODE
  • NRF SDK 16
  • рдУрдкрдирдУрд╕реАрдбреА
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ ST-LINK V2

рд╕рд░реНрд╡ рдХрд╛рд╣реА рдПрдХрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рдЖрд╣реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдореЗрдХрдлрд╛рдЗрд▓ (рддреБрдордЪреНрдпрд╛ SDK рдЪреЗ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛) рдЪрд┐рдордЯрд╛ рдХрд╛рдврд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.

3. рдХреЛрдбрдЪреЗ рд╡рд░реНрдгрди

рдЖрдореНрд╣реА GPIOTE рдореЙрдбреНрдпреВрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдкреЗрд░рд┐рдлреЗрд░рд▓реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдЖрдгрд┐ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреНрдпрд╛ рдмрдВрдзрдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рддрд╕реЗрдЪ рдкреНрд░реЛрд╕реЗрд╕рд░рдЪреНрдпрд╛ рд╕рд╣рднрд╛рдЧрд╛рд╢рд┐рд╡рд╛рдп рдПрдХрд╛ рдкреЗрд░рд┐рдлреЗрд░рд▓рдордзреВрди рджреБрд╕рд░реНтАНрдпрд╛рдордзреНрдпреЗ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА PPI рдореЙрдбреНрдпреВрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ.

ret_code_t err_code;
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//╨╜╨░╤Б╤В╤А╨░╨╡╨▓╨░╨╡╨╝ ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤
   nrf_drv_gpiote_out_config_t config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(false);//╨▒╤Г╨┤╨╡╨╝ ╨┐╨╡╤А╨╡╨┤╨╡╤А╨│╨╕╨▓╨░╤В╤М ╨┐╨╕╨╜ ╨┤╨╗╤П ╨╕╨╝╨┐╤Г╨╗╤М╤Б╨░
   err_code = nrf_drv_gpiote_out_init(PD_SCK, &config);//╨╜╨░╤Б╤В╤А╨░╨╡╨▓╨░╨╡╨╝ ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤

рдЖрдореНрд╣реА 10 ╬╝s рдЪреНрдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╣ рдбрд╛рд│реА рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ PD_SCL рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рд▓рд╛рдЗрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ.

   nrf_drv_gpiote_in_config_t  gpiote_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);// ╨┐╨╡╤А╨╡╤Е╨╛╨┤ ╤Г╤А╨╛╨▓╨╜╤П ╤Б ╨▓╤Л╤Б╨╛╨║╨╛╨│╨╛ ╨╜╨░ ╨╜╨╕╨╖╨║╨╕╨╣
   nrf_gpio_cfg_input(DOUT, NRF_GPIO_PIN_NOPULL);// ╨╜╨░ ╨▓╤Е╨╛╨┤ ╨▒╨╡╨╖ ╨┐╨╛╨┤╤В╤П╨╢╨║╨╕
   err_code = nrf_drv_gpiote_in_init(DOUT, &gpiote_config, gpiote_evt_handler); 

static void gpiote_evt_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
    nrf_drv_gpiote_in_event_disable(DOUT);//╨╛╤В╨║╨╗╤О╤З╨░╨╡╨╝ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╡
    nrf_drv_timer_enable(&m_timer0);//╨▓╨║╨╗╤О╤З╨░╨╡╨╝ ╤В╨░╨╣╨╝╨╡╤А
}
 

рдЖрдореНрд╣реА HX711 рдЪреА рддрдпрд╛рд░реА рд╕реНрдерд┐рддреА рд╡рд╛рдЪрдгреНрдпрд╛рд╕рд╛рдареА DOUT рдбреЗрдЯрд╛ рд▓рд╛рдЗрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЛ; рдХрдореА рдкрд╛рддрд│реА рдЕрд╕рд▓реНрдпрд╛рд╕, рдПрдХ рд╣рдБрдбрд▓рд░ рдЯреНрд░рд┐рдЧрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рд╡реНрдпрддреНрдпрдп рдЕрдХреНрд╖рдо рдХрд░рддреЛ рдЖрдгрд┐ PD_SCL рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рдШрдбреНрдпрд╛рд│рд╛рдЪреНрдпрд╛ рдбрд╛рд│реА рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯрд╛рдЗрдорд░ рд╕реБрд░реВ рдХрд░рддреЛ.

 err_code = nrf_drv_ppi_channel_alloc(&m_ppi_channel1);
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_assign(m_ppi_channel1,                                         nrf_drv_timer_event_address_get(&m_timer0, NRF_TIMER_EVENT_COMPARE0),                                           nrf_drv_gpiote_out_task_addr_get(PD_SCK));// ╨┐╨╛╨┤╨║╨╗╤О╤З╨░╨╡╨╝ ╤В╨░╨╣╨╝╨╡╤А ╨║ ╨▓╤Л╤Е╨╛╨┤╤Г
   APP_ERROR_CHECK(err_code);
   err_code = nrf_drv_ppi_channel_enable(m_ppi_channel1);// ╨▓╨║╨╗╤О╤З╨░╨╡╨╝ ╨║╨░╨╜╨░╨╗
   APP_ERROR_CHECK(err_code);
   nrf_drv_gpiote_out_task_enable(PD_SCK); 

// gpiote рд╕рдХреНрд╖рдо рдХрд░рд╛

рддреНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА PPI рдореЙрдбреНрдпреБрд▓ рд╕реБрд░реВ рдХрд░рддреЛ рдЖрдгрд┐ рдЖрдордЪрд╛ рдЯрд╛рдпрдорд░ PD_SCL рдЖрдЙрдЯрдкреБрдЯрд╢реА рдЬреЛрдбрддреЛ, рдЬреЗрд╡реНрд╣рд╛ рддреБрд▓рдирд╛рддреНрдордХ рдШрдЯрдирд╛ рдШрдбрддреЗ рддреЗрд╡реНрд╣рд╛ 10 ╬╝s рдЪреНрдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╣ рдкрд▓реНрд╕ рдЬрдирд░реЗрдЯ рдХрд░рддреЛ рдЖрдгрд┐ GPIOTE рдореЙрдбреНрдпреВрд▓ рджреЗрдЦреАрд▓ рдЪрд╛рд▓реВ рдХрд░рддреЛ.


nrf_drv_timer_config_t timer_cfg = NRF_DRV_TIMER_DEFAULT_CONFIG;// ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О
   timer_cfg.frequency = NRF_TIMER_FREQ_1MHz;// ╤В╨░╨║╤В╨╕╤А╤Г╨╡╨╝ ╨╜╨░ ╤З╨░╤Б╤В╨╛╤В╨╡ 1╨Ь╨│╤Ж
   ret_code_t err_code = nrf_drv_timer_init(&m_timer0, &timer_cfg, timer0_event_handler);
   APP_ERROR_CHECK(err_code);
   nrf_drv_timer_extended_compare(&m_timer0,
                                  NRF_TIMER_CC_CHANNEL0,
                                  nrf_drv_timer_us_to_ticks(&m_timer0,
                                                            10),
                                  NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                                  true);// ╤Б╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В ╨┐╨╛ ╤Б╤А╨░╨▓╨╜╨╡╨╜╨╕╤О

рдЖрдореНрд╣реА рд╢реВрдиреНрдп рдЯрд╛рдЗрдорд░ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╣рдБрдбрд▓рд░ рд╕реБрд░реВ рдХрд░рддреЛ.

  if(m_counter%2 != 0 && m_counter<=48){
       buffer <<= 1;// ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╤Б╤З╨╕╤В╨░╨╜╨╜╤Л╤Е ╨┤╨░╨╜╤Л╤Е
        c_counter++;// ╤Б╤З╨╡╤В╤З╨╕╨║ ╨┐╨╛╨╗╨╛╨╢╨╕╤В╨╡╨╗╤М╨╜╤Л╤Е  ╨╕╨╝╨┐╤Г╨╗╤М╤Б╨╛╨▓
           if(nrf_gpio_pin_read(DOUT))buffer++;//╤Б╤З╨╕╤В╤Л╨▓╨░╨╡╨╝ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╨▓╤Е╨╛╨┤╨░
   }

рдЯрд╛рдЗрдорд░ рд╣рдБрдбрд▓рд░рдордзреНрдпреЗ рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдШрдбрддреЗ. рдирд╛рдбреАрдЪрд╛ рдХрд╛рд▓рд╛рд╡рдзреА 20 ╬╝s рдЖрд╣реЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╖рдо рдХрдбрдзрд╛рдиреНрдпрд╛рдВрдордзреНрдпреЗ (рд╡рд╛рдврддреНрдпрд╛ рдХрд╛рдард╛рд╡рд░) рд╕реНрд╡рд╛рд░рд╕реНрдп рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ 24 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╛рд╣реА рдЖрдгрд┐ 48 рдШрдЯрдирд╛ рдЖрд╣реЗрдд. рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдо рдШрдЯрдиреЗрд╕рд╛рдареА, DOUT рд╡рд╛рдЪрд▓реЗ рдЬрд╛рддреЗ

рдбреЗрдЯрд╛рд╢реАрдЯрд╡рд░реВрди рдЕрд╕реЗ рджрд┐рд╕реВрди рдпреЗрддреЗ рдХреА рдбрд╛рд│реАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрд┐рдорд╛рди 25 рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреА 128 рдЪреНрдпрд╛ рд╡рд╛рдвреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ (рдХреЛрдбрдордзреНрдпреЗ рдореА 25 рдбрд╛рд│реА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЖрд╣реЗрдд), рд╣реЗ 50 рдЯрд╛рдЗрдорд░ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪреНрдпрд╛ рд╕рдорддреБрд▓реНрдп рдЖрд╣реЗ, рдЬреЗ рдбреЗрдЯрд╛ рдлреНрд░реЗрдордЪрд╛ рд╢реЗрд╡рдЯ рджрд░реНрд╢рд╡рддреЗ.

 ++m_counter;// ╤Б╤З╨╡╤В╤З╨╕╨║ ╤Б╨╛╨▒╤Л╤В╨╕╨╣
if(m_counter==50){
      nrf_drv_timer_disable(&m_timer0);// ╨╛╤В╨║╨╗╤О╤З╨░╨╡╨╝ ╤В╨░╨╣╨╝╨╡╤А
       m_simple_timer_state = SIMPLE_TIMER_STATE_STOPPED;//
       buffer = buffer ^ 0x800000;
       hx711_stop();//j╨╛╤В╨║╨╗╤О╤З╨░╨╡╨╝ hx711
       }
   

рдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдЯрд╛рдЗрдорд░ рдмрдВрдж рдХрд░рддреЛ рдЖрдгрд┐ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЛ (рдбреЗрдЯрд╛рд╢реАрдЯрдиреБрд╕рд╛рд░) рдЖрдгрд┐ HX711 рдХрдореА рд╡реАрдЬ рд╡рд╛рдкрд░ рдореЛрдбрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЛ.


static void repeated_timer_handler(void * p_context)
{
   nrf_drv_gpiote_out_toggle(LED_2);
   if(m_simple_timer_state == SIMPLE_TIMER_STATE_STOPPED){
      	hx711_start();// ╨▓╨║╨╗╤О╤З╨░╨╡╨╝ hx711
       nrf_drv_gpiote_out_toggle(LED_1);
       m_simple_timer_state = SIMPLE_TIMER_STATE_STARTED;
   }
  
}
/**@brief Create timers.
*/
static void create_timers()
{
   ret_code_t err_code;
 
   // Create timers
   err_code = app_timer_create(&m_repeated_timer_id,
                               APP_TIMER_MODE_REPEATED,
                               repeated_timer_handler);
   APP_ERROR_CHECK(err_code);
}

рдЖрдореНрд╣реА RTC рдЯрд╛рдЗрдорд░рдХрдбреВрди 10 рд╕реЗрдХрдВрджрд╛рдВрдЪреНрдпрд╛ рдЕрдВрддрд░рд╛рдиреЗ (рд╣реЗ рддреБрдордЪреНрдпрд╛ рд╡рд┐рд╡реЗрдХрдмреБрджреНрдзреАрдиреБрд╕рд╛рд░) рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЛ рдЖрдгрд┐ рд╣рдБрдбрд▓рд░рдордзреНрдпреЗ HX711 рд▓рд╛рдБрдЪ рдХрд░рддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ DOUT рд▓рд╛рдЗрдирд╡рд░ рд╡реНрдпрддреНрдпрдп рдпреЗрддреЛ.

рдЖрдгрдЦреА рдПрдХ рдореБрджреНрджрд╛ рдЖрд╣реЗ, рд▓реЙрдЧ UART рджреНрд╡рд╛рд░реЗ рдЖрдЙрдЯрдкреБрдЯ рдЖрд╣реЗрдд (рдмреЙрдб рд░реЗрдЯ 115200, TX - 6 рдкрд┐рди, RX - 8 рдкрд┐рди) рд╕рд░реНрд╡ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ sdk_config.h рдордзреНрдпреЗ рдЖрд╣реЗрдд

HX711 ADC рд▓рд╛ NRF52832 рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ

рдирд┐рд╖реНрдХрд░реНрд╖

рдЖрдкрдг рд╕рд░реНрд╡рд╛рдВрдЪреЗ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣рд╛ рд▓реЗрдЦ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓ рдЖрдгрд┐ рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рдЙрдкрд╛рдп рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдореМрд▓реНрдпрд╡рд╛рди рд╡реЗрд│ рдХрдореА рдХрд░реЗрд▓. рдорд▓рд╛ рдЕрд╕реЗ рдореНрд╣рдгрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдиреЙрд░реНрдбрд┐рдХ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордордзреНрдпреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рддрд╛рдВрддреНрд░рд┐рдХ рджреГрд╖реНрдЯреАрдХреЛрди рдКрд░реНрдЬрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдЦреВрдкрдЪ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ.

PS

рдкреНрд░рдХрд▓реНрдк рдЕрджреНрдпрд╛рдк рд╡рд┐рдХрд╛рд╕рд╛рдзреАрди рдЖрд╣реЗ, рдореНрд╣рдгреВрди рд╣рд╛ рд╡рд┐рд╖рдп рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд рдореА рд╡рдЬрди рд╕реЗрдиреНрд╕рд░ рдХреЕрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрд╕реЗрдЪ BLE рд╕реНрдЯреЕрдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрди.

рдореЕрдЯреНрд░реАрдЕрд▓

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛