- Kit Pembangunan nRF52:
- Studio Terbenam Segger
- DHT11 dengan nRF52DK
- Bagaimana untuk bekerja dengan Tenaga Rendah Bluetooth (BLE)?
- Rajah Perkhidmatan / Ciri BLE
- Penjelasan Program nRF52 BLE
- Menguji Program kami menggunakan nRF Connect
Dengan Jalur Kecergasan, Jam Tangan Pintar dan peranti lain yang boleh dipakai semakin popular dengan penggunaan Tenaga Rendah Bluetooth 5 / Bluetoothstandard komunikasi banyak digunakan. BLE membantu kami untuk menukar data dalam jarak dekat dengan kuasa yang sangat sedikit, yang sangat penting untuk peranti yang dikendalikan bateri seperti alat pakai. Ini juga membantu kita menyiapkan rangkaian mesh BLE tanpa wayar, ciri ini sangat berguna untuk peranti automasi rumah di mana beberapa peranti harus berkomunikasi antara satu sama lain dalam persekitaran tertutup. Kami telah menggunakan BLE dengan Raspberry Pi dan BLE dengan ESP32 untuk melaksanakan beberapa fungsi asas BLE. Jurutera bereksperimen dengan BLE untuk merancang peranti wayarles mudah alih yang dapat berfungsi untuk masa yang lama pada bateri kecil dan, terdapat banyak alat pengembangan yang tersedia untuk bekerja dengan BLE. Dalam tinjauan terbaru kami mengenai Arduino Nano 33, kami juga menyedari papan itu mempunyai nRF52840 dengan kemampuan BLE.
Dalam tutorial ini, kita akan meneroka satu lagi papan pengembangan yang menarik dan popular yang disebut nRF52 DK untuk mengukur Suhu dan Kelembapan menggunakan BLE. Secara lalai, Profil Sensing Lingkungan BLE menyokong pelbagai parameter persekitaran tetapi tutorial ini hanya terhad kepada nilai suhu dan kelembapan. Penyelesaian ini menghubungkan dengan Telefon pintar dengan tenaga rendah Bluetooth dan memberikan kemas kini yang kerap mengenai parameter persekitaran iaitu Suhu, Kelembapan. Kami akan menggunakan sensor DHT1 dan pengukuran Suhu akan dilakukan dengan resolusi 0,01 darjah Celsius dan pengukuran Kelembapan akan dilakukan dengan resolusi 0,01 persen.
Kit Pembangunan nRF52:
nRF52DK adalah platform prototaip lengkap untuk aplikasi Bluetooth Low Energy dan 2.4 GHz Internet of Things. Kit pengembangan menyokong pelbagai Rangkaian Alat Nordik standard seperti sumber terbuka, GCC dan persekitaran pembangunan bersepadu komersial seperti Keil, IAR dan Segger Embedded Studio, dll. Nordic juga menyediakan kit pengembangan perisian lengkap untuk nRF52, yang merangkumi sokongan lengkap untuk nRF52DK.
nRF52DK dikuasakan dengan mikrokontroler nRF52832 ARM Cortex-M4F, yang disatukan dengan 512Kbytes Flash Memor dan 64 Kbytes SRAM. nRF52DK mempunyai debugger Segger J-Link On Board bersepadu, yang menyediakan penyahpepijatan yang lebih mudah dan cepat tanpa peranti debug luaran / tambahan jtag. Ia juga menyertakan penyambung yang serasi dengan Arduino Uno Rev3, yang menyokong penghubung input analog dan digital dengan mikropemproses dan ia juga merangkumi protokol komunikasi standard seperti, I2C (Inter-Integrated Circuit), SPI (Serial Peripheral Interface) dan UART (Universal Asynchronous Receiver and Transmitter). Kit pengembangan ini dirancang dengan antena PCB terpadu yang menyediakan komunikasi tanpa wayar jarak pendek menggunakan Tenaga Rendah Bluetooth untuk menghubungkan dengan Telefon Pintar, Komputer riba dan Tablet.
Studio Terbenam Segger
Untuk memprogram papan pengembangan, kami akan menggunakan Segger Embedded Studio dengan nRF52. Segger Embedded Studio adalah persekitaran pengembangan bersepadu (IDE) C / C ++ yang kuat yang disasarkan khusus untuk pembangunan sistem terbenam. Ini menyediakan penyelesaian all-in-one lengkap yang mengandungi semua yang diperlukan untuk pengaturcaraan, pengembangan dan penyahpepijatan C tertanam. Ini termasuk aliran kerja lengkap untuk pengaturcaraan dan pengembangan sistem tertanam, yang disertakan dengan pengurusan projek, editor, debugger yang menyokong peranti ARM Cortex. IDE yang hebat dan mudah digunakan ini sepenuhnya percuma untuk pelanggan Nordik dengan lesen penuh tanpa sekatan saiz kod. IDE boleh dimuat turun dari pautan yang diberikan di bawah,
Muat turun Segger Embedded Studio
DHT11 dengan nRF52DK
DHT11 adalah Sensor Suhu dan Kelembapan dengan ciri lengkap dengan Komponen Pengukuran Kelembapan Jenis Resistif dan Komponen Pengukuran Suhu jenis NTC. Ia menawarkan kualiti yang sangat baik, tindak balas yang lebih cepat, dan keberkesanan kos. Secara lalai, semua sensor DHT11 dikalibrasi di makmal yang membawa kepada ketepatan dan kebolehpercayaan yang luar biasa. Ia berkomunikasi menggunakan sistem Single-Wire Serial Interface dan spesifikasi lain diberikan di bawah
Spesifikasi DHT11:
- Julat Kelembapan: 20 - 90% RH
- Julat Suhu: 0 - 50 darjah celsius
- Ketepatan Kelembapan: ± 5 % RH
- Ketepatan suhu: ± 2 ℃
Rajah Masa DHT11:
Membaca data dari sensor DHT11 agak mudah menggunakan rajah pemasaan yang ditunjukkan di atas. Prosedurnya serupa dengan pengawal mana pun dan kami sudah 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 menyambungkan sensor Suhu dan Kelembapan DHT11 dengan Kit Pembangunan nRF52, ikuti rajah sambungan yang diberikan di bawah.
Saya menggunakan modul penyambung untuk menyambungkan sensor ke papan saya, jadi persediaan terakhir saya kelihatan seperti ini
Carta Alir untuk berkomunikasi dengan DHT11:
Carta alir di bawah menerangkan aliran logik program yang akan kami gunakan untuk berkomunikasi antara nRF52DK dan DHT11
Format Data:
Bagaimana untuk bekerja dengan Tenaga Rendah Bluetooth (BLE)?
Untuk memahami cara menggunakan ciri BLE, kita harus memahami beberapa istilah asas yang dijelaskan di bawah, anda juga boleh membaca artikel ESP32 BLE untuk mengetahui lebih lanjut mengenai BLE
Profil Akses Generik (GAP)
Profil Akses Generik memegang tanggungjawab penuh untuk mewujudkan hubungan untuk komunikasi antara Perisian BLE dan Peranti Pusat. GAP juga menyediakan pelbagai prosedur termasuk pengimbasan / penemuan peranti, pembentukan sambungan lapisan pautan, penamatan pautan, berjabat tangan dengan ciri keselamatan dan konfigurasi peranti lengkap. GAP berfungsi dalam keadaan peranti berikut
Negeri GAP |
Penerangan |
Bersedia |
Keadaan awal peranti semasa ditetapkan semula |
Pengiklan |
Pengiklanan peranti dengan data yang membantu pengimbasan pemula |
Pengimbas |
Menerima dan menghantar permintaan imbasan kepada pengiklan |
Pemula |
Menghantar permintaan sambungan untuk membuat pautan |
Hamba / Tuan |
Pada sambungan, peranti sebagai hamba jika pengiklan, menguasai jika pemula |
Lapisan Profil Atribut Generik (GATT)
GATT adalah singkatan dari Generic Attribute Profile Layer, ia bertanggungjawab untuk komunikasi data antara dua peranti BLE (Peripheral & Central). Komunikasi data dicirikan dalam bentuk ciri, yang berkomunikasi dan menyimpan data. Peranti BLE memainkan dua peranan yang berbeza untuk komunikasi peranti yang diberikan di bawah,
- Pelayan GATT mengandungi maklumat ciri yang akan digunakan untuk membaca & menulis. Dalam tutorial kami, sensor DHT11, dan dev. kit itu adalah Pelayan GATT kami.
- Pelanggan GATT membaca dan menulis data dari / ke Pelayan GATT. Telefon pintar adalah Pelanggan GATT yang membaca & menulis data ke papan sensor kami.
Bluetooth SIG
Kumpulan Kepentingan Khas Bluetooth (SIG) adalah organisasi standard yang memantau perkembangan standard Bluetooth dan pelesenan teknologi Bluetooth. Kumpulan SIG tidak menghasilkan atau menjual produk Bluetooth. Ia menentukan spesifikasi dan standardisasi Bluetooth. Mereka menentukan Pengecam Unik untuk profil tenaga rendah Bluetooth dan ciri masing-masing. Spesifikasi Profil GATT boleh didapati di pautan di bawah
Spesifikasi Profil GATT
Berdasarkan Spesifikasi GATT yang diberikan dalam pautan di atas, kami telah mengumpulkan pengenal unik yang diperlukan untuk projek kami yang dibentangkan di bawah.
Profil / Ciri |
UUID |
GAP (Akses Generik) |
0x1800 |
GATT (Atribut Generik) |
0x1801 |
ESS (Sensing Alam Sekitar) |
0x181A |
Suhu |
0x2A6E |
Kelembapan |
0x2A6F |
Rajah Perkhidmatan / Ciri BLE
BLE UUID
UUID |
Nilai 16 bit |
UUID 128 bit |
Perkhidmatan ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Temp |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
Kelembapan Char |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
Ciri-ciri Suhu
Harta tanah |
Penerangan |
Unit |
Darjah Celsius dengan resolusi 0.01 darjah |
Format |
sint16 |
UUID |
0x2A6E |
Eksponen Perpuluhan |
2 |
Baca |
Wajib |
Ciri Kelembapan
Harta tanah |
Penerangan |
Unit |
Peratusan dengan resolusi 0.01 peratus |
Format |
uint16 |
UUID |
0x2A6F |
Eksponen Perpuluhan |
2 |
Baca |
Wajib |
Penjelasan Program nRF52 BLE
Kami akan menggunakan SDK nRF5 untuk memprogram kit Pembangunan nRF52 kami. nRF5 SDK adalah kit pengembangan perisian lengkap yang disatukan dengan banyak profil Bluetooth Low Energy, GATT Serializer dan sokongan pemandu untuk semua periferal pada SoC siri nRF5. SDK ini membantu pemaju untuk membina aplikasi tenaga rendah Bluetooth yang lengkap, boleh dipercayai dan selamat dengan siri mikrokontroler nRF52 dan nRF51. Program lengkap boleh dimuat turun dari sini, penjelasan kodnya adalah seperti berikut.
Konfigurasikan pin DATA DHT11 sebagai input pada nrf52 dengan pull up memungkinkan. Status pin harus tinggi untuk mengesahkan bahawa nRF52 menyediakan PULLUP yang tepat untuk pin data DHT11
/ * diatur ke input dan periksa apakah isyarat ditarik * / Data_SetInput (); KelewatanUSec (50); jika (Data_GetVal () == 0) {return DHT11_NO_PULLUP; }
Hasilkan isyarat MULAI dari mikrokontroler nRF52 dan periksa isyarat kenali.
/ * hantar isyarat permulaan * / Data_SetOutput (); Data_ClrVal (); Kelewatan MSec (20); / * simpan isyarat rendah sekurang-kurangnya 18 ms * / Data_SetInput (); KelewatanUSec (50); / * periksa isyarat pengenalan * / jika (Data_GetVal ()! = 0) {/ * isyarat mesti ditarik rendah oleh sensor * / return DHT11_NO_ACK_0; } / * tunggu maksimum 100 kami untuk isyarat ack dari sensor * / cntr = 18; sementara (Data_GetVal () == 0) {/ * tunggu sehingga isyarat naik * / DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_ACK_1; / * isyarat mesti ada untuk ACK di sini * /}} / * tunggu sehingga ia turun lagi, akhir urutan ack * / cntr = 18; sementara (Data_GetVal ()! = 0) {/ * tunggu sehingga isyarat turun * / DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_ACK_0; / * isyarat harus turun ke sifar lagi di sini * /}}
Sekarang baca 40 bit data yang mengandungi 2 bait suhu, 2 bait kelembapan dan 1 bait checksum.
/ * sekarang baca data 40 bit * / i = 0; data = 0; loopBits = 40; lakukan {cntr = 11; / * tunggu maksimum 55 kami * / sementara (Data_GetVal () == 0) {DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_DATA_0; }} cntr = 15; / * tunggu maksimum 75 kami * / sementara (Data_GetVal ()! = 0) {DelayUSec (5); jika (--cntr == 0) {return DHT11_NO_DATA_1; }} data << = 1; / * bit data seterusnya * / jika (cntr <10) {/ * isyarat data tinggi> 30 us ==> bit data 1 * / data - = 1; } if ((loopBits & 0x7) == 1) {/ * bait seterusnya * / buffer = data; saya ++; data = 0; }} sementara (- loopBits! = 0);
Sahkan data dengan bantuan Checksum.
/ * uji CRC * / if ((uint8_t) (buffer + buffer + buffer + buffer)! = buffer) {return DHT11_BAD_CRC; }
Manipulasi dan simpan suhu dan kelembapan
/ * menyimpan nilai data untuk pemanggil * / kelembapan = ((int) penyangga) * 100 + penyangga; suhu = ((int) penyangga) * 100 + penyangga;
Memulakan perkhidmatan nRF5 SDK Logger. nRF52 SDK ditampilkan dengan antara muka kawalan pembalakan yang disebut nrf_log dan menggunakan backend lalai untuk mencatat maklumat. Backend lalai akan menjadi port bersiri. Di sini kita memulakan kedua-dua nrf_log antara muka kawalan dan nrf_log hujung belakang lalai juga.
ret_code_t err_code = NRF_LOG_INIT (NULL); APP_ERROR_CHECK (err_code); NRF_LOG_DEFAULT_BACKENDS_INIT ();
nRF52 SDK mempunyai fungsi pemasa aplikasi. Modul pemasa aplikasi memungkinkan untuk membuat beberapa masa pemasa berdasarkan RTC1 periferal. Di sini kita memulakan modul pemasa aplikasi nRF5. Dalam penyelesaian ini, dua pemasa aplikasi digunakan dan selang kemas kini data.
ret_code_t err_code = app_timer_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK mempunyai modul pengurusan kuasa ciri penuh kerana peranti BLE perlu berfungsi selama beberapa bulan pada bateri sel Coin. Pengurusan kuasa memainkan peranan penting dalam aplikasi BLE. Modul pengurusan kuasa nRF52 menangani perkara yang sama. Di sini kita menginisialisasi modul Pengurusan Kuasa SDK nRF5
ret_code_t err_code; err_code = nrf_pwr_mgmt_init (); APP_ERROR_CHECK (err_code);
nRF52 SDK mempunyai fail hex firmware Perangkat Lunak Nordic terbina dalam, yang menampilkan timbunan pusat dan periferal bertenaga rendah Bluetooth. Stok protokol yang sangat berkualiti ini merangkumi 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); // Konfigurasikan tumpukan BLE menggunakan tetapan lalai. // Ambil alamat permulaan 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); // Dayakan timbunan BLE. err_code = nrf_sdh_ble_enable (& ram_start); APP_ERROR_CHECK (err_code); // Daftarkan pengendali untuk acara BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL);
GAP bertanggungjawab untuk pengimbasan / penemuan peranti, penubuhan pautan, penamatan pautan, permulaan ciri keselamatan dan konfigurasi. GAP telah tampil dengan parameter sambungan utama seperti selang sambungan, latensi hamba, waktu tunggu pengawasan, dan lain-lain. Dengan ini memulakan parameter sambungan 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 bertanggungjawab untuk komunikasi data antara peranti persisian dan pusat BLE. Modul nRF52 GATT berguna untuk berunding dan menjejaki ukuran ATT_MTU maksimum. Di sini kita memulakan Modul Atribut Generik SDR nRF52, ret_code_t err_code = nrf_ble_gatt_init (& m_gatt, NULL); APP_ERROR_CHECK (err_code);
GATT melakukan komunikasi data dalam bentuk perkhidmatan dan ciri. Di sini kami menginisialisasi perkhidmatan penginderaan persekitaran GATT, yang merangkumi permulaan ciri seperti suhu dan kelembapan.
ret_code_terr_code; nrf_ble_qwr_init_t qwr_init = {0}; // Memulakan Modul Tulis Beratur. 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);
Iklan memainkan peranan penting dalam persekitaran aplikasi BLE. paket merangkumi maklumat jenis alamat, jenis iklan, data pengiklanan, data khusus pengeluar peranti, dan data respons imbasan. nRF52 SDK ditampilkan dengan modul pengiklanan. Di sini kita melakukan inisialisasi modul iklan 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}}; // Bina dan tetapkan data iklan. 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; // Tetapkan parameter iklan. 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);
Sambungan BLE akan ditangani dan dipantau dengan pelbagai parameter sambungan seperti kelewatan kemas kini parameter sambungan pertama, kelewatan berturut-turut seterusnya, kiraan kemas kini, fungsi panggilan balik pengendali acara sambungan dan pengendali acara panggilan balik ralat sambungan. Di sini kita melakukan inisialisasi parameter penubuhan Sambungan BLE dan pengendali peristiwa panggilan balik untuk peristiwa sambungan dan peristiwa ralat.
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 mulakan dengan mengiklankan maklumat nama dan kemampuan peranti BLE. Dari sini, periferal ini dapat dilihat melalui senarai imbasan Ble telefon pintar.
ret_code_terr_code; err_code = sd_ble_gap_adv_start (m_adv_handle, APP_BLE_CONN_CFG_TAG); APP_ERROR_CHECK (err_code);
Gelung utama berjalan selama selang 2 saat, baca suhu & kelembapan dan kemas kini ke peranti pintar yang disambungkan menggunakan bacaan atau pemberitahuan
untuk (;;) { uint16_t suhu, kelembapan; DHTxx_ErrorCode dhtErrCode; idle_state_handle (); jika (updtmrexp) { dhtErrCode = DHTxx_Read (& suhu, & kelembapan); if (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("Suhu:% d Kelembapan:% d \ n", suhu, kelembapan); jika (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle, & m_ess, suhu); } lain { ble_ess_update_temp (& m_ess, suhu); } jika (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle, & m_ess, kelembapan); } lain { ble_ess_update_humid (& m_ess, kelembapan); } } updtmrexp = false; } }
Menguji Program kami menggunakan nRF Connect
nRF Connect adalah alat tenaga rendah Bluetooth yang kuat yang membolehkan untuk mengimbas dan meneroka periferal yang diaktifkan BLE. nRF Connect untuk mudah alih menyokong pelbagai profil standard Bluetooth SIG yang diadopsi. Kami dapat mengesahkan program kami dengan menggunakan ini, setelah memasang aplikasi, kami dapat memasangkan papan nRF52 dengan telefon kami dengan mengimbas peranti BLE pada aplikasi tersebut. Di dalam atribut Penginderaan Alam Sekitar, kita dapat melihat nilai suhu dan kelembapan diperbaharui seperti yang ditunjukkan dalam gambar di bawah.
Hariharan Veerappan adalah perunding bebas yang mempunyai pengalaman lebih dari 15 tahun dalam pembangunan produk tertanam. Dia menyediakan perkhidmatan perundingan dalam pengembangan firmware / Linux tertanam, dia juga memberikan latihan korporat dan dalam talian. Hariharan memiliki Ijazah Sarjana Muda Kejuruteraan dalam disiplin Kejuruteraan Elektronik & Komunikasi, melalui artikel dan tutorialnya, dia berkongsi pengalaman dan pemikirannya dengan pembaca Circuit Digest.