- Vývojová súprava nRF52:
- Zabudované štúdio Segger
- DHT11 s nRF52DK
- Ako pracovať s Bluetooth Low Energy (BLE)?
- Schéma služieb / charakteristík BLE
- Vysvetlenie programu nRF52 BLE
- Testovanie nášho programu pomocou nRF Connect
Vďaka fitness páskam, inteligentným hodinkám a iným nositeľným zariadeniam je čoraz populárnejšie používanie Bluetooth 5 / Bluetooth Low Energykomunikačné štandardy sa vo veľkej miere prijímajú. BLE nám pomáha vymieňať si údaje na krátku vzdialenosť s veľmi malým výkonom, čo je veľmi dôležité pre zariadenia napájané z batérie, ako sú nositeľné zariadenia. Pomáha nám tiež nastaviť bezdrôtové siete BLE mesh, táto funkcia sa hodí pre zariadenia domácej automatizácie, kde musia viaceré zariadenia navzájom komunikovať v uzavretom prostredí. Na vykonávanie niektorých základných funkcií BLE sme už používali BLE s Raspberry Pi a BLE s ESP32. Inžinieri experimentujú s BLE s cieľom navrhnúť prenosné bezdrôtové zariadenia, ktoré môžu dlho pracovať s malými batériami, a na prácu s BLE je k dispozícii niekoľko vývojových súprav. V našej nedávnej recenzii na Arduino Nano 33 sme si tiež všimli, že doska obsahuje nRF52840 s funkciami BLE.
V tomto tutoriále preskúmame ďalšiu vzrušujúcu a populárnu vývojovú dosku s názvom nRF52 DK na meranie teploty a vlhkosti pomocou BLE. Profily snímania prostredia BLE predvolene podporujú širokú škálu parametrov prostredia, ale tento výukový program je obmedzený iba na hodnoty teploty a vlhkosti. Toto riešenie je prepojené so smartfónom cez Bluetooth s nízkou spotrebou energie a poskytuje časté aktualizácie týkajúce sa parametrov prostredia, tj. Teploty, vlhkosti. Budeme používať snímač DHT1 a meranie teploty sa bude robiť s rozlíšením 0,01 stupňa Celzia a meranie vlhkosti sa bude robiť s rozlíšením 0,01 percenta.
Vývojová súprava nRF52:
nRF52DK je kompletná prototypová platforma pre aplikáciu Bluetooth Low Energy a 2,4 GHz bezdrôtový internet vecí. Vývojová súprava podporuje rôzne štandardné severské nástrojové reťazce, ako je open-source, GCC a komerčné integrované vývojové prostredia, ako sú Keil, IAR a Segger Embedded Studio atď. Nordic tiež poskytuje plnohodnotnú súpravu na vývoj softvéru pre nRF52, ktorá obsahuje úplnú podporu pre nRF52DK.
nRF52DK je napájaný z nRF52832 ARM Cortex-M4F mikrokontroléra, ktorý je integrovaný 512 kB Flash Memor a 64 kB SRAM. nRF52DK má integrovaný Segger J-Link On Board debugger, ktorý poskytuje jednoduchšie a rýchlejšie ladenie bez externých / ďalších ladiacich zariadení jtag. Obsahuje tiež konektor kompatibilný s Arduino Uno Rev3, ktorý podporuje prepojenie analógových a digitálnych vstupov s mikroprocesorom a obsahuje aj štandardné komunikačné protokoly ako I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) a UART (Universal Asynchronous Receiver and Transmitter). Táto vývojová súprava je navrhnutá s integrovanou zabudovanou anténou s plošnými spojmi, ktorá poskytuje bezdrôtovú komunikáciu na krátku vzdialenosť pomocou technológie Bluetooth Low Energy pre pripojenie k inteligentnému telefónu, notebookom a tabletom.
Zabudované štúdio Segger
Na programovanie vývojovej dosky použijeme Segger Embedded Studio s nRF52. Segger Embedded Studio je výkonné integrované vývojové prostredie (IDE) C / C ++ zamerané špeciálne na vývoj zabudovaných systémov. Toto poskytuje kompletné riešenie typu „všetko v jednom“, ktoré obsahuje všetko potrebné pre zabudované programovanie v C, vývoj a ladenie. Patrí sem kompletný pracovný tok pre programovanie a vývoj vstavaných systémov, ktorý zahŕňa správu projektov, editor a debugger podporujúci zariadenia ARM Cortex. Toto výkonné a ľahko použiteľné IDE je pre severských zákazníkov s plnou licenciou bez akýchkoľvek obmedzení týkajúcich sa veľkosti kódu úplne zadarmo. IDE je možné stiahnuť z odkazu uvedeného nižšie,
Stiahnite si Segger Embedded Studio
DHT11 s nRF52DK
DHT11 je plnohodnotný snímač teploty a vlhkosti s komponentom na meranie vlhkosti odporového typu a komponentom na meranie teploty typu NTC. Ponúka vynikajúcu kvalitu, rýchlejšiu odozvu a nákladovú efektívnosť. Štandardne sú všetky snímače DHT11 kalibrované v laboratóriu, čo vedie k extrémnej presnosti a spoľahlivosti. Komunikuje pomocou systému jednožilového sériového rozhrania a ďalšie technické údaje sú uvedené nižšie
Špecifikácie DHT11:
- Rozsah vlhkosti: 20 - 90% relatívnej vlhkosti
- Teplotný rozsah: 0 - 50 stupňov Celzia
- Presnosť vlhkosti: ± 5 ° RH
- Teplotná presnosť: ± 2 ℃
Schéma časovania DHT11:
Čítanie údajov zo snímača DHT11 je pomerne jednoduché pomocou vyššie uvedeného časovacieho diagramu. Postup je podobný ako u každého radiča a tento snímač sme už použili s inými vývojovými platformami ako
- Senzor DHT11 s Raspberry Pi
- Senzor DHT11 s PIC16F877A
- Senzor DHT11 s STM32F103C8
- Senzor DHT11 s NodeMCU
Ak chcete prepojiť snímač teploty a vlhkosti DHT11 s vývojovou súpravou nRF52, postupujte podľa schémy pripojenia uvedenej nižšie.
Na pripojenie snímača k mojej doske používam konektorový modul, takže moje konečné nastavenie vyzerá takto
Vývojový diagram pre komunikáciu s DHT11:
Nasledujúci vývojový diagram vysvetľuje logický tok programu, ktorý budeme používať na komunikáciu medzi nRF52DK a DHT11
Formát údajov:
Ako pracovať s Bluetooth Low Energy (BLE)?
Aby sme pochopili, ako používať funkciu BLE, musíme pochopiť niekoľko základných terminológií, ktoré sú vysvetlené nižšie. Môžete si tiež prečítať článok ESP32 BLE a dozvedieť sa viac o BLE
Generický prístupový profil (GAP)
Generický prístupový profil nesie úplnú zodpovednosť za vytvorenie spojenia pre komunikáciu medzi periférnymi zariadeniami BLE a centrálnymi zariadeniami. GAP tiež poskytuje rôzne procedúry vrátane skenovania / objavenia zariadenia, nadviazania spojenia medzi vrstvami, ukončenia spojenia, overenia totožnosti bezpečnostných prvkov a plnohodnotnej konfigurácie zariadenia. GAP funguje v nasledujúcich stavoch zariadenia
Štáty GAP |
Popis |
Pohotovostný režim |
Počiatočný stav zariadenia po obnovení |
Inzerent |
Reklama na zariadení s údajmi, ktoré pomáhajú pri skenovaní iniciátora |
Skener |
Prijme a odošle žiadosť o skenovanie inzerentovi |
Iniciátor |
Odošle žiadosť o pripojenie na vytvorenie odkazu |
Otrok / Pán |
Pri pripojení zariadenie ako otrok, ak je inzerent, majster, ak je iniciátor |
Vrstva profilu generického atribútu (GATT)
GATT je skratka pre generickú atribútovú profilovú vrstvu, je zodpovedná za dátovú komunikáciu medzi dvoma zariadeniami BLE (periférne a centrálne). Dátová komunikácia je charakterizovaná vo forme charakteristík, ktoré komunikujú a ukladajú údaje. Zariadenie BLE hrá dve rôzne roly pre komunikáciu zariadenia uvedené nižšie,
- GATT Server obsahuje informácie o charakteristikách, ktoré sa použijú na čítanie a zápis. V našom tutoriáli sú snímač DHT11 a vývojár. súprava je náš server GATT.
- Klient GATT číta a zapisuje údaje z / na server GATT. Smartfón je klient GATT, ktorý číta a zapisuje údaje do našej dosky senzorov.
Bluetooth SIG
Bluetooth Special Interest Group (SIG) je organizácia pre štandardy, ktorá sleduje vývoj štandardov Bluetooth a udeľovanie licencií pre technológie Bluetooth. Skupina SIG nevyrába ani nepredáva žiadne produkty Bluetooth. Definuje špecifikáciu a štandardizáciu Bluetooth. Definujú jedinečný identifikátor pre nízkoenergetický profil Bluetooth a príslušné vlastnosti. Špecifikáciu profilu GATT nájdete na nižšie uvedenom odkaze
Špecifikácie profilu GATT
Na základe špecifikácie GATT uvedenej vo vyššie uvedenom odkaze sme zhromaždili jedinečné identifikátory požadované pre náš projekt, ktoré sú uvedené v tabuľke nižšie.
Profil / charakteristika |
UUID |
GAP (všeobecný prístup) |
0x1800 |
GATT (všeobecný atribút) |
0x1801 |
ESS (snímanie prostredia) |
0x181A |
Teplota |
0x2A6E |
Vlhkosť |
0x2A6F |
Schéma služieb / charakteristík BLE
BLE UUID
UUID |
16-bitová hodnota |
128 bit UUID |
Služba EŠS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Vlhkosť vzduchu |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Teplotné charakteristiky
Nehnuteľnosť |
Popis |
Jednotka |
Stupňa Celzia s rozlíšením 0,01 stupňa |
Formát |
sint16 |
UUID |
0x2A6E |
Desatinné číslo |
2 |
Čítať |
Povinné |
Vlhkostné charakteristiky
Nehnuteľnosť |
Popis |
Jednotka |
Percento s rozlíšením 0,01 percenta |
Formát |
uint16 |
UUID |
0x2A6F |
Desatinné číslo |
2 |
Čítať |
Povinné |
Vysvetlenie programu nRF52 BLE
Na programovanie našej vývojovej súpravy nRF52 budeme používať sadu nRF5 SDK. nRF5 SDK je kompletná súprava na vývoj softvéru integrovaná s mnohými profilmi Bluetooth Low Energy, GATT Serializer a podporou ovládačov pre všetky periférie na SoC série nRF5. Táto sada SDK pomáha vývojárom zostavovať plnohodnotné, spoľahlivé a bezpečné nízkoenergetické aplikácie Bluetooth pomocou mikrokontrolérov radu nRF52 a nRF51. Celý program je možné stiahnuť odtiaľto, vysvetlenie kódu je nasledovné.
Nakonfigurujte pin DATA DHT11 ako vstup na nrf52 s povolením pull up. Stav kolíka by mal byť vysoký, aby sa potvrdilo, že nRF52 poskytuje správne PULLUP pre dátový kolík DHT11
/ * nastavený na vstup a skontrolovať, či sa signál vytiahne nahor * / Data_SetInput (); DelayUSec (50); if (Data_GetVal () == 0) {návrat DHT11_NO_PULLUP; }
Generujte signál START z mikrokontroléra nRF52 a skontrolujte potvrdzovací signál.
/ * poslať štartovací signál * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * udržiavať nízky signál najmenej 18 ms * / Data_SetInput (); DelayUSec (50); / * skontrolujte potvrdzovací signál * / if (Data_GetVal ()! = 0) {/ * signál musí byť senzorom stiahnutý nízko * / návrat DHT11_NO_ACK_0; } / * počkaj max. 100 us na potvrdzovací signál zo senzora * / cntr = 18; while (Data_GetVal () == 0) {/ * počkajte, kým signál stúpne * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_1; Signál / * by mal byť pre ACK hore * /}} / * počkajte, kým znova neklesne, koniec sekvencie potvrdenia * / cntr = 18; while (Data_GetVal ()! = 0) {/ * počkajte, kým signál neklesne * / DelayUSec (5); if (--cntr == 0) {return DHT11_NO_ACK_0; Signál / * by tu mal byť opäť na nule * /}}
Teraz si prečítajte 40 bitov dát, ktoré obsahujú 2 bajty teploty, 2 bajty vlhkosti a 1 bajt kontrolného súčtu.
/ * teraz načíta 40-bitové dáta * / i = 0; dáta = 0; loopBits = 40; do {cntr = 11; / * čakať max 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * počkajte max. 75 us * / zatiaľ (Data_GetVal ()! = 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_1; }} data << = 1; / * nasledujúci dátový bit * / if (cntr <10) {/ * vysoký dátový signál> 30 us ==> dátový bit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * ďalší bajt * / buffer = data; i ++; dáta = 0; }} while (- loopBits! = 0);
Overte údaje pomocou kontrolného súčtu.
/ * test CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Manipulujte a skladujte teplotu a vlhkosť
/ * ukladanie dátových hodnôt pre volajúceho * / vlhkosť = ((int) buffer) * 100 + buffer; teplota = ((int) pufor) * 100 + pufor;
Inicializujte službu Logger SDK nRF5. Sada nRF52 SDK je vybavená rozhraním na riadenie protokolovania s názvom nrf_log a na protokolovanie informácií používa predvolený backend. Predvoleným back-endom bude sériový port. Tu inicializujeme aj nrf_log ovládacie rozhranie a nrf_log predvolené backendy .
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK má funkciu časovača aplikácie. Aplikačný časovač umožňuje vytvárať viac inštancií časovača na základe periférie RTC1. Tu inicializujeme aplikačný časovací modul nRF5. V tomto riešení sa používajú dva aplikačné časovače a interval aktualizácie údajov.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK má plne funkčný modul správy napájania, pretože zariadenia BLE musia pracovať niekoľko mesiacov na gombíkovú batériu. Správa napájania hrá v aplikáciách BLE zásadnú úlohu. Modul správy napájania nRF52 zvláda úplne to isté. Tu inicializujeme modul správy napájania nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
Sada nRF52 SDK má zabudovaný hexadecimálny súbor firmvéru Nordic Soft Device, ktorý obsahuje nízkoenergetický centrálny a periférny zásobník Bluetooth. Tento vysoko kvalifikovaný protokolový zásobník obsahuje GATT, GAP, ATT, SM, L2CAP a Link Layer. Tu sledujeme inicializačnú sekvenciu, ktorá inicializovala rádiový zásobník BLE nRF5 (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Nakonfigurujte zásobník BLE pomocou predvolených nastavení. // Načíta počiatočnú adresu pamäte RAM aplikácie. uint32_t ram_start = 0; err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG, & ram_start); APP_ERROR_CHECK (err_code); // Povoliť zásobník BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Zaregistrujte obslužnú rutinu pre udalosti BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP je zodpovedný za skenovanie / objavovanie zariadení, vytváranie odkazov, ukončovanie odkazov, inicializáciu bezpečnostných funkcií a konfiguráciu. GAP sa vyznačuje kľúčovými parametrami pripojenia, ako je interval pripojenia, latencia otrokov, časový limit dohľadu, atď. Týmto sa inicializujú parametre pripojenia všeobecného profilu prístupu
ret_code_terr_code; ble_gap_conn_params_tgap_conn_params; ble_gap_conn_sec_mode_t sec_mode; BLE_GAP_CONN_SEC_MODE_SET_OPEN (& sec_mode); err_code = sd_ble_gap_device_name_set (& sec_mode, (const uint8_t *) DEVICE_NAME, strlen (DEVICE_NAME)); APP_ERROR_CHECK (err_code); memset (& gap_conn_params, 0, sizeof (gap_conn_params)); gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; gap_conn_params.slave_latency = SLAVE_LATENCY; gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; err_code = sd_ble_gap_ppcp_set (& gap_conn_params); APP_ERROR_CHECK (err_code);
GATT je zodpovedná za dátovú komunikáciu medzi periférnymi a centrálnymi zariadeniami BLE. Modul nRF52 GATT je užitočný na vyjednávanie a sledovanie maximálnej veľkosti ATT_MTU. Tu inicializujeme modul nRF52 SDK Generic Attribute Module, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
GATT vykonáva dátovú komunikáciu vo forme služieb a charakteristík. Tu inicializujeme služby snímania prostredia GATT, ktoré zahŕňajú inicializáciu charakteristík ako teplota a vlhkosť.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Inicializuje modul zápisu vo fronte. qwr_init.error_handler = nrf_qwr_error_handler; err_code = nrf_ble_qwr_init (& m_qwr, & qwr_init); APP_ERROR_CHECK (err_code); m_ess.notif_write_handler = ble_ess_notif_write_handler; err_code = ble_ess_init (& m_ess); APP_ERROR_CHECK (err_code);
Reklama zohráva v prostredí aplikácie BLE zásadnú úlohu. pakety obsahujú informácie o type adresy, type reklamy, reklamných údajoch, údajoch špecifických pre výrobcu zariadenia a údajoch o odpovedi na skenovanie. Sada nRF52 SDK vybavená reklamným modulom. Tu robíme inicializáciu reklamného modulu s parametrami.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Vytváranie a nastavovanie reklamných údajov. memset (& advdata, 0, sizeof (advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = true; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; memset (& srdata, 0, sizeof (srdata)); srdata.uuids_complete.uuid_cnt = sizeof (adv_uuids) / sizeof (adv_uuids); srdata.uuids_complete.p_uuids = adv_uuids; err_code = ble_advdata_encode (& advdata, m_adv_data.adv_data.p_data, & m_adv_data.adv_data.len); APP_ERROR_CHECK (err_code); err_code = ble_advdata_encode (& srdata, m_adv_data.scan_rsp_data.p_data, & m_adv_data.scan_rsp_data.len); APP_ERROR_CHECK (err_code); ble_gap_adv_params_t adv_params; // Nastavte reklamné parametre. memset (& adv_params, 0, sizeof (adv_params)); adv_params.primary_phy = BLE_GAP_PHY_1MBPS; adv_params.duration = APP_ADV_DURATION; adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; adv_params.p_peer_addr = NULL; adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; adv_params.interval = APP_ADV_INTERVAL; err_code = sd_ble_gap_adv_set_configure (& m_adv_handle, & m_adv_data, & adv_params); APP_ERROR_CHECK (err_code);
Pripojenie BLE sa bude spracovávať a monitorovať pomocou rôznych parametrov pripojenia, ako je oneskorenie aktualizácie prvých parametrov pripojenia, ďalšie postupné oneskorenia, počet aktualizácií, funkcia spätného volania obsluhy udalosti spojenia a obsluha udalosti spätného volania chyby chyby. Tu robíme inicializáciu parametrov založenia pripojenia BLE a obsluhu udalosti spätného volania pre udalosti pripojenia a chybové udalosti.
ret_code_terr_code; ble_conn_params_init_t cp_init; memset (& cp_init, 0, sizeof (cp_init)); cp_init.p_conn_params = NULL; cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; t_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; cp_init.disconnect_on_fail = false; cp_init.evt_handler = on_conn_params_evt; cp_init.error_handler = conn_params_error_handler; err_code = ble_conn_params_init (& cp_init); APP_ERROR_CHECK (err_code);
Po dokončení inicializácie systému začneme inzerovaním názvu zariadenia BLE a informácií o jeho schopnostiach. Odtiaľ je táto periféria viditeľná cez zoznam Ble skenovania smartfónu.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Hlavná slučka beží v intervale 2 sekúnd, sníma teplotu a vlhkosť a aktualizuje pripojené inteligentné zariadenie pomocou čítania alebo oznámenia
pre (;;) { uint16_t teplota, vlhkost; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& teplota, & vlhkosť); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Teplota:% d Vlhkosť:% d \ n", teplota, vlhkosť); if (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, temperature); } else { ble_ess_update_temp (& m_ess, teplota); } if (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, vlhkosť); } else { ble_ess_update_humid (& m_ess, vlhkost); } } updtmrexp = false; } }
Testovanie nášho programu pomocou nRF Connect
nRF Connect je výkonný Bluetooth nástroj s nízkou spotrebou energie, ktorý umožňuje skenovať a skúmať periférne zariadenia s povoleným BLE. nRF Connect pre mobil podporuje širokú škálu štandardných profilov prijatých technológiou Bluetooth SIG. Pomocou toho môžeme overiť náš program, po nainštalovaní aplikácie môžeme spárovať dosku nRF52 s našim telefónom skenovaním BLE zariadení v aplikácii. V atribúte snímania prostredia si môžeme všimnúť aktualizáciu hodnôt teploty a vlhkosti, ako je to znázornené na obrázkoch nižšie.
Hariharan Veerappan je nezávislý konzultant, ktorý má viac ako 15 rokov skúseností s vývojom zabudovaných produktov. Poskytuje poradenské služby pri vývoji zabudovaného firmvéru / Linuxu, poskytuje tiež firemné a online školenia. Hariharan je držiteľom bakalárskeho titulu v odbore elektronika a komunikačné inžinierstvo. Prostredníctvom svojich článkov a tutoriálov sa delí o svoje skúsenosti a myšlienky s čitateľmi Circuit Digest.