- Kit Pengembangan nRF52:
- Studio Tertanam Segger
- DHT11 dengan nRF52DK
- Bagaimana cara bekerja dengan Bluetooth Hemat Energi (BLE)?
- Diagram Layanan / Karakteristik BLE
- Penjelasan Program nRF52 BLE
- Menguji Program kami menggunakan nRF Connect
Dengan Fitness Bands, Smartwatches dan perangkat wearable lainnya semakin populer penggunaan Bluetooth 5 / Bluetooth Low Energystandar komunikasi diadopsi secara luas. BLE membantu kami bertukar data dalam jarak pendek dengan daya yang sangat kecil, yang sangat penting untuk perangkat yang dioperasikan dengan baterai seperti perangkat yang dapat dikenakan. Ini juga membantu kami mengatur jaringan mesh BLE nirkabel, fitur ini berguna untuk perangkat otomatisasi rumah di mana beberapa perangkat harus berkomunikasi satu sama lain dalam lingkungan tertutup. Kami telah menggunakan BLE dengan Raspberry Pi dan BLE dengan ESP32 untuk melakukan beberapa fungsi BLE dasar. Insinyur sedang bereksperimen dengan BLE untuk merancang perangkat nirkabel portabel yang dapat berjalan lama dengan baterai kecil dan, ada beberapa kit pengembangan yang tersedia untuk bekerja dengan BLE. Dalam ulasan terbaru kami tentang Arduino Nano 33, kami juga memperhatikan bahwa papan tersebut memiliki nRF52840 dengan kemampuan BLE.
Dalam tutorial ini, kita akan menjelajahi papan pengembangan menarik dan populer lainnya yang disebut nRF52 DK untuk mengukur Suhu dan Kelembaban menggunakan BLE. Secara default, Profil Penginderaan Lingkungan BLE mendukung berbagai parameter lingkungan tetapi tutorial ini hanya terbatas pada nilai suhu dan kelembaban. Solusi ini menghubungkan dengan Smartphone melalui Bluetooth energi rendah dan menyediakan pembaruan berkala mengenai parameter lingkungan yaitu Suhu, Kelembaban. Kami akan menggunakan sensor DHT1 dan pengukuran suhu akan dilakukan dengan resolusi 0,01 derajat Celcius dan pengukuran kelembaban akan dilakukan dengan resolusi 0,01 persen.
Kit Pengembangan nRF52:
nRF52DK adalah platform prototipe lengkap untuk aplikasi Bluetooth Low Energy dan 2,4 GHz Wireless Internet of Things. Kit pengembangan mendukung berbagai Nordic Toolchain standar seperti open-source, GCC dan lingkungan pengembangan terintegrasi komersial seperti Keil, IAR dan Segger Embedded Studio, dll. Nordic juga menyediakan kit pengembangan perangkat lunak lengkap untuk nRF52, yang mencakup dukungan lengkap untuk nRF52DK.
nRF52DK didukung dengan nRF52832 ARM Cortex-M4F Mikrokontroler, yang terintegrasi 512Kbytes Flash Memor dan 64 Kbytes SRAM. nRF52DK memiliki debugger Segger J-Link On Board terintegrasi, yang menyediakan debugging yang lebih mudah dan lebih cepat tanpa perangkat debug jtag eksternal / tambahan. Ini juga termasuk konektor yang kompatibel dengan Arduino Uno Rev3, yang mendukung antarmuka input analog dan digital dengan mikroprosesor dan juga mencakup protokol komunikasi standar seperti, I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) dan UART (Universal Asynchronous Receiver and Transmitter). Kit pengembangan ini dirancang dengan antena PCB terintegrasi yang menyediakan komunikasi nirkabel jarak pendek menggunakan Bluetooth Hemat Energi untuk menghubungkan dengan Ponsel Pintar, Laptop dan Tablet.
Studio Tertanam Segger
Untuk memprogram papan pengembangan, kami akan menggunakan Segger Embedded Studio dengan nRF52. Segger Embedded Studio adalah lingkungan pengembangan terintegrasi (IDE) C / C ++ yang kuat yang ditargetkan secara khusus untuk pengembangan sistem tertanam. Ini memberikan solusi lengkap lengkap yang berisi semua yang dibutuhkan untuk pemrograman C tertanam, pengembangan dan debugging. Ini termasuk alur kerja lengkap untuk pemrograman dan pengembangan sistem tertanam, yang dilengkapi dengan manajemen proyek, editor, debugger yang mendukung perangkat ARM Cortex. IDE yang kuat dan mudah digunakan ini sepenuhnya gratis untuk pelanggan Nordik dengan lisensi penuh tanpa batasan ukuran kode. IDE dapat diunduh dari tautan yang diberikan di bawah ini,
Unduh Segger Embedded Studio
DHT11 dengan nRF52DK
DHT11 adalah Sensor Suhu dan Kelembaban berfitur lengkap dengan Komponen Pengukuran Kelembaban Jenis Resistif dan Komponen Pengukuran Suhu jenis NTC. Ini menawarkan kualitas yang sangat baik, respon lebih cepat, dan efektivitas biaya. Secara default, semua sensor DHT11 dikalibrasi di lab yang menghasilkan akurasi dan keandalan yang ekstrem. Ini berkomunikasi menggunakan sistem Single-Wire Serial Interface dan spesifikasi lainnya diberikan di bawah ini
Spesifikasi DHT11:
- Kisaran Kelembaban: 20 - 90% RH
- Rentang Suhu: 0 - 50 derajat celsius
- Akurasi Kelembaban: ± 5 % RH
- Akurasi Suhu: ± 2 ℃
Diagram Waktu DHT11:
Membaca data dari sensor DHT11 relatif sederhana menggunakan diagram waktu yang ditunjukkan di atas. Prosedurnya mirip dengan pengontrol apa pun dan kami telah menggunakan sensor ini dengan platform pengembangan lain seperti
- Sensor DHT11 dengan Raspberry Pi
- Sensor DHT11 dengan PIC16F877A
- Sensor DHT11 dengan STM32F103C8
- Sensor DHT11 dengan NodeMCU
Untuk menghubungkan sensor Suhu dan Kelembaban DHT11 dengan Kit Pengembangan nRF52, ikuti diagram koneksi yang diberikan di bawah ini.
Saya menggunakan modul konektor untuk menghubungkan sensor ke papan saya, jadi pengaturan terakhir saya terlihat seperti ini
Diagram Alir untuk berkomunikasi dengan DHT11:
Diagram alir di bawah menjelaskan alur logis program yang akan kami gunakan untuk berkomunikasi antara nRF52DK dan DHT11
Format data:
Bagaimana cara bekerja dengan Bluetooth Hemat Energi (BLE)?
Untuk memahami cara menggunakan fitur BLE, kita harus memahami beberapa terminologi dasar yang dijelaskan di bawah ini, Anda juga dapat membaca artikel ESP32 BLE untuk mengetahui lebih lanjut tentang BLE
Profil Akses Generik (GAP)
Profil Akses Generik memegang tanggung jawab penuh untuk membangun koneksi untuk komunikasi antara perangkat BLE dan Perangkat Pusat. GAP juga menyediakan berbagai prosedur termasuk pemindaian / penemuan perangkat, pembuatan koneksi lapisan tautan, penghentian tautan, handshaking fitur keamanan, dan konfigurasi perangkat yang lengkap. GAP berfungsi di status perangkat berikut
GAP States |
Deskripsi |
Bersiap |
Status awal perangkat saat disetel ulang |
Pemasang iklan |
Iklan perangkat dengan data yang membantu pemindaian inisiator |
Pemindai |
Menerima dan mengirim permintaan pemindaian ke pengiklan |
Pemrakarsa |
Mengirim permintaan koneksi untuk membuat link |
Budak / Tuan |
Pada koneksi, perangkat sebagai budak jika pengiklan, master jika pemrakarsa |
Generic Attribute Profile Layer (GATT)
GATT adalah singkatan dari Generic Attribute Profile Layer, yang bertanggung jawab untuk komunikasi data antara dua perangkat BLE (Peripheral & Central). Komunikasi data dicirikan dalam bentuk karakteristik, yaitu mengkomunikasikan dan menyimpan data. Perangkat BLE memainkan dua peran berbeda untuk komunikasi perangkat yang diberikan di bawah ini,
- GATT Server berisi informasi karakteristik yang akan digunakan untuk membaca & menulis. Dalam tutorial kami, sensor DHT11, dan dev. kit tersebut adalah Server GATT kami.
- Klien GATT membaca dan menulis data dari / ke Server GATT. Ponsel cerdas adalah Klien GATT yang membaca & menulis data ke papan sensor kami.
Bluetooth SIG
Bluetooth Special Interest Group (SIG) adalah organisasi standar yang memantau perkembangan standar Bluetooth dan perizinan teknologi Bluetooth. Grup SIG tidak memproduksi atau menjual produk Bluetooth apa pun. Ini menentukan spesifikasi dan standarisasi Bluetooth. Mereka menentukan Pengenal Unik untuk profil energi rendah Bluetooth dan karakteristik masing-masing. Spesifikasi Profil GATT dapat ditemukan di tautan di bawah ini
Spesifikasi Profil GATT
Berdasarkan Spesifikasi GATT yang diberikan pada tautan di atas, kami telah mengumpulkan pengidentifikasi unik yang diperlukan untuk proyek kami yang ditabulasikan di bawah ini.
Profil / Karakteristik |
UUID |
GAP (Akses Umum) |
0x1800 |
GATT (Atribut Generik) |
0x1801 |
ESS (Penginderaan Lingkungan) |
0x181A |
Suhu |
0x2A6E |
Kelembaban |
0x2A6F |
Diagram Layanan / Karakteristik BLE
UUID BLE
UUID |
Nilai 16 bit |
UUID 128 bit |
Layanan ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Kelembaban Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Karakteristik Suhu
Properti |
Deskripsi |
Satuan |
Derajat Celcius dengan resolusi 0,01 derajat |
Format |
sint16 |
UUID |
0x2A6E |
Eksponen Desimal |
2 |
Baca |
Wajib |
Karakteristik Kelembaban
Properti |
Deskripsi |
Satuan |
Persentase dengan resolusi 0,01 persen |
Format |
uint16 |
UUID |
0x2A6F |
Eksponen Desimal |
2 |
Baca |
Wajib |
Penjelasan Program nRF52 BLE
Kami akan menggunakan nRF5 SDK untuk memprogram kit Pengembangan nRF52 kami. nRF5 SDK adalah kit pengembangan perangkat lunak lengkap yang terintegrasi dengan berbagai profil Bluetooth Low Energy, GATT Serializer dan dukungan driver untuk semua periferal pada SoC seri nRF5. SDK ini membantu pengembang untuk membangun aplikasi hemat energi Bluetooth berfitur lengkap, andal, dan aman dengan rangkaian mikrokontroler nRF52 dan nRF51. Program lengkapnya dapat diunduh dari sini, penjelasan kodenya sebagai berikut.
Konfigurasikan pin DATA DHT11 sebagai input di nrf52 dengan mengaktifkan pull up. Status pin harus tinggi untuk mengonfirmasi bahwa nRF52 menyediakan PULLUP yang tepat untuk pin data DHT11
/ * set ke input dan periksa apakah sinyal ditarik ke atas * / Data_SetInput (); DelayUSec (50); jika (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Hasilkan sinyal MULAI dari nRF52 Mikrokontroler dan periksa sinyal pengakuan.
/ * kirim sinyal mulai * / Data_SetOutput (); Data_ClrVal (); DelayMSec (20); / * pertahankan sinyal rendah setidaknya selama 18 ms * / Data_SetInput (); DelayUSec (50); / * periksa sinyal konfirmasi * / jika (Data_GetVal ()! = 0) {/ * sinyal harus ditarik rendah oleh sensor * / return DHT11_NO_ACK_0; } / * tunggu maks 100 us untuk sinyal ack dari sensor * / cntr = 18; while (Data_GetVal () == 0) {/ * tunggu sampai sinyal naik * / DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_ACK_1; / * sinyal harus naik untuk ACK di sini * /}} / * tunggu sampai turun lagi, akhir dari urutan ack * / cntr = 18; while (Data_GetVal ()! = 0) {/ * tunggu sampai sinyal turun * / DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_ACK_0; / * sinyal harus turun ke nol lagi di sini * /}}
Sekarang baca 40 bit data yang berisi 2 byte suhu, 2 byte kelembaban dan 1 byte checksum.
/ * sekarang membaca data 40 bit * / i = 0; data = 0; loopBits = 40; lakukan {cntr = 11; / * tunggu max 55 us * / while (Data_GetVal () == 0) {DelayUSec (5); if (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * tunggu max 75 us * / while (Data_GetVal ()! = 0) {DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_DATA_1; }} data << = 1; / * bit data berikutnya * / if (cntr <10) {/ * sinyal data tinggi> 30 us ==> data bit 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * byte berikutnya * / buffer = data; i ++; data = 0; }} sementara (- loopBits! = 0);
Validasi data dengan bantuan Checksum.
/ * uji CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Memanipulasi dan menyimpan suhu dan kelembapan
/ * menyimpan nilai data untuk pemanggil * / kelembaban = ((int) buffer) * 100 + buffer; temperatur = ((int) buffer) * 100 + buffer;
Inisialisasi layanan nRF5 SDK Logger. nRF52 SDK dilengkapi dengan antarmuka kontrol logging yang disebut nrf_log dan menggunakan backend default untuk mencatat informasi. Backend default adalah port serial. Di sini kita menginisialisasi baik nrf_log antarmuka kontrol dan nrf_log backends standar juga.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK memiliki fungsi pengatur waktu aplikasi. Modul pengatur waktu aplikasi memungkinkan untuk membuat beberapa contoh pengatur waktu berdasarkan perangkat RTC1. Di sini kami menginisialisasi modul timer aplikasi nRF5. Dalam solusi ini, dua timer aplikasi digunakan untuk dan interval pembaruan data.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK memiliki modul manajemen daya fitur lengkap karena perangkat BLE perlu bekerja selama beberapa bulan dengan baterai sel berbentuk koin. Manajemen daya memainkan peran penting dalam aplikasi BLE. Modul manajemen daya nRF52 sepenuhnya menangani hal yang sama. Di sini kami menginisialisasi modul Manajemen Daya nRF5 SDK
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK memiliki file hex firmware Perangkat Lunak Nordik internal, yang dilengkapi tumpukan perangkat dan pusat energi rendah Bluetooth. Tumpukan protokol yang sangat berkualitas ini mencakup GATT, GAP, ATT, SM, L2CAP, dan Link Layer. Di sini kita mengikuti urutan inisialisasi, yang menginisialisasi nRF5 BLE Radio Stack (Nordic Soft Device)
ret_code_t err_code; err_code = nrf_sdh_enable_request (); APP_ERROR_CHECK (err_code); // Konfigurasi tumpukan BLE menggunakan pengaturan default. // Ambil alamat awal dari RAM aplikasi. 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); // Aktifkan tumpukan BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Daftarkan penangan untuk acara BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP bertanggung jawab atas pemindaian / penemuan perangkat, pembuatan tautan, penghentian tautan, inisiasi fitur keamanan dan konfigurasi. GAP memiliki fitur dengan parameter koneksi utama seperti interval koneksi, latensi slave, batas waktu pengawasan, dll. Dengan ini menginisialisasi parameter koneksi Profil Akses Generik
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 bertanggung jawab untuk komunikasi data antara periferal BLE dan perangkat pusat. Modul nRF52 GATT berguna untuk bernegosiasi dan melacak ukuran maksimum ATT_MTU. Di sini kami menginisialisasi Modul Atribut Generik SDK nRF52, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
GATT melakukan komunikasi data dalam bentuk layanan dan karakteristik. Di sini kami menginisialisasi layanan penginderaan lingkungan GATT, yang mencakup inisialisasi karakteristik seperti suhu dan kelembapan.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Inisialisasi Modul Tulis yang Antri. 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);
Periklanan memainkan peran penting dalam lingkungan aplikasi BLE. paket mencakup informasi jenis alamat, jenis iklan, data iklan, data khusus produsen perangkat, dan data respons pemindaian. nRF52 SDK dilengkapi dengan modul periklanan. Di sini kita melakukan inisialisasi modul periklanan dengan parameter.
ret_code_terr_code; ble_advdata_t advdata; ble_advdata_t srdata; ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE, BLE_UUID_TYPE_BLE}}; // Buat dan setel data periklanan. 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_uids) / 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; // Tetapkan parameter periklanan. 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);
Koneksi BLE akan ditangani dan dipantau dengan berbagai parameter koneksi seperti penundaan pembaruan parameter koneksi pertama, penundaan berturut-turut berikutnya, jumlah pembaruan, fungsi panggilan balik penangan peristiwa koneksi dan penangan kejadian panggilan balik kesalahan koneksi. Di sini kita melakukan inisialisasi parameter pembentukan Koneksi BLE dan penangan kejadian panggilan balik untuk kejadian koneksi dan kejadian kesalahan.
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);
Setelah selesai inisialisasi sistem, di sini kita mulai dengan mengiklankan nama perangkat BLE dan informasi kemampuan. Dari sini, perangkat ini dapat dilihat di daftar pemindaian Ble smartphone.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Loop utama berjalan selama interval 2 detik, membaca suhu & kelembapan dan pembaruan ke perangkat pintar yang terhubung menggunakan pembacaan atau pemberitahuan
untuk (;;) { uint16_t suhu, kelembaban; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); if (updtmrexp) { dhtErrCode = DHTxx_Read (& suhu, & kelembaban); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Suhu:% d Kelembaban:% d \ n", suhu, kelembaban); jika (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, temperatur); } lain { ble_ess_update_temp (& m_ess, suhu); } jika (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, kelembaban); } lain { ble_ess_update_humid (& m_ess, kelembaban); } } updtmrexp = false; } }
Menguji Program kami menggunakan nRF Connect
nRF Connect adalah alat Bluetooth hemat energi yang memungkinkan untuk memindai dan menjelajahi periferal berkemampuan BLE. nRF Connect untuk seluler mendukung berbagai profil standar Bluetooth SIG yang diadopsi. Kami dapat memverifikasi program kami dengan menggunakan ini, setelah menginstal aplikasi kami dapat memasangkan papan nRF52 dengan telepon kami dengan memindai perangkat BLE di aplikasi. Di dalam atribut penginderaan lingkungan, kita dapat melihat nilai suhu dan kelembaban diperbarui seperti yang ditunjukkan pada gambar di bawah ini.
Hariharan Veerappan adalah konsultan independen yang memiliki lebih dari 15 tahun pengalaman dalam pengembangan produk tertanam. Dia memberikan layanan konsultasi dalam pengembangan firmware / Linux tertanam, dia juga menyediakan pelatihan perusahaan dan online. Hariharan meraih gelar Sarjana Teknik dalam disiplin Teknik Elektronika & Komunikasi, melalui artikel dan tutorialnya ia berbagi pengalaman dan pemikirannya dengan pembaca Circuit Digest.