Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Generik Serial Bluetooth dengan Win 10 IoT-Core RPI2

Komponen dan persediaan

Raspberry Pi 2 Model B
× 1
Dongle USB Bluetooth Umum
× 1
Arduino UNO
× 1
Modem Bluetooth SparkFun - BlueSMiRF Silver
× 1

Aplikasi dan layanan online

Microsoft Windows 10 IoT Core
Microsoft Visual Studio 2015

Tentang proyek ini

Selanjutnya

Proyek ini dibahas secara mendetail di embedded101.com:

"Menangkan 10 IoT-Core:Bluetooth Universal Windows Serial App"

Tentang

Project ini adalah Aplikasi Windows Universal yang menghubungkan perangkat IoT-Core seperti Raspberry PI 2 ke perangkat Bluetooth tersemat melalui Bluetooth Serial Profile menggunakan dongle USB Bluetooth genetik.

Latar belakang

.Bluetooth mendukung jaringan peer to peer dalam jarak dekat. Tidak seperti jaringan Wi-Fi, konektivitas Bluetooth adalah satu-ke-satu. Dua perangkat dapat terhubung dan berinteraksi. Misalnya, dua perangkat dapat terhubung secara simetris menggunakan profil serial dan mengirimkan data mentah di antara keduanya. Namun secara umum, konektivitas Bluetooth tidak simetris dengan satu ujung menghasilkan format data tertentu untuk digunakan di ujung lainnya. Misalnya ponsel dapat menerapkan Profil A2DP (Advanced Audio Distribution Profile) dan mengalirkan audio ke perangkat kepala yang mengimplementasikan Profil HSP (Headset) OBEX (Object Exchange) adalah koneksi simetris antara dua perangkat saat mereka bertukar data di antara mereka.

Proyek Microsoft IOT-Core Bluetooth Sample menggunakan GATT (Generic Attribute Profile Profile). Ini menyediakan layanan penemuan dan deskripsi profil untuk protokol Bluetooth Low Energy. Dengan protokol ini, perangkat berdaya rendah yang sederhana dapat dihubungkan di satu ujung yang menghasilkan data untuk dikonsumsi oleh prosesor yang kompleks.

Ini adalah proyek yang jauh lebih sederhana daripada contoh Microsoft. Ini hanya terkait dengan SPP (Profil Port Serial) yang lebih umum yang didasarkan pada profil RFCOMM. Ini dikembangkan dengan dongle Bluetooth USB yang sangat tua dan seharusnya berfungsi dengan dongle Bluetooth apa pun.

Aplikasi IoT

Aplikasi ini adalah aplikasi uji Bluetooth Serial Universal Windows (Windows 10) sederhana. Ini dimulai dengan menghitung (sebagai daftar) semua perangkat Bluetooth yang dipasangkan ke perangkat tempat aplikasi berjalan. Satu dipilih dengan mengklik dua kali yang memulai koneksi. Teks untuk dikirim dimasukkan ke dalam Kotak Teks dan dikirim saat tombol ditekan. Aplikasi secara otomatis menerima teks apa pun yang dikirim ke sana (dan menampilkannya). Oleh karena itu ketika titik akhir (seperti di atas) hanya menggemakan teks yang diterimanya, teks yang dikirim akan muncul kembali di kotak penerimaan pada aplikasi UW.


Titik Akhir

Untuk pengujian Arduino Uno dengan adaptor Bluetooth digunakan. Ia memiliki perisai sederhana yang hanya menampilkan kembali karakter apa pun yang diterimanya melalui koneksi Bluetooth:

Pengaturan Perisai:

// Aplikasi loop belakang serial// Pengaturan sebelumnya// Diprakarsai oleh sistem yang terhubung// Catatan dapat digunakan dengan Bluetooth di mana RxTx perangkat BT// terhubung ke TxRx papan Arduino. // Perlu melepas adaptor BT untuk pemrograman. // Ini BUKAN tingkat BT yang tidak dapat Anda atur. Serial.begin(115200); penundaan(333); while (!Serial); penundaan (1000); Serial.println("Rubah coklat cepat melompati anjing malas!");} 

Lingkaran Perisai:

void loop() { char ch =Serial.read(); while ( 255 ==(byte) ch) { ch =Serial.read(); } Serial.print(ch);} 

Memasangkan

Bluetooth adalah skenario peer to peer. Sebelum mereka dapat terhubung melalui Bluetooth, mereka harus dipasangkan. Ini tidak dilakukan dalam aplikasi. Memasangkan dengan kunci sandi dapat menimbulkan masalah di antara perangkat yang disematkan karena perangkat tersebut sering kali tanpa kepala dan mungkin tidak mendukung munculan (seperti yang tidak didukung oleh IoT-Core). Ada portal web IoT-Core untuk melakukan ini serta utilitas baris perintah pada perangkat yang dapat dijalankan melalui shell SSH. Versi terbaru portal web OS  mendukung penyandingan kunci sandi yang tidak ada selama Windows 10 RTM. "Win 10 IoT-Core:Bluetooth Universal Windows Serial App" membahas penyandingan dalam konteks ini secara mendetail.

Memulai proyek

Project aplikasi dibuat menggunakan Visual Studio 2015 menggunakan  template aplikasi Universal Windows:

Proyek Baru-->Visual C#->Windows->Aplikasi Kosong (Universal Windows)

Membuat UI Aplikasi

UI diimplementasikan dalam XAML

Buat UI sesuai tata letak seperti di atas (atau serupa):

UI cukup lurus ke depan dan dibuat sebagai berikut:

  • Semua elemen teks adalah TextBlocks kecuali SendText yang merupakan TextBox
  • SendText menerima CarriageReturn (yaitu Multiline)
  • Teks Recvd telah mengaktifkan WrapText (yaitu Multiline)
  • Elemen UI diatur dalam baris menggunakan StackPanel yang disetel ke orientasi horizontal
  • StackPanel ini kemudian ditumpuk dengan StackPanel yang disetel ke orientasi vertikal, bersama dengan ListBox.

Anda mungkin lebih suka menata UI menggunakan Relative StackPanels atau menggunakan baris dan kolom Grid dll.

ConnectDevices adalah ListBox dengan Sumber Binding yang disetel ke PairedDevices(lihat nanti ) dan ItemTemplate yang terdiri dari TextBlock yang terikat ke properti Name dari PairedDevices (lihat nanti ).

      

Konfigurasi Aplikasi

  • Aplikasi ini tidak menggunakan fitur IOT-Core sehingga tidak memerlukan Referensi Ekstensi apa pun.
  • Aplikasi akan memerlukan beberapa kemampuan khusus untuk Bluetooth dan Serial yang ditambahkan ke Package.appxmanifest.
  • Sayangnya, UI yang Anda dapatkan untuk ini jika Anda mengklik dua kali file itu di Solution Explorer tidak mendukung penambahan kemampuan ini dan karenanya Anda perlu menambahkannya secara manual dengan mengklik kanan file di Solution Explorer dan pilih Buka Dengan->Editor XML.

Ubah bagian kemampuan (di bagian bawah) menjadi:

       

Kemampuan internetClient sudah ada. Ini tidak diperlukan untuk aplikasi ini sehingga Anda mungkin ingin menghapusnya. Aku meninggalkannya.

Informasi Perangkat yang Dipasangkan

Pada awal aplikasi, perangkat yang dipasangkan dihitung menggunakan:

DeviceInformationCollection DeviceInfoCollection

=menunggu DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

Koleksi ini kemudian diubah menjadi ObservableCollection yang dapat digunakan dalam ListBox:

_pairedDevices =new ObservableCollection();

DeviceInfoCollection diulang melalui pembuatan PairedDeviceInfo objek untuk setiap item yang kemudian ditambahkan ke _pairedDevices koleksi.

Info Perangkat Berpasangan adalah kelas dengan properti:

Nama

Id

DeviceInfo

Kelas memiliki konstruktor yang sesuai.

Informasi Perangkat adalah Windows.Devices.Enumeration.DeviceInformation

Di kotak daftar perangkat yang dipasangkan, Nama bidang (terikat) ditampilkan.

Saat perangkat dipilih (diklik dua kali), DeviceInformation titik akhir sebenarnya adalah bagian dari item menu yang dipilih dan digunakan untuk membuat  koneksi.

Koneksi

DeviceInformation digunakan untuk mendapatkan layanan RFCOMM. Koneksi kemudian dibuat sebagai StreamSocket menggunakan Endpoint HostName (sebenarnya Bluetooth Mac Address-nya) dan string ServiceName.

_service =menunggu RfcommDeviceService.FromIdAsync(DeviceInfo.Id);_socket =new StreamSocket();menunggu _socket.ConnectAsync(_service.ConnectionHostName, _service.ConnectionServiceName); 

Jika semuanya baik-baik saja maka kita memiliki koneksi .. socket akan bermakna (bukan null).

Tentu saja ini adalah kesalahan yang terjebak (try-catch)

Kirim teks dan Terima teks menggunakan properti InputStream dan OutputStream soket.

Terima Teks

Menerima teks harus dimulai terlebih dahulu karena berjalan sebagai utas terpisah. Ini menjalankan async wait untuk mendapatkan input serial, menangani input kemudian menjalankan penerimaan serial async lainnya .. semua dalam satu lingkaran. Ini terus berulang hingga pembatalan dibuat.

private async void Listen(){ ReadCancellationTokenSource =new CancellationTokenSource(); if (_socket.InputStream !=null) { dataReaderObject =new DataReader(_socket.InputStream); // tetap membaca input serial while (true) { menunggu ReadAsync(ReadCancellationTokenSource.Token); } }}DataReader dataReaderObject;Private CancellationTokenSource ReadCancellationTokenSource;Private async Task ReadAsync(CancellationToken CancellationToken){ uint ReadBufferLength =1024; // Jika pembatalan tugas diminta, patuhi CancellationToken.ThrowIfCancellationRequested(); // Atur InputStreamOptions untuk menyelesaikan operasi baca asinkron ketika satu atau lebih byte tersedia dataReaderObject.InputStreamOptions =InputStreamOptions.Partial; // Buat objek tugas untuk menunggu data di serialPort.InputStream loadAsyncTask =dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken); // Luncurkan tugas dan tunggu UInt32 byteRead =menunggu loadAsyncTask; if (byteRead> 0) { string recvdtxt =dataReaderObject.ReadString(bytesRead); }} 

Kirim Teks

Sementara teks yang diterima dilakukan secara asinkron karena kedatangan teks bersifat nondeterministik dari perspektif aplikasi, teks yang dikirim ditindaklanjuti dari UI aplikasi dan pada dasarnya sinkron (walaupun menunggu digunakan untuk mengosongkan UI).

private async void Send(string msg){ Task storeAsyncTask; DataWriter dataWriteObject =new DataWriter(_socket.OutputStream); dataWriteObject.WriteString(msg); // Luncurkan tugas asinkron untuk menyelesaikan operasi tulis storeAsyncTask =dataWriteObject.StoreAsync().AsTask(); UInt32 byteWritten =menunggu storeAsyncTask;} 

Status Tombol

Tombol perintah diaktifkan dan dinonaktifkan tergantung pada status aplikasi. Misalnya tombol Kirim dan Mulai Penerimaan dinonaktifkan saat aplikasi tidak terhubung tetapi diaktifkan saat aplikasi terhubung, dll.

Menikmati! :)

Kode

iotbluetoothserial di Github
Juga di Codeplex (mirror)https://iotgenbluetoothserialuwa.codeplex.com/https://github.com/djaus2/iotbluetoothserial

Proses manufaktur

  1. GoPiGo v2 dengan Windows IoT
  2. Peredupan Lampu dengan PWM menggunakan Tombol Tekan
  3. Perangkat Pengukur Aliran Udara Tekanan dengan Sensor Analog
  4. Game Arduino Gyroscope dengan MPU-6050
  5. Kamera Keamanan Discord dengan ESP32
  6. Sensor DHT11 dengan LED dan Speaker Piezo
  7. Unopad - Pengontrol MIDI Arduino dengan Ableton
  8. Remote Control TV Bertenaga Baterai dengan Casing Cetakan 3D
  9. Arduino dengan Bluetooth untuk Mengontrol LED!
  10. Sensor Kendala Sederhana dengan Arduino