SILICON LABS 21Q2 Bluetooth Features Lab
សៀវភៅណែនាំអំពីមុខងារ Bluetooth 21Q2
សៀវភៅណែនាំមន្ទីរពិសោធន៍នេះណែនាំអ្នកតាមរយៈមុខងារ Bluetooth SDK ថ្មីមួយចំនួនដែលត្រូវបានណែនាំរវាងការចេញផ្សាយ 20Q4 និង 21Q2 ។ នៅក្នុងមន្ទីរពិសោធន៍នេះ យើងនឹងបង្កើតអតីត NCPample និងសរសេរកម្មវិធីម៉ាស៊ីនជាភាសា Python ។ ដោយប្រើមុខងារ GATT ថាមវន្តថ្មី យើងក៏នឹងបង្កើតមូលដ្ឋានទិន្នន័យ GATT ពីកម្មវិធីម៉ាស៊ីនជំនួសឱ្យការប្រើប្រាស់ GATT Configurator ។ ទីបំផុតមុខងារ LE Power Control ត្រូវបានបង្ហាញដោយការពង្រីកកម្មវិធីម៉ាស៊ីន។![]()
តម្រូវការជាមុន
ដើម្បីបញ្ចប់មន្ទីរពិសោធន៍នេះ អ្នកនឹងត្រូវការដូចខាងក្រោម៖
- Thunderboard BG22s ពីរឬ WSTKs ពីរជាមួយនឹងបន្ទះវិទ្យុ EFR32BG/EFR32MG ឬការលាយបញ្ចូលគ្នានៃទាំងនេះ
- បានដំឡើង Simplicity Studio 5 ជាមួយនឹង Gecko SDK v3.2 រួមទាំង Bluetooth SDKv3.2
- កុំព្យូទ័រដែល Python v3.6 ឬថ្មីជាងនេះត្រូវបានដំឡើង
ការបំភ្លឺឧបករណ៍គោលដៅសម្រាប់មុខងារ NCP
- ភ្ជាប់បន្ទះវិទ្យុទាំងពីររបស់អ្នក ហើយបើក Simplicity Studio 5
- ជ្រើសរើសបន្ទះវិទ្យុមួយនៅលើផ្ទាំង Debug Adapters
- កំណត់ SDK ដែលពេញចិត្តទៅ v3.2.0 នៅលើ Overview ផ្ទាំងនៃ Launcher view
- បើក Exampផ្ទាំង គម្រោង និងការបង្ហាញ
- ស្វែងរកប៊្លូធូសថ្មី - ការបង្ហាញ NCP ។
- ចុច រត់ ដើម្បីបញ្ចេញរូបភាពគោលដៅ NCP ទៅកាន់ក្តារ។

(ចំណាំ៖ ផ្ទុយពីប៊្លូធូស - NCP ទទេ គម្រោងនេះមិនរួមបញ្ចូលមូលដ្ឋានទិន្នន័យ GATT ដែលបានសាងសង់ជាមុនទេ ប៉ុន្តែវាមានដំណើរការ GATT API ថាមវន្ត ដែលជាតម្រូវការជាមុនសម្រាប់ផ្នែកបន្ទាប់)
- ធ្វើជំហានដូចគ្នាម្តងទៀតសម្រាប់បន្ទះវិទ្យុផ្សេងទៀត។
បង្កើតកម្មវិធី Bluetooth Server នៅក្នុង Python
ការចាប់ផ្តើម
- កញ្ចប់ pybgapi ផ្តល់នូវលទ្ធភាពក្នុងការចេញពាក្យបញ្ជា BGAPI ទៅកាន់ឧបករណ៍គោលដៅពីកុំព្យូទ័រដោយប្រើភាសាសរសេរកម្មវិធី Python ។ ដើម្បីដំឡើងកញ្ចប់នេះ សូមវាយបញ្ចូលដូចខាងក្រោមក្នុងបន្ទាត់ពាក្យបញ្ជា៖ pip ដំឡើង pybgapi សម្រាប់ព័ត៌មានបន្ថែមអំពីការចូលមើលកញ្ចប់ https://pypi.org/project/pybgapi/
- ស្វែងរកនិយមន័យ BGAPI ចុងក្រោយបង្អស់ file ក្រោម
- C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2.0\protocol\bluetooth\api\sl_bt.xapi ហើយចម្លងវាទៅក្នុងថតឯកសារការងាររបស់អ្នក។
- បើក python bash (វាយ python ក្នុង CLI)
- នាំចូលបណ្ណាល័យ bgapi ដោយប្រើពាក្យបញ្ជាខាងក្រោម៖ >>> នាំចូល bgapi
- ស្វែងរកលេខច្រក COM (ឧទាហរណ៍ COM49) នៃបន្ទះវិទ្យុរបស់អ្នក។ អ្នកគួរតែរកមើល “ច្រក JLink CDC UART” នៅក្នុងកម្មវិធីគ្រប់គ្រងឧបករណ៍ ឬនៅក្នុងកម្មវិធីស្ថានីយដែលអ្នកចូលចិត្ត។

- ភ្ជាប់ទៅបន្ទះវិទ្យុរបស់អ្នក៖
- >>> ការតភ្ជាប់ = bgapi.SerialConnector('COM49')
- ចាប់ផ្តើមបណ្ណាល័យ pybgapi សម្រាប់ថ្នាំងនេះ៖
- >>> node = bgapi.BGLib(connection,'sl_bt.xapi')
- បើកការទំនាក់ទំនង BGAPI ឆ្ពោះទៅរកថ្នាំងនេះ៖
- >>> node.open()
- ពិនិត្យមើលថាតើអ្នកអាចទំនាក់ទំនងជាមួយក្រុមប្រឹក្សាភិបាលដោយប្រើពាក្យបញ្ជា system_hello() ។ អ្នកគួរតែទទួលបានការឆ្លើយតប system_hello៖
- >>> node.bt.system.hello()
- bt_rsp_system_hello(លទ្ធផល=0)
- >>> node.bt.system.hello()
- កំណត់ថ្នាំងរបស់អ្នកឡើងវិញដោយប្រើពាក្យបញ្ជាខាងក្រោម៖
- node.bt.system.reset(0)
- ឥឡូវនេះអ្នកគួរតែទទួលបានព្រឹត្តិការណ៍ system_boot ។ ដើម្បីទៅយកព្រឹត្តិការណ៍ចុងក្រោយ សូមប្រើពាក្យបញ្ជាខាងក្រោម៖
- evt = node.get_events(max_events=1)
- បោះពុម្ព(evt)
- [bt_evt_system_boot(major=3, minor=2, patch=0, build=774, bootloader=17563648, hw=1, hash=1181938724)]
ការកសាងមូលដ្ឋានទិន្នន័យ GATT
- ប៊្លូធូស - កម្មវិធីគោលដៅ NCP មិនរួមបញ្ចូលមូលដ្ឋានទិន្នន័យ GATT ដែលបានសាងសង់ជាមុនទេ។ នៅទីនេះយើងនឹងបង្កើតមូលដ្ឋានទិន្នន័យពីកូដ។ ជាដំបូងចាប់ផ្តើមវគ្គសម្រាប់ការកសាងមូលដ្ឋានទិន្នន័យ៖
- >>> session = node.bt.gattdb.new_session().session
- បន្ថែមសេវាកម្មថ្មីទៅមូលដ្ឋានទិន្នន័យ GATT ។ នៅទីនេះយើងនឹងបន្ថែមសេវាចូលប្រើទូទៅដែលបានអនុម័តដោយប៊្លូធូស SIG ។ នេះគឺជាសេវាកម្មចម្បង (0x0) ដែលមិនកំណត់ទង់ជាតិ (0x0) និងជាមួយ 16bit UUID (0x1800)។
- សេវា = node.bt.gattdb.add_service(វគ្គ, 0, 0, bytes.fromhex(“0018”)).សេវាកម្ម
- បន្ថែមលក្ខណៈថ្មីទៅសេវាកម្ម។ នៅទីនេះយើងនឹងបន្ថែមលក្ខណៈឈ្មោះឧបករណ៍ទៅសេវាកម្មចូលប្រើទូទៅជាមួយនឹងលក្ខណៈសម្បត្តិ READ (0x2) គ្មានតម្រូវការសុវត្ថិភាព (0x0) គ្មានទង់ (0x0) 16bit UUID (0x2a00) ប្រវែងអថេរ (0x2) ប្រវែងអតិបរមា 20 និង ជាមួយនឹងតម្លៃដំបូងនៃ “PyBGAPI
Exampឡេ”៖
- >>> char = node.bt.gattdb.add_uuid16_characteristic(វគ្គ សេវាកម្ម 2, 0, 0, bytes.fromhex('002a'), 2,
- 20, បៃ('PyBGAPI Example','utf-8'))) លក្ខណៈ
- 3.15 បើកដំណើរការសេវាកម្មថ្មី៖
- >>> node.bt.gattdb.start_service (វគ្គ សេវាកម្ម)
- bt_rsp_gattdb_start_service(លទ្ធផល=0)
- ធ្វើឱ្យមុខងារថ្មីសកម្ម៖
- >>> node.bt.gattdb.start_characteristic(វគ្គ, តួអក្សរ)
- bt_rsp_gattdb_start_characteristic(លទ្ធផល=0)
- >>> node.bt.gattdb.start_characteristic(វគ្គ, តួអក្សរ)
- រក្សាទុកការផ្លាស់ប្តូរ និងបិទវគ្គកែសម្រួលមូលដ្ឋានទិន្នន័យ៖
- >>> node.bt.gattdb.commit(វគ្គ)
- bt_rsp_gattdb_commit(លទ្ធផល=0)
ការភ្ជាប់ទៅម៉ាស៊ីនមេ
- 3.18 ឥឡូវនេះយើងមានឈ្មោះឧបករណ៍នៅក្នុងមូលដ្ឋានទិន្នន័យ GATT យើងអាចចាប់ផ្តើមការផ្សាយពាណិជ្ជកម្ម។ ជង់នឹងផ្សព្វផ្សាយឧបករណ៍ដោយស្វ័យប្រវត្តិជាមួយនឹងឈ្មោះដែលបានកំណត់នៅក្នុងមូលដ្ឋានទិន្នន័យ GATT របស់វា៖
- >>> advertiser_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(លទ្ធផល=0)
- ចាប់ផ្តើម EFR Connect នៅលើទូរសព្ទរបស់អ្នក ហើយស្វែងរកការផ្សាយពាណិជ្ជកម្មឧបករណ៍របស់អ្នកជា “PyBGAPI Exampលេ”
- អ្នកអាចភ្ជាប់ទៅឧបករណ៍ និងស្វែងរកមូលដ្ឋានទិន្នន័យ GATT របស់វា ដែលឥឡូវនេះមានលក្ខណៈឈ្មោះឧបករណ៍
ចំណាំ៖ ប្រសិនបើអ្នកចង់បានអតីតរហ័សample ដោយមិនរំខានជាមួយមូលដ្ឋានទិន្នន័យ GATT អ្នកនៅតែអាចបញ្ចេញប៊្លូធូស - NCP Empty exampទៅកាន់ក្រុមប្រឹក្សាភិបាលរបស់អ្នក ដែលមានមូលដ្ឋានទិន្នន័យ GATT ដែលបានសាងសង់រួចជាស្រេច។ ក្នុងករណីនេះអ្វីដែលអ្នកត្រូវធ្វើនៅខាងម្ចាស់ផ្ទះគឺ:
- >>> នាំចូល bgapi
- >>> ការតភ្ជាប់ = bgapi.SerialConnector('COM49')
- >>> node = bgapi.BGLib(connection,'sl_bt.xapi')
- >>> node.open()
- >>> advertiser_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(លទ្ធផល=0)
ការបង្កើតកម្មវិធីអតិថិជនប៊្លូធូសនៅក្នុង Python
- ការបង្កើតម៉ាស៊ីនភ្ញៀវគឺស្មុគស្មាញជាងការអនុវត្តម៉ាស៊ីនមេ។ ដូច្នេះយើងនឹងសរសេរអក្សរ python ។ បើកកម្មវិធីនិពន្ធអត្ថបទដែលអ្នកចូលចិត្ត ហើយបង្កើតថ្មី។ fileចូរហៅវាថា client.py
- នាំចូលដូចខាងក្រោមៈ

- ដូចនៅក្នុងករណីនៃម៉ាស៊ីនមេ យើងនឹងភ្ជាប់ទៅថ្នាំងតាមរយៈ UART ។ ប្រើលេខច្រក COM នៃបន្ទះទីពីររបស់អ្នកនៅទីនេះ៖

- ពីទីនេះ កម្មវិធីរបស់យើងនឹងត្រូវបានជំរុញព្រឹត្តិការណ៍។ នៅពេលណាដែលព្រឹត្តិការណ៍ប៊្លូធូសត្រូវបានបង្កើតដោយជង់ យើងនឹងដោះស្រាយព្រឹត្តិការណ៍នោះ ហើយជំរុញកម្មវិធីទៅមុខ៖

- ចូរកំណត់មុខងារដោះស្រាយព្រឹត្តិការណ៍ និងបន្ថែមកម្មវិធីដោះស្រាយសម្រាប់ព្រឹត្តិការណ៍ system_boot ដែលយើងនឹងចាប់ផ្តើមស្កេនរកឧបករណ៍គ្រឿងកុំព្យូទ័រ។ ចំណាំថា មុខងារនេះគួរតែត្រូវបានកំណត់មុន while loop (ហើយបន្ទាប់ពីនិយមន័យនៃ node variable)។

- នៅពេលដែលម៉ាស៊ីនស្កេនត្រូវបានចាប់ផ្តើម ថ្នាំងនឹងទទួលរបាយការណ៍ស្កេន។ តោះបន្ថែមកម្មវិធីដោះស្រាយព្រឹត្តិការណ៍សម្រាប់របាយការណ៍ស្កេនក្នុងមុខងារ sl_bt_on_event()។ ប្រសិនបើរបាយការណ៍ស្កេនត្រូវបានរកឃើញជាមួយឈ្មោះឧបករណ៍ដែលបានផ្សាយថា “PyBGAPI Example” អតិថិជននឹងបើកការតភ្ជាប់ទៅកាន់ឧបករណ៍នោះ៖

- នៅពេលដែលអ្នកឈានដល់ចំណុចនេះ វាមានតម្លៃពិនិត្យមើលថាតើអតិថិជនរបស់អ្នករកឃើញម៉ាស៊ីនមេឬអត់។ សូមប្រាកដថា អ្នកបានចាប់ផ្តើមការផ្សាយពាណិជ្ជកម្មនៅលើឧបករណ៍ផ្សេងទៀត បន្ទាប់មករក្សាទុក client.py ហើយចាប់ផ្តើមវាពីបន្ទាត់ពាក្យបញ្ជា។ អ្នកគួរតែឃើញអ្វីមួយដូចនេះ៖

- អតិថិជនត្រូវតែស្វែងរកសេវាកម្ម និងលក្ខណៈនៅលើម៉ាស៊ីនមេ។ នៅទីនេះ យើងនឹងរកឃើញសេវាកម្មចូលប្រើទូទៅ និងលក្ខណៈឈ្មោះឧបករណ៍ ហើយចុងក្រោយអានតម្លៃនៃលក្ខណៈឈ្មោះឧបករណ៍។ ជំនួសមុខងារ sl_bt_on_event() បច្ចុប្បន្នរបស់អ្នកជាមួយនឹងកូដខាងក្រោម៖

- រក្សាទុក client.py ហើយចាប់ផ្តើមវាពីបន្ទាត់ពាក្យបញ្ជា។ អ្នកគួរតែឃើញអ្វីមួយដូចនេះ៖

ការបន្ថែមមុខងារគ្រប់គ្រងថាមពល LE
ការបំភ្លឺឧបករណ៍គោលដៅ
LE Power Control មិនត្រូវបានបើកនៅក្នុង Bluetooth example គម្រោងតាមលំនាំដើម។ ដើម្បីបន្ថែមលក្ខណៈពិសេសនេះ ប៊្លូធូស > លក្ខណៈពិសេស > សមាសភាគកម្មវិធី PowerControl ត្រូវតែត្រូវបានដំឡើង។
- បើកកម្មវិធីបើកដំណើរការ view នៃ Simplicity Studio 5 ។
- ជ្រើសរើសឧបករណ៍មួយរបស់អ្នកនៅក្នុងផ្ទាំង Debug Adapters។ សូមប្រាកដថា SDK ដែលពេញចិត្តគឺ v3.2.
- បើក Exampផ្ទាំង Projects & Demos ហើយស្វែងរក Bluetooth – NCP Empty exampលេ ចុច [Create] ដើម្បីបង្កើតគម្រោង។ (លើកនេះយើងមិនចង់បង្កើតមូលដ្ឋានទិន្នន័យ GATT ទេ ដូច្នេះយើងប្រើ NCP Empty ដែលមានលំនាំដើម។)
- បើកផ្ទាំង GATT Configurator ជ្រើសរើសលក្ខណៈឈ្មោះឧបករណ៍ ហើយសរសេរជាន់លើ “Slabs Example” តម្លៃដំបូងជាមួយ “PyBGAPI Example” (ដូច្នេះអតិថិជននឹងស្គាល់ម៉ាស៊ីនមេ)។ សរសេរជាន់លើប្រវែងតម្លៃជាមួយ 15 ។
- ចុច ctrl-s ដើម្បីរក្សាទុកមូលដ្ឋានទិន្នន័យ។
- នៅក្នុង Project Configurator បើកផ្ទាំង Software Components ។
- ស្វែងរកប៊្លូធូស > លក្ខណៈពិសេស > សមាសភាគកម្មវិធី PowerControl ហើយចុច [ដំឡើង]

- ចុចលើកង់កង់នៅជាប់នឹងសមាសភាគ PowerControlsoftware ដើម្បីពិនិត្យមើលដែនកំណត់ខាងលើ និងខាងក្រោមនៃជួរពណ៌មាស។ កំណត់ដែនកំណត់ទាបសម្រាប់ 1M
- PHY ទៅ -45 (ជំនួសឱ្យ -60) ។ ទោះបីជានៅក្នុងការអនុវត្តតម្លៃនេះមិនល្អបំផុតក៏ដោយ វានឹងនាំឱ្យមានការកែតម្រូវថាមពល Tx បន្ថែមទៀត ដែលល្អសម្រាប់គោលបំណងបង្ហាញ។
- នៅក្នុង SDK កំណែ 3.2.0 ដំណោះស្រាយតូចមួយត្រូវអនុវត្តដើម្បីកំណត់ជួរពណ៌មាសឱ្យបានត្រឹមត្រូវ៖ បើក sl_bluetooth.c file បានរកឃើញនៅក្នុងថត /autogen នៃគម្រោងរបស់អ្នក ហើយផ្លាស់ទី sl_bt_init_power_control(); ការហៅមុខងារមុន sl_bt_init_stack(&config);

- បង្កើតគម្រោងហើយបញ្ចេញវាទៅក្តាររបស់អ្នក។
- ប្រសិនបើក្តារទាំងពីររបស់អ្នកមានប្រភេទដូចគ្នា សូមបញ្ចេញរូបភាពដូចគ្នាទៅក្តារផ្សេងទៀតផងដែរ។ ប្រសិនបើក្តារទីពីររបស់អ្នកជាក្តារផ្សេងនោះ សូមធ្វើជំហានខាងលើម្តងទៀតសម្រាប់ក្តារទីពីរ។
ចាប់ផ្តើមម៉ាស៊ីនមេ និងម៉ាស៊ីនភ្ញៀវ
- ឥឡូវនេះម្តងទៀត បើក Python bash ភ្ជាប់ទៅក្តារដំបូងរបស់អ្នក ហើយចាប់ផ្តើមការផ្សាយពាណិជ្ជកម្ម

- កែប្រែកម្មវិធីអតិថិជនរបស់អ្នក ដើម្បីកុំឱ្យវាចេញបន្ទាប់ពីអានឈ្មោះឧបករណ៍។ ស្វែងរកបន្ទាត់ខាងក្រោម ហើយដាក់វាចូលទៅក្នុងមតិយោបល់៖

- រក្សាទុក និងដំណើរការកម្មវិធីអតិថិជនរបស់អ្នក។
- py .\client.py
- Place your two boards far away, then slowly move them closer to each other. Now you should see that the stack starts decreasing its power level from the default 8dBm down to -3dBm (which isthe minimal Tx power by default):

ឯកសារ/ធនធាន
![]() |
SILICON LABS 21Q2 Bluetooth Features Lab [pdf] សៀវភៅណែនាំ 21Q2, Bluetooth Features Lab, 21Q2 Bluetooth Features Lab, Features Lab, Lab |


