Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Teknologi Internet of Things

Sensor dan Kontrol dengan Modul Bluetooth RN487x dari Microchip

Pelajari tentang rangkaian modul Bluetooth RN487x dan cara mengonfigurasinya untuk proyek periferal berdaya rendah Anda.

Jika Anda mengembangkan perangkat kecil berdaya rendah, kemungkinan besar Anda mempertimbangkan Bluetooth sebagai lapisan komunikasi Anda.

Seiring berkembangnya standar, perangkat yang terhubung dengan Bluetooth telah berkembang biak. Modul perangkat keras telah diperkenalkan yang menyediakan SoC (system on chip) lengkap untuk hampir semua desain periferal. Nordic nrf52840 adalah contoh yang bagus. Inti sistem adalah prosesor 32-bit dan radio Bluetooth multi-protokol. Inti ini dikelilingi oleh setiap antarmuka yang mungkin Anda butuhkan; GPIO, PWM, USB, SPI, I 2 S, dan banyak lagi.

Kelemahan dari SoC yang kuat ini, dan lainnya, adalah kompleksitas. Ada kurva pembelajaran yang signifikan dan waktu pengembangan yang diperlukan untuk membuat dan mengintegrasikan perangkat lunak tertanam yang diperlukan untuk SoC ini.

Namun, untuk beberapa jenis periferal yang paling umum, ada alternatif yang lebih sederhana. Jika periferal Anda terutama berupa sensor jarak jauh atau kendali jarak jauh, dengan jumlah saluran terbatas (analog dan digital), Anda mungkin dapat memenuhi tujuan Anda dengan modul RN487x yang diproduksi oleh Microchip.

Keluarga dari dua modul Bluetooth ini menyediakan banyak saluran digital dan analog dua arah secara bersamaan. Modul ini disesuaikan dengan desain tertentu hanya dengan menyimpan sedikit konfigurasi di modul NVRAM. Meski sederhana, modul ini tetap memenuhi standar BLE (Bluetooth low-energy), sehingga kompatibel dengan klien Bluetooth terbaru, seperti smartphone modern.

Dalam seri ini, kami akan mendemonstrasikan menggunakan modul RN487x. Kami akan membuat periferal terhubung Bluetooth fungsional untuk masing-masing dari empat tugas; sensor digital, kontrol digital, sensor analog, dan kontrol analog. Setiap contoh mencakup rangkaian nominal, dan konfigurasi yang diperlukan pada RN487x. Sebuah skrip aplikasi sederhana untuk menjalankan periferal juga disediakan. Titik antarmuka dalam skrip aplikasi didokumentasikan dengan baik; memaksimalkan potensi untuk menggabungkan periferal ini sebagai subsistem dalam desain yang lebih besar.

Ikhtisar Desain

Mari kita lihat rincian grafis untuk contoh 'sensor analog', dengan antarmuka utama berwarna merah.

Representasi dari sistem Linux yang berkomunikasi dengan periferal

Ada tiga elemen sistem yang akan kita buat. Untuk periferal, kita harus membuat perangkat keras yang menyediakan sinyal sensor kita; transduser dalam contoh ini. Ini menghasilkan tegangan analog yang bervariasi. Untuk pengguna, kami akan membuat aplikasi untuk menyajikan data; skrip Python dalam contoh ini.

Script harus menggunakan GATT API untuk mentransfer informasi ke dan dari periferal. Kita juga perlu membuat beberapa konfigurasi di modul RN487x. Konfigurasi ini akan mengontrol aliran data antara aplikasi dan perangkat keras.

Pemilihan Komponen

Ada dua modul dalam keluarga RN487x; RN4870 dan RN4871. Mereka berbeda dalam jumlah dan jenis pin yang disediakan untuk I/O. Anda dapat menemukan batasan ini di lembar data dan panduan pengguna, tetapi agak tersebar. Di bawah ini adalah reorganisasi anggaran pin untuk dua chip. Pengaturan ini akan memudahkan untuk melihat chip mana yang Anda butuhkan untuk periferal Anda.

Ada tiga jenis pin I/O yang tersedia pada modul c:

Ketik Deskripsi
ADC Input analog:Level sinyal input diubah menjadi rentang numerik.
PWM Output analog:Sepasang angka diubah menjadi gelombang persegi. Angka-angka mengontrol frekuensi dan siklus kerja gelombang persegi.
DIO Input atau output digital:Untuk input digital, level sinyal tinggi atau rendah masing-masing mewakili 1 atau 0. Begitu pula sebaliknya untuk keluaran digital.

Dan berikut adalah anggaran pin untuk kedua modul:

RN4870

Gambar dari lembar data RN487x

Nama Pin/Kemampuan P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC x x x x
PWM x x
DIO x x x x x

RN4871

Gambar dari lembar data RN487x

Nama Pin/Kemampuan P1_2 P1_3
ADC x
PWM
DIO x x

Tabel ini akan memperjelas bahwa jika Anda tidak memerlukan PWM, dan Anda hanya perlu mengelola satu atau dua sinyal, gunakan 4871. Ini akan menghemat sumber daya. Jika Anda membutuhkan PWM, atau jika Anda ingin mengelola lebih dari dua sinyal, maka Anda memerlukan 4870. Untuk sensor analog kami, kami hanya memiliki satu input analog sehingga 4871 sudah cukup. Kami akan menghubungkan sinyal ke pin P1_2 modul.

Lapisan Profil GATT (Generic Attribute) dari BLE Protocol Stack

Kami hampir siap untuk menerapkan beberapa contoh nyata. Tetapi untuk menulis aplikasi pengguna, kita perlu pemahaman yang lebih tepat tentang api yang akan kita gunakan ketika kita berbicara dengan periferal.

Semua perangkat Bluetooth Hemat Energi menggunakan Profil Atribut Generik (GATT) untuk pertukaran data terstruktur. Dalam model ini, periferal diatur sebagai server yang menyimpan database sederhana. Database pada gilirannya menyimpan sejumlah variabel yang mewakili data yang berguna. Aplikasi seperti skrip Python kami diatur sebagai klien yang menggunakan GATT API untuk membuat kueri berbasis nama ke dalam database. API dapat digunakan untuk membaca nilai dari database, dan untuk menulis nilai ke dalam database.

Sebagai pratinjau, berikut adalah dua pemanggilan metode GATT API yang berguna dengan Python:

gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(bytearray([8]))

Yang pertama digunakan untuk membuat koneksi ke periferal. Yang kedua menulis beberapa nilai ke database; nilai-nilai ini segera dinyatakan sebagai keluaran digital pada periferal. Argumen pertama untuk metode 'tulis' adalah pegangan yang khusus untuk keluaran digital atau keluaran yang ingin kita kendalikan. Hanya ada beberapa baris lagi yang diperlukan untuk contoh yang lengkap secara fungsional.

API ini diekspos sebagai bagian dari layanan Bluetooth di iOS, Android, Windows, dan Linux. Contoh dalam artikel ini ditulis dengan Python, dan akan berjalan di banyak distribusi Linux umum.

Konfigurasi Modul

Parameter 'vh_handle' dalam metode skrip di atas membawa kita ke elemen terakhir dalam pola desain ini. Parameter adalah referensi dalam perangkat lunak untuk sinyal level fisik tertentu pada periferal. Tapi bagaimana jalur data ini selesai? Ada dua bagian konfigurasi di NVRAM RN487x yang akan melakukan ini; definisi karakteristik dan pengikatan pin.

Konfigurasi RN487x dimuat ke dalam modul dengan bahasa perintah khusus. Lihat lampiran untuk panduan umum tentang membuat koneksi konsol ke modul, dan tentang mengeluarkan perintah konfigurasi.

Setelah kami mengeluarkan perintah ini, konfigurasi non-volatile dalam RN487x akan terlihat seperti ini:

Perhatikan bahwa semua nilai data ada dalam hierarki dua tingkat 'layanan' dan 'karakteristik'. Organisasi ini lebih dari yang kita butuhkan, tetapi menjadi berguna untuk sistem yang kompleks di mana banyak sensor dan kontrol akan ada dalam layanan yang terpisah secara logis.

Ini mengakhiri bagian pertama dari seri tiga bagian kami pada modul RN487x. Bagian 2 dan 3 akan menggunakan pola desain yang sama untuk membuat input digital, kontrol digital, sensor analog, dan kontrol analog.

Bagian 4 juga mencakup beberapa topik untuk studi lebih lanjut yang berlaku untuk semua contoh.

Di bawah ini, Anda akan menemukan Lampiran informasi untuk mengonfigurasi modul Anda dan menggunakannya sebelum masing-masing deskripsi proyek yang akan mengikuti artikel lainnya.

Menggunakan Koneksi Konsol untuk Mengonfigurasi RN487x

Untuk mengonfigurasi RN487x, pertama-tama suplai daya ke modul dan buat sambungan serial antara modul dan stasiun kerja. Setiap sirkuit demonstrasi kami memiliki jumper 'prog' 3-pin yang memperlihatkan sinyal RX, TX, dan GND yang diperlukan. Jika Anda tidak yakin tentang cara membuat koneksi ini ke workstation Anda, panduan yang sangat baik tersedia di sini.

Mulai emulator terminal di workstation Anda. Salah satu emulator yang sangat cocok dan tersedia secara luas adalah utilitas 'miniterm' yang disertakan di sebagian besar lingkungan Python. Dalam shell workstation, dapat dimulai seperti ini:

python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

Contoh ini menunjukkan nama port (/dev/ttyUSB0) yang sesuai untuk sistem Linux. Bentuk nama port akan berbeda untuk sistem operasi lain. Baud rate default untuk modul adalah 115200 dan hanya ada sedikit alasan untuk mengubahnya.

Modul RN487x dalam mode DATA secara default. Kita membutuhkan mode COMMAND. Mode ini diaktifkan dengan mengetikkan tiga karakter tanda dolar (‘$$$’) di aplikasi emulator terminal. Anda tidak akan melihat karakter di jendela terminal, tetapi hasilnya akan berupa prompt perintah yang dikembalikan oleh RN4871:

CMD>

Coba tekan tombol 'd' diikuti dengan tombol 'enter'. Anda akan melihat sesuatu seperti ini sebagai hasilnya:

CMD> BTA=D88039F80080 Nama=RN_BLE Terhubung =tidak Otentik =2 Fitur =0000 Layanan=00 CMD>

Ini adalah deskripsi minimal dari status modul. Perhatikan bahwa juru bahasa perintah tidak menampilkan karakter yang Anda ketikkan ('d'). Anda harus mengaktifkan 'echo' untuk memperbaikinya. Lakukan ini dengan menekan tombol '+' diikuti dengan tombol 'enter'. Perangkat akan merespons seperti ini:

CMD> ECHO AKTIF CMD>

Anda sekarang berada pada titik di mana Anda dapat menyelesaikan berbagai tugas konfigurasi yang dijelaskan dalam sisa proyek ini. Membuat layanan, misalnya, dilakukan hanya dengan mengetikkan perintah 'PS' lengkap dalam satu baris, diikuti dengan tombol 'enter'. Contoh:

CMD> PS,59c88760536411e7b114b2f933d5fe66 Oke

Setiap konfigurasi proyek juga mengharuskan skrip multi-baris dikomit ke modul NVRAM. Jenis perintah multi-baris ini memerlukan sedikit penjelasan lebih lanjut. Anda memulai entri skrip dengan perintah 'WW', diikuti dengan 'enter'. Kemudian ketik setiap baris skrip. Setiap baris skrip, termasuk baris terakhir, juga diakhiri dengan tombol 'enter'.

Terakhir, Anda melakukan commit skrip dengan menekan tombol 'esc'. Contoh:

CMD> ww @CONN |O,08,72 OK CMD>

Inisialisasi Umum Modul

Jika Anda telah menggunakan modul RN487x untuk salah satu contoh dalam proyek ini, atau jika Anda telah menggunakan modul untuk tujuan yang sama sekali berbeda, dan Anda akan mengonfigurasi modul untuk contoh lain, ada kemungkinan modul tersebut memiliki beberapa konfigurasi yang akan bertentangan dengan tujuan penggunaan berikutnya.

​Langkah-langkah berikut harus diambil sebelum setiap contoh dalam proyek ini:​

  • Hapus semua skrip yang ada.
  • Aktifkan pemrosesan skrip.
  • Hapus semua definisi layanan/karakteristik yang ada.
  • Hapus semua fungsi khusus dari pin yang kita gunakan (P1_2, indeks 0A).
  • Mulai ulang modul.

Gunakan bagian lampiran sebelumnya untuk mencapai shell perintah modul. Kemudian gunakan urutan perintah berikut untuk menyelesaikan inisialisasi yang diperlukan:

CMD> WC OK CMD> SR,0040 OK CMD> PZ OK CMD> SW,0A,00 OK CMD> R,1 Mem-boot ulang

Pengaturan Linux Diperlukan untuk Menjalankan Contoh Skrip Python

Perangkat Keras

Sistem yang menjalankan skrip ini tentunya membutuhkan perangkat keras yang mendukung Bluetooth Low Energy (BLE). BLE diperkenalkan di versi 4, jadi jika perangkat keras Bluetooth Anda menetapkan versi di bawah ini, itu mungkin tidak akan berfungsi untuk contoh ini.

Jika Anda ingin membeli adaptor USB untuk workstation untuk mencoba contoh-contoh ini, saya sarankan adaptor apa pun yang menggunakan program Qualcomm CSR8510. Satu instans tersedia untuk dibeli ​di sini​.

Perangkat Lunak

Pengaturan ini telah diverifikasi untuk Debian 10. Ini harus berlaku untuk distribusi berbasis Debian seperti Ubuntu. Ada dua komponen yang diakses langsung oleh contoh-contoh ini yang tidak diinstal secara default di Debian 10;

  • Modul Python untuk mengakses tumpukan Bluetooth. Komponen ini tersedia melalui sistem manajemen paket, dan diberi nama 'python-bluez'.
  • Modul Python khusus untuk panggilan GATT Bluetooth; 'gattlib'. Komponen ini tersedia dari indeks paket resmi Python (melalui utilitas 'pip').

Instalasi 'pip' dari 'gattlib' membangun perpustakaan ELF. Proses ini juga memerlukan beberapa alat dan pustaka.

Menyatukan semua ini, daftar paket harus diminta dari manajer paket sistem, diikuti dengan permintaan modul tunggal ke 'pip'. Skrip untuk menyelesaikan tindakan ini telah disediakan di sini. Jika Anda memilih untuk menjalankan skrip, Anda harus memberinya izin 'eksekusi' setelah mengunduh.

Referensi

  • Lembar Data RN487x
  • Panduan Pengguna RN487x
  • API GATT di Windows
  • API GATT di iOS
  • API GATT dengan Python

Periksa kembali bagian selanjutnya dari rangkaian proyek ini, di mana kita akan membuat contoh lengkapnya.

Lompat ke proyek 1 dan 2:membangun input digital dan kontrol digital.


Teknologi Internet of Things

  1. Sinergi IoT seluler dan Bluetooth LE
  2. Mendesain dengan Bluetooth Mesh:Chip atau modul?
  3. Contrinex:sensor cerdas cloud-ready dan tirai lampu pengaman dengan antarmuka Bluetooth
  4. ADLINK:terapkan AI dari edge ke cloud dengan Edge AI Solutions dan platform NVIDIA EGX
  5. Sensor Analog tanpa Input Analog pada Raspberry Pi
  6. Membaca Sensor Analog dengan Raspberry Pi dan Zabbix Supervisor
  7. Apa yang Saya Lakukan dengan Data?!
  8. Memanfaatkan data IoT dari edge ke cloud dan sebaliknya
  9. Digitalisasi dan industri makanan dan minuman
  10. The Edge dan IoT:Insights from IoT World 2019