Sensor Telemetri 2.0.1
Sensor Telemetri 2.0.1 Dorong data suhu ke Microsoft Azure IoT Hub dan pantau data dari jarak jauh dari aplikasi Windows Universal. Di-remaster secara Digital!
Cerita
DIPERBARUI:Proyek Sensor Telemetri telah di-remaster secara digital. Diperbarui pada 17 Mei 2017 dan diganti namanya menjadi Sensor Telemetri 2.0.1
Pengantar
Ringkasan
Dalam proyek ini, kami akan memantau sensor suhu (MCP9808 ) dan mengirim pembacaan telemetri ke Microsoft Azure IoT Hub di mana Analisis Aliran job akan memproses pesan dan menulisnya ke Azure SQL Basis Data meja. Kami akan menggunakan Aplikasi Seluler untuk melihat riwayat pembacaan sensor.
Aplikasi
Proyek ini berisi dua Aplikasi Windows Universal (pada Platform Windows Universal, UWP) yang berbagi sekitar 99% dari kode. Satu ditargetkan ke Raspberry Pi (atau ARM) dan yang lainnya ditargetkan ke platform x86 atau x64.
Versi aplikasi IoT berjalan di Raspberry Pi dan membaca suhu dari MCP9808. Aplikasi mengirimkan peristiwa telemetri ke Azure IoT Hub dan SignalR pusat. Versi ini juga akan mendengarkan perintah dari Azure IoT Hub.
Versi klien, yang dimulai di komputer, akan mendengarkan pembaruan sensor dari hub SignalR dan menampilkannya di layar. Versi ini juga akan mengirimkan perintah ke versi IoT melalui Azure IoT Hub.
Teknologi
Aplikasi dalam proyek ini didasarkan pada MVVM (Model-View-ViewModel) dan dibuat menggunakan Prisma perpustakaan dan menggunakan Prism.Unity untuk IoC (Pembalikan Kontrol) wadah. Selain library ini, aplikasi menggunakan Event Aggregator ditemukan di Prism.Event perpustakaan untuk membuat, sebaik mungkin, arsitektur murni yang digerakkan oleh peristiwa. Aplikasi menggunakan library ini untuk memungkinkan modul internal berkomunikasi sambil tetap digabungkan secara longgar.
Aplikasi ini juga menggunakan SignalR di Azure Mobile App untuk memungkinkan beberapa contoh aplikasi berkomunikasi satu sama lain. Pembacaan suhu "disiarkan" ke semua klien yang berjalan dari jarak jauh sehingga mereka dapat menerima pembacaan sensor suhu untuk ditampilkan di tampilan utama.
Arsitektur
Inti dari aplikasi ini adalah perpustakaan MCP9808 yang dibangun sebagai proyek terpisah yang dapat digunakan kembali di aplikasi lain. Proyek ini dikembangkan sebagai perpustakaan UWP yang dapat digunakan di semua aplikasi Windows 10. Jika pustaka digunakan pada perangkat yang tidak memiliki I2C bus perpustakaan tidak akan mengembalikan objek perangkat apa pun. Pendekatan ini dapat digunakan untuk "mendeteksi" sebuah sensor dan dengan anggun mengabaikan perpustakaan saat sensor tidak ditemukan.
Dalam aplikasi klien UWP terdapat beberapa blok yang membentuk keseluruhan aplikasi. Tampilan adalah halaman yang terlihat dan setiap tampilan memiliki Model Tampilan yang bertanggung jawab atas status Tampilan. Ada tiga repositori:pengaturan aplikasi (IApplicationSettingsRepository ), informasi debug (IDebugConsoleRepository ) dan membaca dan menulis MCP9808 (ITemperatureRepository ). Ada dua kelas konkret yang dibangun di sekitar ITemperatureRepository; satu membungkus perpustakaan MCP9808 dan satu lagi adalah perangkat nol yang digunakan saat aplikasi tidak berjalan di Raspberry Pi.
Kelas Mcp9808TemperatureRepository memantau MCP9808 menggunakan layanan pengatur waktu dan menerbitkan informasi suhu melalui agregator peristiwa internal setiap kali pembacaan suhu atau status peringatan berubah. Peristiwa baru dikirim hanya jika pembacaan saat ini berbeda dari pembacaan sebelumnya.
Ada juga serangkaian layanan yang ditentukan oleh IBackgroundService yang berjalan di latar belakang untuk berbagai aktivitas.
Diagram di bawah ini menggambarkan tampilan arsitektur tingkat tinggi dan konektivitas antara berbagai blok dan layanan.
Layanan Telemetri
Layanan ini memantau peristiwa perubahan suhu (melalui langganan) dan mengirim pesan ke Pusat Peristiwa Bus Layanan Azure setiap kali suhu berubah.
Layanan Pengatur Waktu
Layanan sederhana ini adalah pengatur waktu yang menerbitkan peristiwa setiap 500 milidetik dan digunakan oleh model tampilan untuk menampilkan waktu saat ini pada tampilan. Ini juga digunakan oleh Mcp9808TemperatureRepository untuk membaca sensor sekali setiap detik. Argumen acara timer menyertakan penghitung yang dapat digunakan dengan fungsi mod untuk membagi interval timer dengan mudah ke panjang yang diinginkan. Ada metode yang disebut IsMyInterval(TimeSpan interval) pada argumen acara yang menghitungnya untuk Anda. Yang perlu Anda lakukan hanyalah menyediakan interval sebagai TimeSpan objek.
Layanan Pemantauan Pin Peringatan
Layanan ini memantau status pin GPIO yang terhubung ke pin peringatan pada MCP9808. Ketika nilai GPIO diubah, layanan ini menerbitkan sebuah acara.
Layanan LED
Layanan ini bertanggung jawab untuk menyalakan dan mematikan LED. Ini dilakukan dengan memantau (melalui langganan) peristiwa perubahan suhu yang juga mencakup status peringatan MCP9808. Saat status peringatan berubah, LED akan diperbarui.
Layanan Pemantauan Tombol Tekan
Layanan ini memantau pin GPIO yang terhubung ke tombol tekan dan memublikasikan peristiwa saat tombol dilepaskan. Acara ini diambil oleh Mcp9808TemperatureRepository saat perangkat dalam mode reset peringatan manual (mode interupsi MCP9808). Peristiwa debug juga dipublikasikan sehingga status tombol dapat dilihat di konsol debug.
Layanan Relai Pemberitahuan
Layanan ini memantau hub SignalR dan agregator peristiwa internal serta menyampaikan pesan di antara keduanya berdasarkan pemetaan yang telah ditentukan sebelumnya (menggunakan EventRelayMap kelas). Ini pada dasarnya memungkinkan aplikasi untuk hanya mengetahui sistem peristiwa internal dan masih dapat mengirim dan menerima pesan dengan instance aplikasi lainnya.
Layanan Konsol Debug
Layanan ini memantau aplikasi (melalui langganan) untuk men-debug acara dan menambahkannya ke koleksi internal. Ini juga mengimplementasikan DebugConsoleRepository , yang memungkinkan tampilan konsol debug untuk menampilkan peristiwa ini dalam aplikasi melalui Model Tampilan.
Inisialisasi Aplikasi
Saat aplikasi dimulai, aplikasi akan meluncurkan Halaman Awal lihat terlebih dahulu, yang secara otomatis memanggil StartPageViewModel . Model tampilan ini menyiapkan dan menjalankan semuanya sebelum diluncurkan ke tampilan utama.
Memulai
Persyaratan Sirkuit
Sirkuit ini memerlukan papan tempat memotong roti yang besar dan tanpa solder, dan opsional, tukang sepatu berbentuk T dan kabel pita (saya menggunakan versi yang dijual oleh Vilros). Papan tempat memotong roti dapat diperoleh dari banyak tempat (saya telah membeli dari toko lokal dan dari Amazon). Sirkuit ini juga menggunakan sakelar tombol tekan taktil sesaat dengan empat pin. Ada banyak jenis; apapun akan dilakukan. Terakhir, untuk sensor suhu, saya menggunakan MCP9808 High Accuracy I2C Temperature Sensor Breakout Board dari Adafruit.
Sirkuit dapat dibangun tanpa tukang sepatu. Cukup ikuti diagram papan tempat memotong roti alternatif di akhir proyek.
Perakitan Sirkuit
Gunakan panduan ini untuk merakit sirkuit sambil menggunakan diagram yang terletak di dekat bagian bawah halaman sebagai panduan (catatan:warna kabel opsional dan telah dipilih untuk membantu membuat sirkuit mudah ikuti ketika dibangun).
- Tempatkan masing-masing dari empat LED ke papan tempat memotong roti.
- Hubungkan salah satu ujung 220 Ω resistor ke anoda setiap LED dan sambungkan ujung resistor lainnya ke 3V3 (pin 1 atau 17) pada Raspberry Pi. Keempat anoda LED harus terhubung ke 3V3 melalui 220 Ω penghambat. Cara terbaik adalah menggunakan salah satu dari + rel di papan tempat memotong roti Anda untuk koneksi 3V3.
- Hubungkan katoda LED biru ke GPIO 18 (pin 12) pada Raspberry Pi.
- Hubungkan katoda LED hijau ke GPIO 23 (pin 16) pada Raspberry Pi.
- Hubungkan katoda LED merah ke GPIO 12 (pin 32) pada Raspberry Pi.
- Hubungkan katoda LED kuning ke GPIO 16 (pin 36) pada Raspberry Pi.
- Tempatkan MCP9808 ke papan tempat memotong roti.
- Hubungkan Vdd di MCP9808 ke 3V3 di Raspberry Pi.
- Hubungkan GND di MCP9808 ke GND pada Raspberry Pi. Ground pada Raspberry Pi dapat berupa salah satu dari pin berikut:6, 9, 14, 20, 25, 30, 34, dan 39.
- Hubungkan SCL di MCP9808 ke SCL pada Raspberry Pi (pin 5).
- Hubungkan SDA di MCP9808 ke SDA pada Raspberry Pi (pin 3).
- Hubungkan 10K Ω resistor antara Peringatan sematkan pada MCP9808 dan 3V3 di Raspberry Pi.
- Hubungkan Alert sematkan pada MCP9808 ke GPIO 6 (pin 31) pada Raspberry Pi.
- Tempatkan sakelar tombol tekan ke papan tempat memotong roti.
- Hubungkan satu sisi sakelar ke GPIO 5 (pin 29) pada Raspberry Pi.
- Hubungkan sisi lain sakelar GND di Raspberry Pi.
- Hubungkan 10K Ω resistor antara GPIO 5 dan 3V3 di Raspberry Pi.
Berikut adalah beberapa foto sirkuit yang saya buat menggunakan tukang sepatu.
-
-
-
Persyaratan Microsoft Azure
Jika Anda tidak memiliki akun Azure, Anda harus membuatnya. Anda bisa mendapatkan kredit $200 saat memulai akun. Buka azure.com dan klik tautan AKUN GRATIS . Jika Anda sudah memiliki akun, masuk ke portal di portal.azure.com .
CATATAN:Panduan ini bukan panduan lengkap untuk mengonfigurasi Azure. Anda mungkin perlu membiasakan diri dengan portal jika Anda belum pernah menggunakannya sebelumnya. Saya akan menjalani langkah-langkah yang diperlukan untuk proyek ini sebaik mungkin.
Biarkan diri Anda masuk ke portal Azure selama seluruh proses penyiapan. Anda perlu merujuknya berkali-kali.
Penyiapan Pusat Acara IoT Azure
- Pilih Baru di menu sebelah kiri portal.
- Masukkan nama unik untuk hub Anda.
- Di bawah Grup Sumber Daya pilih Buat Baru dan masukkan nama untuk grup Anda. Perhatikan bahwa Anda akan menggunakan grup ini untuk semua sumber daya Azure yang dibuat selama proyek ini.
- Pilih lokasi (coba simpan semua sumber daya di wilayah yang sama untuk menghemat biaya ).
- Jika ini adalah hub IoT pertama Anda, pilih Harga dan tingkat skala. Kemudian pilih F1 Gratis . Anda dapat memiliki satu tingkat gratis di akun Anda.
- Terakhir, klik buat dan tunggu IoT Hub dibuat.
- Klik IoT Hub di menu sebelah kiri untuk melihat hub baru.
- Klik hub baru untuk melihat ikhtisar detailnya. Anda perlu merujuk kembali ke tampilan ini nanti.
-
-
-
-
-
-
-
Buat Perangkat
Azure IoT Hub mengharuskan setiap perangkat diidentifikasi dan didaftarkan secara unik di hub untuk tujuan keamanan. Perangkat dapat didaftarkan menggunakan Azure SDK dan kode, tetapi untuk proyek ini kami akan menggunakan Device Explorer yang tersedia di Azure SDK.
- Download Azure SDK dari GitHub dari https://github.com/Azure/azure-iot-sdk-csharp baik dengan mendapatkan file zip atau mengkloning repositori.
- Jika Anda mengunduh file zip, perluas ke folder di disk Anda.
- Buka foldernya Azure-iot-sdk–csharp-master\tools\DeviceExplorer .
- Buka proyek DeviceExplorer di Visual Studio.
- Kembali ke portal Azure dan pilih IoT Hub Anda. Klik Kebijakan akses bersama link dan pilih iothubowner . Klik salin tombol di sebelah String koneksi – kunci utama .
- Di jendela Device Explorer, tempel string ini ke dalam kotak teks berlabel IoT Hub Connection String .
- Ubah ke Pengelolaan tab di Device Explorer dan klik Buat .
- Ketikkan nama untuk perangkat Anda (misalnya, TemperatureDevice1 ).
- Pastikan Auto Generate Keys kotak centang dipilih dan klik Buat .
- Klik Selesai .
- Anda harus kembali ke aplikasi ini untuk mendapatkan string koneksi perangkat nanti.
-
-
-
-
-
-
-
-
-
Penyiapan Database Azure SQL
Data telemetri akan disimpan di Azure SQL Database. Gunakan portal untuk membuat database.
- Klik Database SQL di menu portal.
- Masukkan nama untuk database (yaitu SensorTelemetri)
- Untuk Grup sumber daya pilih Gunakan yang sudah ada dan pilih Sensor Telemetri dari tarik-turun.
- Klik tautan server untuk menyiapkan server baru.
- Masukkan nama untuk server.
- Masukkan nama pengguna (Anda akan membutuhkan ini nanti, jadi ingatlah ).
- Masukkan sandi (Anda akan memerlukan ini nanti, jadi ingatlah ).
- Pilih lokasi (coba simpan semua sumber daya di wilayah yang sama untuk menghemat biaya ).
- Klik server baru dalam daftar SQL Server,
- Klik Setel firewall server untuk mengizinkan akses dari komputer Anda ke SQL Server.
- Masukkan nama untuk koneksi dan alamat IP eksternal Anda di rentang IP Mulai dan IP Akhir.
- Klik elips untuk menyimpan entri.
- Klik Simpan untuk menyimpan alamat IP.
-
-
-
-
-
-
-
-
-
Membuat Tabel Database
Tabel yang digunakan akan dibuat secara manual. Penerapan Code First dapat digunakan di Aplikasi Seluler, tetapi tabel yang dibuat tidak akan kompatibel dengan Stream Analytics.
- Pilih SQL Server Object Explorer dari Tampilan menu.
- Klik kanan SQL Server objek dan pilih Tambahkan SQL Server .
- Jelajahi database Azure dan pilih database yang Anda buat di langkah sebelumnya.
- Masukkan nama pengguna dan sandi Anda, lalu klik Hubungkan .
- Perluas item penjelajah objek hingga Anda melihat database yang Anda buat.
- Klik kanan database ini dan pilih Kueri Baru .
- Salin skrip SQL dari bagian bawah halaman proyek ini dan tempelkan ke jendela kode Visual Studio.
- Pilih Jalankan dari SQL menu untuk menjalankan skrip.
- Memperluas objek tabel di penjelajah akan menampilkan tabel yang baru dibuat bernama SensorReadings .
-
-
-
-
-
-
-
-
-
Buat Paket Layanan Aplikasi
Paket Layanan Aplikasi diperlukan untuk membuat Layanan Aplikasi.
- Pilih paket Layanan Aplikasi di menu portal.
- Masukkan nama untuk paket tersebut.
- Untuk Grup sumber daya pilih Gunakan yang sudah ada dan pilih Sensor Telemetri dari tarik-turun.
- Klik Tingkat harga dan pilih B1 Basic .
- Klik Buat .
Buat Layanan Aplikasi ( Aplikasi Seluler )
Situs web dan hub SignalR akan berjalan dengan Layanan Aplikasi.
- Klik Baru dari menu portal.
- Pilih Web+Seluler dari daftar.
- Masukkan nama untuk aplikasi.
- Untuk Grup sumber daya pilih Gunakan yang sudah ada dan pilih Sensor Telemetri dari tarik-turun.
- Pilih Paket Layanan Aplikasi yang Anda buat di langkah sebelumnya.
- Wawasan Aplikasi bersifat opsional.
- Klik Buat .
-
-
-
-
Penyiapan Analisis Aliran Azure
Pekerjaan Stream Analytics akan memantau peristiwa data di IoT Hub dan menulisnya ke database SQL Server. Pekerjaan akan terdiri dari input (Hub IoT), dan output (Tabel SQL) dan Kueri yang memilih bidang mana yang akan digunakan.
- Pilih Data + Analisis dari menu.
- Pilih Pekerjaan Analisis Aliran dari menu.
- Masukkan nama unik untuk pekerjaan tersebut.
- Untuk grup Sumber daya, pilih Gunakan yang ada dan pilih Sensor Telemetri dari tarik-turun.
- Pilih lokasi (coba simpan semua sumber daya di wilayah yang sama untuk menghemat biaya ).
- Pilih Layanan Lainnya> dari menu.
- Gulir ke bawah ke Analisis Aliran dan klik bintang . Ini akan menyematkannya ke menu portal.
- Klik tugas Analisis Aliran di menu portal.
- Pilih pekerjaan yang baru saja Anda buat.
- Masukkan nama untuk input (yaitu SensorTelemetry-Input).
- Terima nilai default yang tersisa.
- Masukkan nama untuk output (yaitu SensorTelemetry-Output).
- Pilih Database SQL sebagai wastafel.
- Pilih database Sensor Telemetri.
- Masukkan nama pengguna yang Anda tentukan saat membuat server database.
- Masukkan sandi yang Anda tentukan saat membuat server database.
- Masukkan SensorReadings untuk nama tabel.
- Ganti teksnya [YourOutputAlias] dengan nama keluaran (menjaga tanda kurung siku).
- Ganti teksnya [YourInputAlias] dengan nama input (menjaga tanda kurung siku).
- Ganti tanda bintang (* ) dengan teks ini: [TimestampUtc], Sumber, Suhu, IsCritical, IsAboveUpperThreshold, IsBelowLowerThreshold
- Klik Simpan lalu klik Ya jika diminta.
- Klik Ringkasan di menu tugas Analisis Aliran.
- Klik Mulai tombol.
- Pilih Sekarang.
- Klik Mulai .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Mengonfigurasi Perangkat Lunak
Menggunakan tautan repositori di bagian bawah laman, unduh kode sebagai file zip atau klon repositori ke komputer Anda dan buka proyek di Visual Studio .
Mengonfigurasi dan Memublikasikan Aplikasi Seluler
Aplikasi web (terletak di folder Web) perlu dipublikasikan ke Azure App Service.
- Klik kanan proyek di Visual Studio dan pilih Publikasikan .
- Klik Layanan Aplikasi Microsoft Azure .
- Pilih Layanan Aplikasi Anda dari daftar (Anda mungkin perlu masuk jika ini pertama kalinya).
- Pilih Database SQL dari menu portal.
- Klik Tampilkan string koneksi database tautan.
- Klik tombol salin di samping ADO.NET string.
- Kembali ke Visual Studio dan tempel string ini ke dalam kotak teks berlabel MS_TableConnectionString .
- Ubah nama pengguna dan sandi ke nilai yang Anda tetapkan saat membuat SQL Server.
- Klik Publikasikan .
- Setelah publikasi selesai, browser akan diluncurkan ke situs web baru Anda.
-
-
-
-
-
-
-
-
-
-
Masukkan Kredensial IoT Hub
Sebelum menjalankan aplikasi, Anda harus memasukkan kredensial perangkat IoT Hub ke dalam kode.
- Buka proyek di Visual Studio.
- Memperluas Telemetri Sensor proyek di bawah UWP folder dan buka kode di belakang untuk App.xaml .
- Gulir ke bawah ke bagian dengan definisi untuk IIotHubConfiguration .
- Buka Device Explorer proyek dalam contoh lain dari Visual Stduio.
- Klik kanan perangkat yang Anda buat sebelumnya.
- Klik Salin string koneksi untuk perangkat yang dipilih pilihan di menu.
- Kembali ke proyek Sensor Telemetri dan tempel string koneksi di atas teks {YOUR CONNECTION STRING HERE} .
- Masukkan nama perangkat di atas teks {YOUR DEVICE ID HERE} .
- Memperluas Sensor Telemetri IoT proyek dan temukan kode di belakang untuk App.xaml .
- Gulir ke bawah ke bagian dengan definisi untuk IIotHubConfiguration .
- Salin dan tempel konfigurasi yang sama dari app.cs sebelumnya berkas.
-
-
-
-
-
-
-
-
Masukkan URL Aplikasi Seluler
URL Aplikasi Seluler juga harus dimasukkan ke dalam kode.
- Buka proyek di Visual Studio.
- Buka UnityConfiguration.cs .
- Gulir ke bawah ke bagian yang berisi IMobileServicesConfiguration definisi.
- Pilih Layanan Aplikasi Anda buat untuk proyek ini.
- Arahkan mouse ke URL dan klik Salin ikon.
- Goback to Visual Studio and paste the URL over the text {YOUR MOBILE SERVICES URL HERE} .
Read More Detail :Sensor Telemetry 2.0.1