1. рдкрд░рд┐рдЪрдп
nrf52832 рдорд╛рдпрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░рд╕рд╛рдареА рджреЛрди рд╣рд╛рдл-рдмреНрд░рд┐рдЬ рдЪрд╛рдпрдиреАрдЬ рд╕реНрдЯреНрд░реЗрди рдЧреЗрдЬрд╕рд╣ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рдЕрдЬреЗрдВрдбреНрдпрд╛рд╡рд░ рд╣реЛрддреЗ.
рд╣реЗ рдХрд╛рд░реНрдп рд╕реЛрдкреЗ рдирд╡реНрд╣рддреЗ, рдХрд╛рд░рдг рдорд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реБрдЧрдо рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛. рдиреЙрд░реНрдбрд┐рдХ рд╕реЗрдореАрдХрдВрдбрдХреНрдЯрд░рдЪреНрдпрд╛ SDK рдордзреНрдпреЗ тАЬрд╡рд╛рдИрдЯрд╛рдЪреЗ рдореВрд│тАЭ рдЕрд╕рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЬрд╛рд╕реНрдд рдЖрд╣реЗ - рд╕рддрдд рдЖрд╡реГрддреНрддреА рдЕрджреНрдпрддрдиреЗ, рдХрд╛рд╣реА рдЕрдирд╛рд╡рд╢реНрдпрдХрддрд╛ рдЖрдгрд┐ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрдгрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛. рдорд▓рд╛ рд╕реБрд░рд╡рд╛рддреАрдкрд╛рд╕реВрди рд╕рд░реНрд╡рдХрд╛рд╣реА рд▓рд┐рд╣рд╛рдпрдЪреЗ рд╣реЛрддреЗ.
рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рдпрд╛ рдЪрд┐рдкрдордзреНрдпреЗ BLE рд╕реНрдЯреЕрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдКрд░реНрдЬрд╛ рдмрдЪрдд рдореЛрдбрд╕рд╛рдареА "рдЧреБрдбреАрдЬ" рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЪ рдЖрд╣реЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣рд╛ рд╡рд┐рд╖рдп рдЕрдЧрджреА рд╕рдорд░реНрдкрдХ рдЖрд╣реЗ. рдкрдг рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдмрд░реЗрдЪ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рд▓реЗ рдЧреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдореА рддрд╛рдВрддреНрд░рд┐рдХ рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЬрд╛рд╕реНрдд рдЦреЛрд▓рд╡рд░ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА.
2. рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╡рд░реНрдгрди
рд▓реЛрд╣:
- 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 рдордзреНрдпреЗ рдЖрд╣реЗрдд
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдкрдг рд╕рд░реНрд╡рд╛рдВрдЪреЗ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣рд╛ рд▓реЗрдЦ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓ рдЖрдгрд┐ рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рдЙрдкрд╛рдп рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдореМрд▓реНрдпрд╡рд╛рди рд╡реЗрд│ рдХрдореА рдХрд░реЗрд▓. рдорд▓рд╛ рдЕрд╕реЗ рдореНрд╣рдгрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдиреЙрд░реНрдбрд┐рдХ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордордзреНрдпреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рддрд╛рдВрддреНрд░рд┐рдХ рджреГрд╖реНрдЯреАрдХреЛрди рдКрд░реНрдЬрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди рдЦреВрдкрдЪ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ.
PS
рдкреНрд░рдХрд▓реНрдк рдЕрджреНрдпрд╛рдк рд╡рд┐рдХрд╛рд╕рд╛рдзреАрди рдЖрд╣реЗ, рдореНрд╣рдгреВрди рд╣рд╛ рд╡рд┐рд╖рдп рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд рдореА рд╡рдЬрди рд╕реЗрдиреНрд╕рд░ рдХреЕрд▓рд┐рдмреНрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрд╕реЗрдЪ BLE рд╕реНрдЯреЕрдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрди.
рдореЕрдЯреНрд░реАрдЕрд▓
рдкреНрд░рдХрд▓реНрдк рдХреЛрдб -
рдЗрдВрдЧреНрд░рдЬреАрдордзреНрдпреЗ HX711 рд╕рд╛рдареА рдбреЗрдЯрд╛рд╢реАрдЯ -
рд╕реНрдЯреНрд░реЗрди рдЧреЗрдЬрдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирдЪреЗ рд╡рд░реНрдгрди
рд╕реНрддреНрд░реЛрдд: www.habr.com