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

Rumah Pintar Rumah

Komponen dan persediaan

Raspberry Pi 2 Model B
PI Oranye juga bisa
× 1
Xbee
× 1
Arduino UNO
× 1

Aplikasi dan layanan online

Microsoft Azure

Tentang proyek ini

Pendahuluan

Mari kita lihat apa yang kita perlukan untuk menyiapkan sistem rumah pintar menggunakan MediaTek Linkit. Karena ada banyak ahli di sini untuk memandu Anda dalam pemasangan perangkat keras untuk membaca data sensor, saya akan berkonsentrasi pada pembuatan apis dan menyiapkan server lokal dengan biaya sangat rendah $15 untuk menangkap semua data sensor Anda. Secara opsional, saya mencatat data ke Azure.

Siapkan

Sensor mengirimkan data di sana melalui sinyal radio menggunakan xbee atau transceiver berbiaya rendah ke MediaTek LinkIt. Tautan MediaTekIt menerima semua data sensor mentah, mengemasnya ke dalam objek json menggunakan pustaka adruinojson dan membuat permintaan POST ke server lokal. Server lokal menghosting aplikasi web nodejs dan menerima semua data sensor sebagai objek json.

Server lokal digunakan sebagai pra-prosesor dan menambahkan waktu dan tanda tangan utc. Validasi, konversi, dan filtrasi data apa pun dapat diproses di sini. Server lokal mencatat semua data ke layanan cloud dalam layanan penyimpanan Azure kasus kami. Atau, MediaTek linkIt dapat langsung memposting objek json ke layanan penyimpanan Azure. Saya menyiapkan server lokal hanya untuk membuktikan bahwa komputer seharga $15 bisa cukup kuat untuk menangani data kami. kami dapat memasukkan data kami ke dalam db tanpa sql bahkan di server lokal kami sepenuhnya menghilangkan kebutuhan akan penyimpanan cloud eksternal. Saya serahkan semua ini pada kalian.

Demo

 

Prasyarat

Saya berasumsi bahwa Anda tahu cara membaca data sensor menggunakan sensor dan mikrokontroler seperti arduino atau mediaTek. Untuk membatasi ruang lingkup proyek ini, saya akan berasumsi bahwa data sensor tersedia untuk MediaTek Link It. Anda dapat menggunakan transceiver radio low cast atau Xbee untuk mengirim dan menerima sinyal radio dari sensor yang terpasang pada mikrokontoller seperti MediaTek. Pemula dapat menggunakan mediaTek linkIt groove starter kit untuk membaca data lingkungan eksternal seperti suhu, kelembaban, cahaya, dll.

Json Json Json

Json telah menjadi standar de facto untuk iot dan telah diadopsi secara luas. Setelah mengatakan tentang prasyarat, mari kita mulai dengan memodelkan data sensor kita. Tujuan utamanya adalah untuk menangkap sebanyak mungkin data dan meneruskannya ke server. Server dapat melakukan semua pekerjaan angkat berat seperti analitik, konversi data, pembelajaran mesin, dll. 

'yang diinginkan' objek json akan menjadi keadaan data sensor yang diinginkan. Misalnya saat kami merekam suhu, nilai 24 yang diinginkan berarti kami perlu menyinkronkan nilai ke cloud dengan nilai 24. Klien kami seperti aplikasi web atau aplikasi seluler akan diperbarui ke nilai ini.

Ketika kita ingin menyalakan lampu kita katakan, keadaan yang diinginkan seperti on. Artinya lampu menyala atau akan dinyalakan. Semua aplikasi klien kami akan menggunakan status ini untuk mencerminkan perubahan pada pengguna. Maksud saya, ikon di aplikasi web kami akan diaktifkan atau dinonaktifkan.

Ini bukan standar internasional, saya baru saja membuat ini. Jadi, silakan gunakan format Anda sendiri yang nyaman.

Suhu

{ "deviceid" :"iot/myhome/livingroom/thermostat""diinginkan" :{ "temperature" :"24", "humidity":"80"}, "timeutc":"2015-11 -23T00:41:48.824Z", "singedBy" :"localserver"} 

Mikrofon

{ "deviceid" :"iot/myhome/livingroom/mic""diinginkan" :{"intensity" :"66"}, "timeutc":"23-11-2015T00:41:48.824Z" , "singedBy" :"localserver"} 

Jarak

{ "deviceid" :"iot/myhome/livingroom/obstacle""desired" :{"proximity" :"150"}, "timeutc":"01-01-2015", "singedBy" :"server lokal"} 

PIR

{ "deviceid" :"iot/myhome/livingroom/pir""diinginkan" :{"motion start" :"2500", "motion end" :"5345"}, "timeutc":"2015 -11-23T00:41:48.824Z", "singedBy" :"localserver"} 

GPS

{"deviceid" :"iot/mydevice/location""diinginkan" :{"lat" :"25.5", "long" :"32.2"},"timeutc":"2015-11-23T00 :41:48.824Z","singedBy" :"localserver"} 

Kelembaban

{"deviceid" :"/iot/myhome/garden/moisture""diinginkan" :{"moisture":"20"},"timeutc":"23-11-2015T00:41:48.824Z ","singedBy" :"localserver"} 

Bensin

{"deviceid" :" /iot/myhome/kitchen/gas""diinginkan" :{"leak":"Tidak"},"timeutc":"23-11-2015T00:41:48.824Z ","singedBy" :"localserver"} 

Ringan

{"deviceid" :" /iot/myhome/livingroom/light""diinginkan" :{"intensity":"60"},"timeutc":"2015-11-23T00:41:48.824Z ","singedBy" :"localserver"} 

Atau gunakan ini,

Ruang Tamu

{"deviceid" :"/iot/myhome/livingroom""desired" :{ "temperature" :"25",                      "humidity" :"80",                    "   "          "    ":"tertutup",                      "light":"80",                       "noise":"rendah"}} 

Kamar Tidur

{"deviceid" :"/iot/myhome/bedroom""diinginkan" :{ "temperature" :"24",                     "humidity" :"70",                     "window"                 "ditutup ":"tertutup",                     "light":"80",                     "ac":"on"                  "noise":"rendah"}} 

MediaTek - Penerima 

Silakan merujuk file ino yang dilampirkan ke bagian perangkat lunak untuk memasukkan data ke server lokal. Data sensor disimulasikan, Anda dapat meneruskan pembacaan aktual ke objek json masing-masing

Server Lokal

Server lokal menambahkan overhead tetapi akan sangat membantu dalam banyak hal. Kita dapat menggunakan server lokal sebagai pra-prosesor untuk data yang keluar. Data dapat disaring, diberi cap waktu dan ditandatangani

PC kecil dan nodejs adalah pilihan yang sangat baik untuk server lokal. Kita dapat memilih pc kecil seperti raspberry pi, odriod, banana pi, beagle bone dll. Saya telah memilih orange pi ($15) untuk proyek ini.

Siapkan

Raspberry pi 2 atau Orange Pi dengan rasa apapun dari os linux yang mendukung nodejs 5. Saya telah memilih orange pi dengan arch linux untuk arm7. Menginstal nodejs dan npm. Unduh iotapp saya dari github dan navigasikan ke /your/local/path/iotapp dan jalankan npm install. Aplikasi expressjs dasar mulai mendengarkan pada port 3000 Anda.

Telusuri ke your-local-ip:3000 untuk memeriksa apakah tampilan default expressjs telah dirender. Saya telah membuat api ini untuk memposting data sensor

/iot/myhome/livingroom/thermostat - Temperatur api

/iot/myhome/livingroom/mic - Suara api

/iot/myhome/livingroom/pir - Presence sensor api

/iot/myhome/livingroom/distance - Api sensor jarak

/iot/myhome/mydevice/location - api pelacak gps

/iot/myhome/garden/moisture - api sensor kelembaban tanah

/iot/myhome/kitchen/gas - api sensor kebocoran gas

/iot/myhome/livingroom/light - api sensor cahaya

/iot/myhome/livingroom - api lain untuk ruang tamu

/iot/myhome/bedroom - api lain untuk kamar tidur


Untuk mengatur server lokal. Kloning kode sumber iotapp dari github saya. Ubah index.js untuk memasukkan alamat ip cloud atau nama domain tempat aplikasi aspnet5 di-host di biru

Server Jarak Jauh

Memublikasikan data ke cloud telah menjadi populer sekarang ini. Kami dapat membeli langganan dari data iot yang disediakan seperti amazon, azure, spark fun, pubnub, status awal, dan banyak lainnya. Saya telah memilih biru untuk demo ini. Analisis data, penambangan data, dan algoritme pembelajaran mesin dapat dikembangkan untuk memproses data kami.

Unduh iotwebapp dari github saya. Saya membuatnya menggunakan visual studio 2015 dengan target asp.net5. Apis ini diatur untuk memposting data idiot. Api mencatat iot di tabel penyimpanan Azure

Parameter deviceid dapat diatur untuk mengidentifikasi lokasi sensor.

Api ini telah disiapkan, 

api/iot/myhome/thermostat - asp.net5 web api untuk mencatat semua data termostat 

api/iot/myhome/microphone- asp.net5 web api untuk mencatat semua data mikrofon

api/iot/myhome/pir - asp.net5 web api untuk mencatat semua data pir

api/iot/myhome/distance - asp.net5 web api untuk mencatat semua data sensor jarak

api/iot/myhome/device/location - asp.net5 web api untuk mencatat data gps

api/iot/myhome/moisture - asp.net5 web api untuk mencatat data sensor kelembapan

api/iot/myhome/gas - asp.net5 web api untuk mencatat data sensor gas

api/iot/myhome/light - asp.net5 web api untuk mencatat semua data sensor cahaya

api/iot/myhome/livingroom - asp.net5 web api untuk mencatat semua atribut/data sensor ruang tamu. kita dapat menggunakan api yang satu ini untuk mendorong semua nilai sensor.

api/iot/myhome/bedroom - sama seperti di atas, saya telah membuatnya untuk mencatat detail kamar tidur saya 

Untuk mengatur server jarak jauh. Kloning kode sumber iotwebapp dari github saya. Buat tabel penyimpanan biru. Ubah IoTController.cs dan masukkan nama dan kunci akun tabel penyimpanan Azure Anda. Gunakan nama domain atau ip ini di server lokal

Kesimpulan

Ada banyak area yang akan di-refactored dalam kode. Silakan modifikasi dan beri tahu saya jika Anda terkena.

Kode

  • MediaTekRx
  • nodejs - server lokal
  • ThermoStatController.cs
  • PIRController.cs
  • MoistureController.cs
  • LivingRoomController.cs
  • LightController.cs
  • GPSController.cs
  • GasController.cs
  • DistanceController.cs
  • BedRoomController.cs
MediaTekRxC/C++
Media Tek sebagai penerima. Sketsa ke data lokal ke server lokal
/* Klien web Sketsa ini terhubung ke situs web menggunakan fungsionalitas Wi-Fi pada platform MediaTek LinkIt. Ubah makro WIFI_AP, WIFI_PASSWORD, WIFI_AUTH, dan SITE_URL. dibuat 13 Juli 2010 oleh dlf (Metodo2 srl) dimodifikasi 31 Mei 2012 oleh Tom Igoe dimodifikasi 20 Agustus 2014 oleh MediaTek Inc. */#include #include #include #include #menentukan WIFI_AP "ap Anda"#menentukan WIFI_PASSWORD "kata sandi Anda"#menentukan WIFI_AUTH LWIFI_WPA // memilih dari LWIFI_OPEN, LWIFI_WPA, atau LWIFI_WEP.#menentukan SITE_URL "ip Anda" //alamat nodejs atau ip biru Anda nama domainLWiFiClient c;pengaturan batal(){ LWiFi.begin(); Serial.begin(115200); // terus coba lagi sampai terhubung ke AP Serial.println("Connecting to AP"); while (0 ==LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) { delay(1000); } // terus coba lagi sampai terhubung ke website Serial.println("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Menghubungkan Kembali ke Situs Web"); penundaan (1000); }}boolean disconnectedMsg =false;void loop(){ // Pastikan kita terhubung, dan buang konten respon ke Serial while (!c) { Serial.println(" Server disconnected.."); // terus coba lagi sampai terhubung ke website Serial.println("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Menghubungkan Kembali ke Situs Web"); penundaan (1000); } } Serial.println("Membaca suhu.."); updateSuhu(); penundaan(3000); Serial.println("Mendeteksi suara.."); updateSuara(); penundaan(3000); Serial.println("Mendeteksi pergerakan orang.."); perbaruiPIR(); penundaan(3000); Serial.println("Mendeteksi halangan.."); perbarui jarak(); penundaan(3000); Serial.println("Memperbarui lokasi perangkat.."); perbaruiGPSTracker(); penundaan(3000); Serial.println("Menghitung kelembapan tanah.."); updateMoisture(); penundaan(3000); Serial.println("Mendeteksi kebocoran gas.."); updateGasLeak(); penundaan(3000); Serial.println("Merekam intensitas cahaya.."); updateLightIntensity(); penundaan(3000); updateLivingroomAttributes(); penundaan(3000); updateBedroomAttributes(); delay(3000);}void writeToConsole(){ // Pastikan kita terhubung, dan buang konten respons ke Serial while (c) { int v =c.read(); if (v !=-1) { Serial.print((char)v); } } Serial.println(); Serial.println("Server terputus.."); // terus coba lagi sampai terhubung ke website Serial.println("Connecting to WebSite"); while (0 ==c.connect(SITE_URL, 3000)) { Serial.println("Menghubungkan Kembali ke Situs Web"); penundaan (1000); } }void updatePIR(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); root["deviceid"] ="/iot/myhome/ruang tamu/pir"; //anggap unit default ms yang diinginkan["motionstart"] =String(random(0,1000)); diinginkan["motionend"]=String(random(1000,10000)); String len =String(root.measureLength()); c.println("POST /iot/myhome/ruang tamu/pir HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); //logika untuk mendeteksi respons server yang lambat dan memposting permintaan lagi tanpa menunggu respons mati s =milis(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }void updateDistance(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); root["deviceid"] ="/iot/myhome/ruang tamu/sensor jarak"; //asumsikan satuan default cm yang diinginkan["hambatan"]=String(random(50.450)); String len =String(root.measureLength()); c.println("POST /iot/myhome/ruang tamu/jarak HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }void updateGPSTracker(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); root["deviceid"] ="/iot/mydevice"; diinginkan["lat"] =String(acak(20,25)); diinginkan["panjang"]=String(acak(22,27)); String len =String(root.measureLength()); c.println("POST /iot/mydevice/lokasi HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole();}void updateMoisture(){ long unsigned int s; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); root["deviceid"] ="/iot/rumahku/taman/kelembaban"; //asumsikan unit default yang diinginkan["kelembaban"] =String(random(40,60)); String len =String(root.measureLength()); c.println("POST /iot/myhome/garden/moisture HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }void updateGasLeak(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); diinginkan["kebocoran"] ="tidak"; root["deviceid"] ="/iot/rumahku/dapur/gas"; int s panjang yang tidak ditandatangani; String len =String(root.measureLength()); c.println("POST /iot/myhome/dapur/gas HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }void updateLightIntensity(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); diinginkan["intensitas"] ="80"; root["deviceid"] ="/iot/myhome/livingroom/light"; int s panjang yang tidak ditandatangani; String len =String(root.measureLength()); c.println("POST /iot/myhome/livingroom/light HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }void updateLivingroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/rumahku/ruang tamu"; JsonObject&diinginkan =root.createNestedObject("diinginkan"); //Api alternatif untuk loggin atribut ruang tamu sekaligus yang diinginkan["window"] ="open"; diinginkan["pintu"] ="tertutup"; diinginkan["ac"] ="mati"; diinginkan["suhu"] =String(acak(24,28)); diinginkan["kelembaban"] =String(random(60,65)); int s panjang yang tidak ditandatangani; String len =String(root.measureLength()); c.println("POST /iot/myhome/ruang tamu HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); } batal updateBedroomAttributes(){ DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root["deviceid"] ="/iot/rumahku/kamar tidur"; JsonObject&diinginkan =root.createNestedObject("diinginkan"); //Api alternatif untuk loggin atribut ruang tamu sekaligus yang diinginkan["window"] ="open"; diinginkan["pintu"] ="tertutup"; diinginkan["ac"] ="mati"; diinginkan["suhu"] =String(acak(22,23)); diinginkan["kelembaban"] =String(acak(75,80)); int s panjang yang tidak ditandatangani; String len =String(root.measureLength()); c.println("POST /iot/myhome/bedroom HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); } void updateSound(){ long unsigned int s; panjang unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); diinginkan["intensitas"] =String(acak(40,80)); root["deviceid"] ="/iot/myhome/ruang tamu/mikrofon"; root["waktu"] =""; root["ditandatangani"]=""; String len =String(root.measureLength()); c.println("POST /iot/myhome/ruang tamu/mic HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole();}void updateTemperature(){ long unsigned int s; panjang unsigned int e; DynamicJsonBuffer jsonBuffer; JsonObject&root =jsonBuffer.createObject(); JsonObject&diinginkan =root.createNestedObject("diinginkan"); diinginkan["suhu"] =String(acak(20,40)); diinginkan["kelembaban"]=String(random(60,80)); root["deviceid"] ="/iot/myhome/ruang tamu/termostat"; root["waktu"] =""; root["ditandatangani"]=""; String len =String(root.measureLength()); c.println("POST /iot/myhome/ruang tamu/termostat HTTP/1.1"); c.println("Host:" SITE_URL); c.println("Tipe-Konten:aplikasi/json"); c.println("Kontrol Cache:tanpa cache"); c.print("Panjang Konten:"); c.println(len); c.println("Koneksi:tutup"); c.println(); root.printTo(c); root.printTo(Serial); s =mili(); // menunggu respons server Serial.println("menunggu respons HTTP:"); while (!c.available()) { delay(100); if((milis() - s> 3000)) { Serial.println(); Serial.println("Server tidak merespons.."); merusak; } } Serial.println("Memanggil tulis ke konsol.."); writeToConsole(); }
nodejs - server lokalJavaScript
Index.js yang memiliki rute untuk menerima data dari Media Tek
var express =require('express');var router =express.Router();var buf =require('buffer');var request =memerlukan("permintaan");//ganti nama-ip-atau-domain-Anda dengan alamat ip atau nama domain Anda yang sebenarnya//contoh iot.azurewebsites.com//contoh namadomainanda.com//contoh 47.12.67.16// terima POST permintaan di homepagerouter.post('/iot/myhome/livingroom/thermostat', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ metode:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/livingroom/thermostat', header:{ 'cache -control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Suhu ruang tamu direkam');});// terima permintaan POST microuter.post('/iot/myhome/livingroom/mic' , seru ction (req, res) { var state =req.body; state.timeutc =Tanggal baru(); state.signedby ="orangepi"; console.log(negara); var options ={ metode:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/livingroom/microphone', headers:{ 'cache-control':'no- cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Intensitas suara ruang tamu direkam');});// terima permintaan POST pirrouter.post('/iot/myhome/livingroom/pir', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ metode:'POST', url:'http://your-ip-or-domain-name /api/iot/myhome/livingroom/pir', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request (options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Gerakan pir ruang tamu direkam');});/ / terima permintaan POST distancerouter.post('/iot/myhome/livingroom/distance', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ metode:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/livingroom/distance', headers:{ 'cache -control':'no-cache', 'content-type':'application/json' }, body:state, js pada:benar }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Ruang tamu terekam');});// terima permintaan POST gpsrouter.post('/iot/mydevice/location', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/ iot/mydevice/location/gps', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('device location recorded');});// accept POST request moisturerouter .post('/iot/myhome/garden/moisture', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state ); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/garden/moisture', headers:{ 'cache-control':' no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Garden moisture level recorded');});// accept POST request gasrouter.post('/iot/myhome/kitchen/gas', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/kitchen/gas', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Gas leak information recorded');});// accept POST request lightrouter.post('/iot/myhome/livingroom/light', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/livingroom/light', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(optio ns, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Light intensity recorded');});// accept POST request livingroomrouter.post('/iot/myhome/livingroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/room/livingroom', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Livingroom attributes recorded');});// accept POST request bedroomrouter.post('/iot/myhome/bedroom', function (req, res) { var state =req.body; state.timeutc =new Date(); state.signedby ="orangepi"; console.log(state); var options ={ method:'POST', url:'http://your-ip-or-domain-name/api/iot/myhome/room/bedroom', headers:{ 'cache-control':'no-cache', 'content-type':'application/json' }, body:state, json:true }; request(options, fu nction (error, response, body) { if (error) throw new Error(error); console.log(body); }); res.send('Bedroom attributes recorded');});// accept PUT request at /userrouter.put('/user', function (req, res) { res.send('Got a PUT request at /user');});// accept DELETE request at /user//router.delete('/user', function (req, res) {// res.send('Got a DELETE request at /user');//});/* GET home page. */router.get('/', function(req, res, next) { res.render('index', { title:'Express' });});module.exports =router;
ThermoStatController.csC#
api to log temperature data to the cloud
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Newtonsoft.Json;using Microsoft.WindowsAzure.Storage;using Microsoft.WindowsAzure.Storage.Auth;using Microsoft.WindowsAzure.Storage.Table;// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class ThermoStatController :IoTController { // GET:// public IActionResult Index() { return View(); } [HttpPost] public IActionResult Post([FromBody]IotTemperature iotTemperature) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotTemperature.PartitionKey ="thermostat"; iotTemperature.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotTemperature); // Execute the insert operation. table.Execute(insertOperation); return Ok("Temperature data logged to azure cloud.."); } } public class IotTemperature :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string temperature { get; mengatur; } public string humidity { get; mengatur; } } }}
PIRController.csC#
api to log presence sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class PIRController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotPIR iotPIR) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotPIR.PartitionKey ="pir"; iotPIR.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotPIR); // Execute the insert operation. table.Execute(insertOperation); return Ok("PIR data logged to azure cloud.."); } } public class IotPIR :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string motionstart { get; mengatur; } public string motionend { get; mengatur; } } }}
MoistureController.csC#
api to log soil moisture data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/garden/[Controller]")] public class MoistureController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotMoisture iotMoisture) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotMoisture.PartitionKey ="moisture"; iotMoisture.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotMoisture); // Execute the insert operation. table.Execute(insertOperation); return Ok("Moisture data logged to azure cloud.."); } } public class IotMoisture :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string moisture { get; mengatur; } } }}
LivingRoomController.csC#
api to log all living room sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/room/[controller]")] public class LivingRoomController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotLivingRoom iotLivingRoom) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotLivingRoom.PartitionKey ="livingroom"; iotLivingRoom.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotLivingRoom); // Execute the insert operation. table.Execute(insertOperation); return Ok("Living room attributes logged to azure cloud.."); } } public class IotLivingRoom :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string window { get; mengatur; } public string door { get; mengatur; } public string ac { get; mengatur; } public string temperature { get; mengatur; } public string humidity { get; mengatur; } } }}
LightController.csC#
api to log light sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class LightController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotLight iotLight) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotLight.PartitionKey ="light"; iotLight.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotLight); // Execute the insert operation. table.Execute(insertOperation); return Ok("Light intensity logged to azure cloud.."); } } public class IotLight :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string intensity { get; mengatur; } } }}
GPSController.csC#
api to log gps data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/mydevice/location/[Controller]")] public class GPSController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotGPS iotGPS) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotGPS.PartitionKey ="gps"; iotGPS.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotGPS); // Execute the insert operation. table.Execute(insertOperation); return Ok("GPS data logged to azure cloud.."); } } public class IotGPS :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string lat { get; mengatur; } [JsonProperty("long")] public string longitude { get; mengatur; } } }}
GasController.csC#
api to log gas leakage data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/kitchen/[Controller]")] public class GasController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotGas iotGas) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotGas.PartitionKey ="gas"; iotGas.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotGas); // Execute the insert operation. table.Execute(insertOperation); return Ok("Gas leak information logged to azure cloud.."); } } public class IotGas :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string leak { get; mengatur; } } }}
DistanceController.csC#
api to log ultrasonic distance sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/livingroom/[Controller]")] public class DistanceController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotDistance iotDistance) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotDistance.PartitionKey ="distance"; iotDistance.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotDistance); // Execute the insert operation. table.Execute(insertOperation); return Ok("Obstacle data logged to azure cloud.."); } } public class IotDistance :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string obstacle { get; mengatur; } } }}
BedRoomController.csC#
api to log all bedroom sensor data to azure
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNet.Mvc;using Microsoft.WindowsAzure.Storage.Table;using Newtonsoft.Json;// For more information on enabling Web API for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860namespace iotwebapp.Controllers{ [Route("api/iot/myhome/room/[controller]")] public class BedRoomController :IoTController { [HttpPost] public IActionResult Post([FromBody]IotBedRoom iotBedRoom) { // Create the table client. CloudTableClient tableClient =storageAccount.CreateCloudTableClient(); // Create the CloudTable object that represents the "people" table. CloudTable table =tableClient.GetTableReference("iot"); iotBedRoom.PartitionKey ="bedroom"; iotBedRoom.RowKey =Guid.NewGuid().ToString(); // Create the TableOperation object that inserts the customer entity. TableOperation insertOperation =TableOperation.Insert(iotBedRoom); // Execute the insert operation. table.Execute(insertOperation); return Ok("Bed room attributes logged to azure cloud.."); } } public class IotBedRoom :TableEntity { public string deviceid { get; mengatur; } public string timeutc { get; mengatur; } public string signedby { get; mengatur; } public string state { get { return JsonConvert.SerializeObject(this.desired); } set {; } } public Desired desired { get; mengatur; } public class Desired { public string window { get; mengatur; } public string door { get; mengatur; } public string ac { get; mengatur; } public string temperature { get; mengatur; } public string humidity { get; mengatur; } } }}
Media Tek Smart home - Source code for data logging
source code for nodejsapp, aspnet5 and mediatek receiver inohttps://github.com/syediddi/iot-mediatek-linkIt

Skema

Transmit radio signal from arduino Transmit radio signal via Xbee from arduino without shield Transmit radio signals from arduino

Proses manufaktur

  1. Data pintar:Perbatasan berikutnya di IoT
  2. 433MHz Smart Home Controller dengan Sensorflare dan RaspberryPi
  3. RASPBERRY PI HOME AUTOMATION
  4. Bartender Cerdas
  5. Rumah sakit pintar masa depan membutuhkan perangkat lunak yang lebih cerdas
  6. Kesenjangan keterampilan rumah pintar
  7. Manfaat interkonektivitas di tempat kerja
  8. Jadilah cerdas:Masa depan rumah Anda
  9. Mimpi pipa pabrik yang cerdas
  10. Konektivitas rumah pintar:3 langkah untuk mengatasi hambatan utama