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

Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core

Komponen dan Perlengkapan

Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core
Raspberry Pi 2 Model B
×1
Bluetooth USB Dongle generik
×1
Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core
Arduino UNO
×1
Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core
SparkFun Bluetooth Modem - BlueSMiRF Silver
×1

Aplikasi dan Layanan Online

Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core
Microsoft Windows 10 IoT Core
Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core
Microsoft Visual Studio 2015

Tentang Proyek Ini

Selengkapnya

Proyek ini dibahas secara detail di embedded101.com:

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

Tentang

Proyek ini adalah Universal Windows App yang menghubungkan perangkat IoT-Core seperti Raspberry PI 2 ke perangkat Bluetooth terembed melalui Profil Serial Bluetooth menggunakan dongle USB Bluetooth genetik.

Latar Belakang

Bluetooth mendukung jaringan peer-to-peer pada jarak dekat. Berbeda dengan 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 mentransfer data mentah antara mereka. Umumnya walaupun, konektivitas Bluetooth adalah asimetris dengan satu ujung menghasilkan format data tertentu untuk dikonsumsi di ujung lainnya. Misalnya ponsel seluler dapat menerapkan Profil A2DP (Advanced Audio Distribution Profile) dan memstreaming audio ke headset yang menerapkan Profil HSP (Headset). OBEX (Object Exchange) adalah koneksi simetris antara dua perangkat saat mereka bertukar data antara mereka.

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

Ini adalah proyek yang jauh lebih sederhana daripada contoh Microsoft. Ini hanya terkait dengan profil SPP (Serial Port Profile) yang lebih generik yang didasarkan pada profil RFCOMM. Ini dikembangkan dengan dongle USB Bluetooth yang sangat lama dan seharusnya bekerja dengan semua dongle Bluetooth.

Aplikasi IoT

Aplikasi ini adalah aplikasi tes Bluetooth Serial Universal Windows (Windows 10) sederhana. Ini dimulai dengan memetapkan (sebagai daftar) semua perangkat Bluetooth yang dipasangkan dengan perangkat tempat aplikasi berjalan. Salah satu dipilih dengan double klik yang memulai koneksi. Teks untuk dikirim dimasukkan di Textbox dan dikirim saat tombol ditekan. Aplikasi secara otomatis menerima teks apa pun yang dikirim kepadanya ( dan menampilkannya). Oleh karena itu ketika titik akhir (seperti di atas) hanya mengomori teks yang diterimanya, teks yang dikirim seharusnya muncul kembali di kotak penerimaan pada aplikasi UW.

Bluetooth Serial Mulus pada Raspberry Pi 2 dengan Windows 10 IoT Core


Titik Akhir

Untuk pengujian Arduino Uno dengan adapter Bluetooth digunakan. Ini memiliki shield sederhana yang hanya mengomori kembali karakter apa pun yang diterimanya melalui koneksi Bluetooth:

Pengaturan Shield:

// A serial loop back app // Past setup // Initiated by connected system // Note can be used with Bluetooth where the RxTx of the BT device // are connected to the TxRx of the Arduino board. // Need to disconnect BT adapter for programming though. void setup() { // My adapter is set to this BAUD 115200 // This is the Arduino to BT adapter port rate // Set when the BT adapter is in command mode. // Its NOT the BT rate which you can't set. Serial.begin(115200); delay(333); while (!Serial) ; delay(1000); Serial.println("The quick brown fox jumps over the lazy dog!"); }

Loop Shield:

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

Pasangan

Bluetooth adalah skenario peer to peer. Sebelum mereka dapat terhubung melalui Bluetooth mereka harus dipasangkan. Ini tidak dilakukan dalam aplikasi. Pasangan dengan passkey dapat bermasalah antara perangkat terembed karena mereka sering tidak memiliki layar dan mungkin tidak mendukung popup (seperti yang tidak dilakukan IoT-Core). Ada portal web IoT-Core untuk melakukan ini serta utilitas command line di perangkat yang dapat dijalankan melalui shell SSH. Versi terbaru dari portal web OS mendukung passkey pairing yang hilang sekitar waktu Windows 10 RTM. "Win 10 IoT-Core: Bluetooth Universal Windows Serial App" membahas pasangan dalam konteks ini secara detail.

Memulai Proyek

Proyek aplikasi dibuat menggunakan di Visual Studio 2015 menggunakan template aplikasi Universal Windows:

New Project-->Visual C#->Windows->Blank App (Universal Windows)

Membuat UI Aplikasi

UI diimplementasikan dalam XAML

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

UI cukup sederhana dan dibuat sebagai berikut:

  • Semua elemen teks adalah TextBlock kecuali SendText yang merupakan TextBox
  • SendText menerima CarriageReturn (ie adalah Multiline)
  • Teks Recvd memiliki WrapText diaktifkan (ie adalah Multiline)
  • Elemen UI diorganisir dalam baris menggunakan StackPanel dengan orientasi horizontal
  • StackPanel ini kemudian ditumpuk dengan StackPanel dengan orientasi vertikal, bersama dengan ListBox.

Anda mungkin lebih suka menata UI menggunakan StackPanel Relatif atau menggunakan baris dan kolom Grid dll.

ConnectDevices adalah ListBox dengan Binding Source yang diatur ke PairedDevices(lihat selanjutnya) dan ItemTemplate yang terdiri dari TextBlock yang terikat ke properti Name dari PairedDevices (lihat selanjutnya).

<ListBox x:Name="ConnectDevices" ItemsSource="{Binding Source={StaticResource PairedDevices}}" Margin="10" DoubleTapped="ConnectDevices_DoubleTapped" Width="Auto" Height="Auto"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

Konfigurasi Aplikasi

  • Aplikasi tidak menggunakan fitur IoT-Core jadi tidak akan memerlukan Referensi Ekstensi.
  • Aplikasi akan memerlukan beberapa kemampuan spesifik untuk Bluetooth dan Serial ditambahkan ke Package.appxmanifest.
  • Sayangnya, UI yang Anda dapatkan untuk ini jika Anda double klik pada file itu di Solution Explorer tidak mendukung penambahan kemampuan ini jadi Anda perlu menambahkannya secara manual dengan klik kanan pada file di Solution Explorer dan pilih Open With->XML Editor.

Modifikasi bagian kemampuan (di bawah) menjadi:

<Capabilities> <Capability Name="internetClient" /> <DeviceCapability Name="bluetooth.rfcomm"> <Device Id="any"> <Function Type="name:serialPort"/> </Device> </DeviceCapability> </Capabilities>

Kemampuan internetClient sudah akan ada. Tidak dibutuhkan untuk aplikasi ini jadi Anda mungkin ingin menghapusnya. Saya membiarkannya.

Informasi PairedDevice

Pada awal aplikasi perangkat yang dipasangkan ditetapkan menggunakan:

DeviceInformationCollection DeviceInfoCollection

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

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

_pairedDevices = new ObservableCollection<PairedDeviceInfo>();

DeviceInfoCollection diiterasi untuk membuat objek PairedDeviceInfo untuk setiap item yang kemudian ditambahkan ke koleksi _pairedDevices.

PairedDeviceInfo adalah kelas dengan properti:

Name <string>

Id <string>

DeviceInfo <DeviceInformation>

Kelas memiliki konstruktor yang sesuai.

DeviceInformation adalah Windows.Devices.Enumeration.DeviceInformation

Di listbox perangkat yang dipasangkan, bidang Name (terikat) ditampilkan.

Saat perangkat dipilih (double klik) DeviceInformation titik akhir sebenarnya merupakan bagian dari item menu yang dipilih dan digunakan untuk menentukan koneksi.

Koneksi

DeviceInformation digunakan untuk mendapatkan layanan RFCOMM. Koneksi kemudian ditetapkan sebagai StreamSocket menggunakan Endpoint HostName (sebenarnya adalah alamat MAC Bluetooth) dan string ServiceName.

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

Jika semuanya baik maka kita memiliki koneksi .. soket akan bermakna (tidak null).

Tentu saja ini ditangkap kesalahan (try-catch)

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

Terima Teks

Penerimaan teks harus dimulai terlebih dahulu karena berjalan sebagai thread terpisah. Ini menjalankan async wait untuk mendapatkan input serial, menangani input lalu menjalankan async serial receive lainnya .. semuanya dalam loop. Loop ini berlanjut terus hingga pembatalan dihasilkan.

private async void Listen() { ReadCancellationTokenSource = new CancellationTokenSource(); if (_socket.InputStream != null) { dataReaderObject = new DataReader(_socket.InputStream); // keep reading the serial input while (true) { await ReadAsync(ReadCancellationTokenSource.Token); } } } DataReader dataReaderObject; private CancellationTokenSource ReadCancellationTokenSource; private async Task ReadAsync(CancellationToken cancellationToken) { uint ReadBufferLength = 1024; // If task cancellation was requested, comply cancellationToken.ThrowIfCancellationRequested(); // Set InputStreamOptions to complete the asynchronous read operation when one or more bytes is available dataReaderObject.InputStreamOptions = InputStreamOptions.Partial; // Create a task object to wait for data on the serialPort.InputStream loadAsyncTask = dataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken); // Launch the task and wait UInt32 bytesRead = await loadAsyncTask; if (bytesRead > 0) { string recvdtxt = dataReaderObject.ReadString(bytesRead); } }

Kirim Teks

Sementara teks yang diterima dilakukan secara asinkron karena kedatangan teks tidak deterministik dari sudut pandang aplikasi, teks yang dikirim dilakukan dari UI aplikasi dan pada dasarnya sinkron (meskipun await digunakan untuk membebaskan UI).

private async void Send(string msg) { Task storeAsyncTask; DataWriter dataWriteObject = new DataWriter(_socket.OutputStream); dataWriteObject.WriteString(msg); // Launch an async task to complete the write operation storeAsyncTask = dataWriteObject.StoreAsync().AsTask(); UInt32 bytesWritten = await storeAsyncTask; }

Status Tombol

Tombol perintah diaktifkan dan dinonaktifkan tergantung pada status aplikasi. Misalnya tombol Send dan Start Recv dinonaktifkan saat aplikasi tidak terhubung tetapi diaktifkan saat aplikasi terhubung, dll.

Nikmati! :)

Kode

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

Proses manufaktur

  1. Memperluas GoPiGo v2 pada Windows 10 IoT Core untuk Raspberry Pi 3
  2. Mengontrol Kecerahan LED dengan PWM melalui Tombol Push pada Arduino Mega
  3. Alat Pengukur Tekanan & Aliran Udara Presisi dengan Sensor Analog
  4. Buat Game Gyroskop Real-Time dengan Arduino Nano & Sensor MPU-6050
  5. Kamera Keamanan Deteksi Gerak Berbasis ESP32 untuk Discord
  6. Proyek Sensor Suhu & Kelembaban DHT11 dengan Indikator LED dan Speaker Piezo
  7. Unopad: Pengontrol MIDI Arduino yang Mulus untuk Ableton Live
  8. Remote TV Arduino Kustom – Daya Baterai, Kotak Cetak 3D
  9. Kontrol LED melalui Bluetooth dengan Arduino – Panduan DIY Sederhana
  10. Bangun Sensor Halangan Sederhana dengan Arduino – Tutorial Mudah LED IR & Fotodioda