Raspberry Pi terdaftar sebagai perangkat di Azure IoT Hub. Cara termudah untuk mendaftarkan perangkat di Azure IoT Hub adalah menggunakan Device Explorer. Alat ini juga merupakan cara yang bagus untuk mendapatkan rangkaian koneksi perangkat, memantau pesan D2C (Perangkat ke Cloud) dan menguji pengiriman pesan C2D (Cloud ke Perangkat).
Edit perintah berikut di StartupTask.cs untuk menghubungkan IoTPoolRaspiBackgroundApp ke IoT Hub Anda:
Arduino Uno
Arduino Uno R3 terhubung ke dua sensor suhu DS18B20 menggunakan Dallas Controls Library dan OneWire Library. Ini didukung oleh Raspberry Pi melalui USB (5v) dan mengirimkan sepasang pembacaan suhu ke Raspberry Pi melalui I2C menggunakan pin SDA dan SLC. Lihat diagram Fritzing untuk skema.
Gunakan kode Two-DS18B20-I2C.ino untuk menjalankan Arduino.
Azure
Semua komponen Azure dibuat di wilayah Azure yang sama (AS Barat) untuk meminimalkan biaya yang terkait dengan lalu lintas keluar.
Pusat Azure IoT
Edisi gratis Azure IoT Hub digunakan dalam proyek ini. Ini dibatasi hingga 8.000 pesan/hari pada masing-masing 500 byte. IoTPoolRaspiBackgroundApp mengirim pesan D2C dengan kecepatan 1 per menit, atau 1.440/hari, pada masing-masing 158 byte. Ini menyisakan ruang yang cukup untuk pesan C2D.
Anda harus terlebih dahulu mendaftarkan perangkat dengan Azure IoT Hub. Metode termudah adalah menggunakan Device Explorer. Setelah terdaftar, Anda dapat memperoleh string koneksi perangkat menggunakan Device Explorer.
Analisis Streaming Azure
Pekerjaan Azure Streaming Analytics (ASA) menghubungkan input IoT Hub ke output Azure SQL Database menggunakan kueri ASA sederhana berikut.
SELECT PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTimeINTO sqlFROM iothub
Kueri ini menulis setiap pesan JSON Device to Cloud (D2C) (1 per menit) ke tabel bernama Pools di Azure SQL Database.
Penyempurnaan kueri ini di masa mendatang dapat mencakup beberapa fungsi agregasi untuk tujuan peringatan (mis. Rata-rata PoolWaterTempC> 35 menunjukkan kolam terlalu panas).
Basis Data Azure SQL
Untuk meminimalkan biaya, dan karena persyaratan kinerja database minimal, database adalah Standar S0 (10 DTU).
Basis data tunggal dengan satu tabel dibuat untuk menyimpan semua pesan D2C.
Skema:
BUAT TABEL [dbo].[Pools] ([Id] INT IDENTITY (1, 1) NOT NULL,[PoolName] NVARCHAR (MAX) NULL,[PoolWaterTempC] FLOAT (53) NOT NULL,[OutsideAirTempC ] FLOAT (53) NOT NULL,[IsPoolPowerOn] INT NOT NULL,[SampleDateTime] DATETIME NOT NULL,CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC));
Aplikasi Azure API
API adalah RESTful API yang dibuat menggunakan ASP.NET Web API.
Klien API harus mengautentikasi menggunakan kunci API yang ditentukan di header HTTP.
api-key :{kunci API Anda}
Kunci API ditentukan di IoTPoolAPI\Controllers\PoolControllers.cs . Aplikasi Seluler dan Aplikasi Web harus menggunakan kunci API ini untuk berkomunikasi dengan API.
REST API mendukung metode berikut:
Perbaikan masa depan untuk API mungkin termasuk menempatkannya di belakang Azure API Management dan menambahkan opsi otentikasi lain ke dalam API seperti Azure Active Directory.
Aplikasi Web Azure
IoTPoolWebApp berisi aplikasi formulir web ASP.NET untuk berinteraksi dengan API.
Ada juga versi aplikasi web yang ramah seluler.
Edit default.aspx.cs dan ubah yang berikut:
string statis pribadi apiKey ="";...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweroff");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweron");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api /pool/getlatest");
Aplikasi web terintegrasi dengan Azure Active Directory (AAD) untuk otentikasi. Aplikasi web mengharuskan semua pengguna harus mengautentikasi menggunakan AAD.
Anda harus terlebih dahulu mendaftarkan aplikasi web Anda dengan penyewa AAD Anda (mis. tenant_name.onmicrosoft.com). Anda dapat melakukan ini melalui Portal Azure atau melalui Visual Studio. Setelah terdaftar, salin ID klien dari Portal Azure.
Selanjutnya, ubah domain AAD di aplikasi web dengan memodifikasi di web.config.
Aplikasi Seluler
Aplikasi Seluler ditulis menggunakan Formulir Xamarin. Saya hanya mengkompilasinya untuk berjalan di Windows Phone dan Windows 10 tetapi harus mengkompilasi silang di iOS dan Android.
Edit Core.cs dan ubah yang berikut:
string queryString ="http://azurewebsites.net/api/pool/getlatest
Edit DataService.cs dan ubah berikut ini:
string statis pribadi apiKey ="";
Edit PoolPage.xaml.cs dan ubah berikut ini:
string statis pribadi apiKey ="";...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweroff");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweron");
Power BI
Power BI (edisi gratis) digunakan untuk membuat dan menerbitkan dasbor waktu nyata yang menampilkan data IoT Pool.
Prosesnya melibatkan pengunduhan Power BI Desktop, menyambungkan ke Azure SQL DB (menggunakan DirectQuery), membuat beberapa laporan dengan visual, dan menerbitkan .pbix ke PowerBI.com. Saya kemudian menyematkan laporan ke dasbor.
Di masa mendatang, saya dapat menggunakan Power BI yang disematkan untuk menyematkan dasbor secara langsung ke dalam aplikasi web.
Untuk saat ini saya dapat melihat dasbor melalui Powerbi.com atau melalui aplikasi seluler Power BI gratis.
Referensi
Berikut daftar sumber daya yang saya gunakan dalam membangun solusi ini:
- https://developer.microsoft.com/en-us/windows/iot/win10/samples/blinky
- https://create.arduino.cc/projecthub/mmackes/pool-controller-8dfa69?ref=tag&ref_id=relays&offset=0
- https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-getstarted/
- https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-c2d/
- https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-rest-service-aspnet-api-sql-database/
- https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started/
- https://msdn.microsoft.com/en-us/library/hh975357.aspx
- https://www.arduino.cc/en/Guide/Windows
- http://playground.arduino.cc/Learning/OneWire
- http://milesburton.com/Dallas_Temperature_Control_Library
- https://learn.sparkfun.com/tutorials/i2c
Terima kasih khusus kepada Miles Burton untuk Perpustakaan Kontrol Dallas dan Mike Mackes untuk kode sampel Arduino / I2C / DS18B20 dan inspirasi keseluruhan untuk proyek ini.
Kode
- Format Payload Pesan JSON untuk Pesan Perangkat ke Cloud (D2C)
- Skema Tabel "Kolam" Basis Data SQL
Format Payload Pesan JSON untuk Pesan Perangkat ke Cloud (D2C)JSON
Catatan:"IsPoolPowerOn" - 0 menunjukkan matikan; 1 menunjukkan daya hidup{ "PoolName" :"IoTPool", "PoolWaterTempC" :30, "OutsideAirTempC" :27, "IsPoolPowerOn" :false, "SampleDateTime" :"2016-07-05T23:35:58.0882185Z" }
Skema Tabel "Kolam" Basis Data SQLSQL
BUAT TABEL [dbo].[Kolam] ( [Id] IDENTITAS INT (1, 1) NOT NULL, [PoolName] NVARCHAR (MAX) NULL, [PoolWaterTempC] FLOAT (53) NOT NULL, [OutsideAirTempC] FLOAT ( 53) NOT NULL, [IsPoolPowerOn] INT NOT NULL, [SampleDateTime] DATETIME NOT NULL, CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC));
Repo IoT Pool Git Hub
Semua kode sumberhttps://github.com/khilscher/iotpool Skema
Raspberry Pi ke Arduino melalui I2C yang menghubungkan 2 Sensor DS18B20 RaspiArduinoTwoDS18B20.fzzDiagram arsitektur keseluruhan