Isi kandungan:

Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU: 11 Langkah
Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU: 11 Langkah

Video: Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU: 11 Langkah

Video: Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU: 11 Langkah
Video: PROJECT ARDUINO IOT MONITORING CUACA/WEATHER STATION BERBASIS NODEMCU-ESP8266 & APLIKASI BLYNK #iot 2024, Julai
Anonim
Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU
Sistem Pemantauan Cuaca IoT Teragih Pintar Menggunakan NodeMCU

Anda semua mungkin menyedari stesen cuaca tradisional; tetapi pernahkah anda terfikir bagaimana ia berfungsi? Oleh kerana stesen cuaca tradisional mahal dan besar, kepadatan stesen-stesen ini per unit kawasan sangat kurang yang menyumbang kepada ketidaktepatan data. Saya akan menerangkan kepada anda bagaimana: Andaikan stesen terletak di tengah-tengah bandar dan ia adalah satu-satunya stesen yang berada dalam radius meter x, ia boleh menjadi bias dengan mudah sekiranya terdapat agen penyebab pencemaran di sekitarnya stesen yang menunjukkan keseluruhan kawasan radius meter 'x' tercemar kerana stesen tunggal ini bertanggungjawab untuk menentukan data cuaca di seluruh kawasan.

Untuk mengatasi masalah ini, kepadatan modul mesti ditingkatkan yang mungkin hanya jika modul lebih murah dan mengambil jejak yang lebih kecil daripada yang ada.

Inilah sebab penyelesaian yang saya cadangkan adalah penyelesaian yang tepat untuk masalah ini, harganya kurang dari $ 10 dan juga mudah diletakkan di telapak tangan saya.

Bagaimana ia berfungsi…

Terdapat 3 bahagian utama projek ini.

Bahagian peranti:

Peranti adalah modul IoT yang ditunjukkan dalam gambar yang mengirimkan data cuaca ke pelayan setiap selang waktu 'x'. Data tersebut merangkumi data cuaca sebenar, lokasi geografi modul; koordinatnya, alamat MACnya; untuk mengenal pasti peranti secara unik, versi firmware yang sedang dijalankan. Bahagian peranti terdiri daripada modul N yang diedarkan di seluruh kawasan secara aktif menyumbang data ke pelayan.

Bahagian pelayan:

Seperti namanya, pelayan terpusat yang mengendalikan beberapa operasi seperti menerima data dari modul dan menyimpannya dalam pangkalan data, mengemas kini modul dengan firmware terbaru jika dijalankan pada versi yang lebih lama, mengirimkan data cuaca ke pelanggan atas permintaan.

Pelanggan / Pengguna:

Ini adalah pengguna akhir yang meminta data cuaca dari pelayan. Pelanggan menghantar lokasi semasa dan berdasarkan lokasinya, pelayan menghitung jarak antara klien dengan semua modul dan mengirimkan data cuaca modul terdekat kepada klien yang dianggap tepat.

Bekalan

  • NodeMCU (ESP8266-12E)
  • DHT11 (Sensor kelembapan dan suhu)
  • BMP180 (Sensor tekanan dan suhu)
  • MQ-135 (Sensor indeks kualiti udara)
  • Kabel USB (untuk memuat naik program)
  • Bekalan kuasa 5 volt
  • Kapasitor (Pilihan: diletakkan selari dengan talian kuasa)
  • Arduino IDE (Untuk men-debug dan memuat naik program)
  • Aplikasi POSTMAN (pilihan: untuk debug API)
  • Laman Web (untuk menghoskan pelayan PHP dan MySQL)

Langkah 1: Selesaikan Semua Komponen dan Muat Naik Program ke NodeMCU

Selesaikan Semua Komponen dan Muat Naik Program ke NodeMCU
Selesaikan Semua Komponen dan Muat Naik Program ke NodeMCU
Selesaikan Semua Komponen dan Muat Naik Program ke NodeMCU
Selesaikan Semua Komponen dan Muat Naik Program ke NodeMCU

Pateri semua komponen ke NodeMCU seperti yang ditunjukkan dalam rajah litar pada papan perf. Juga, pateri kapasitor selari dengan talian kuasa kerana daya melambung semasa menghantar dan menerima data secara aktif.

Setelah kerja pematerian selesai, muat naik kod yang disediakan dalam fail "code.c".

Nota: Jangan lupa ganti kelayakan dengan kelayakan anda sendiri. Letakkan juga fail bernama "html_file.h" di dalam folder sketsa arduino. Semua fail tajuk yang digunakan dalam projek ini boleh didapati di sini

Ciri kod:

Titik Akses: Oleh kerana sukar untuk memprogram setiap modul dengan bukti kelayakan dalam pengeluaran besar-besaran, modul ini menghoskan halaman web pada but pertama untuk menerima kelayakan WiFi yang perlu disambungkan dan disimpan di EEPROM untuk penggunaan kemudian.

Setelah kelayakan dikonfigurasikan, NodeMCU memeriksa kelayakan EEPROM dan menyambung ke kelayakan WiFi yang terdapat di EEPROM.

Setelah berjaya menyambung ke WiFi, NodeMCU mula memuat naik data ke pelayan setiap selang 'x', data termasuk data cuaca, alamat MAC modul, versi firmware, lokasi geografi peranti.

Kemas kini OTA: Modul ini juga memeriksa kemas kini firmware baru setiap hari pada waktu tertentu yang ditentukan dalam kod. Ciri ini berguna kerana mana-mana pengeluar tidak dapat meneruskan dan mengubah program modul individu sekiranya ada perubahan yang akan dibuat.

Pemantau Pengawas: Atlast mesti ada cara untuk memulihkan dirinya tanpa campur tangan manusia sekiranya tersekat atau terhempas. Ini dapat dicapai dengan menggunakan pemasa Watchdog. Cara kerjanya adalah: Terdapat sub-rutin Interrupt yang berlaku setiap saat. ISR menaikkan pembilang setiap kali menjalankan dan memeriksa sama ada pembilang telah mencapai jumlah maksimum. Setelah penghitung mencapai nilai maksimum, modul diset semula dengan anggapan ia telah rosak. Pada operasi normal, penghitung selalu diset semula sebelum mencapai jumlah maksimum.

Langkah 2: Mengkonfigurasi Pelayan SQL

Mengkonfigurasi Pelayan SQL
Mengkonfigurasi Pelayan SQL

Persediaan Pelayan SQL juga sangat mudah. Cukup buat pangkalan data di pelayan SQL dan Impor tetapan dengan mengimport fail bernama "database_structure.txt". Anda boleh mendapatkan fail dalam langkah ini. Oleh kerana arahan tidak membenarkan memuat naik fail ".sql", saya telah menamakan semula fail tersebut menjadi ".txt".

Catatan: Namakan semula fail dari ".txt" menjadi ".sql".

Langkah 3: Mengkonfigurasi Pelayan Fail

Mengkonfigurasi pelayan sangat mudah jika anda memiliki laman web dan dihoskan dalam talian. Saya tidak akan melalui keseluruhan prosedur membuat laman web dan menghosinya kerana ia berada di luar ruang lingkup tutorial ini. Tetapi anda boleh menghoskannya di komputer anda sendiri sebagai localhost untuk mencuba kerja-kerja fail.

Oleh kerana Instructable tidak membenarkan memuat naik fail PHP, saya telah menamakan semula fail menjadi ".txt".

Catatan: Sila ganti nama peluasan fail menjadi ".php". Juga jangan lupa menukar kelayakan fail "config.php".

Muat naik fail ke pelayan dan anda boleh pergi.

Saya akan memberikan maklumat ringkas mengenai fail PHP.

db_config.php:

Dalam fail ini, semua kelayakan yang diperlukan untuk menyambung ke pelayan SQL disimpan.

db_koneksi:

Dalam fail ini kelas yang diperlukan untuk sambungan pangkalan data ada.

masukkan.php:

NodeMCU memanggil fail PHP ini untuk memuat naik data ke pelayan menggunakan kaedah GET. Fail ini juga bertanggungjawab untuk menyimpan data yang sama ke pelayan SQL.

dapatkan semula.php:

Pengguna / Pelanggan memanggil PHP ini menggunakan kaedah GET. Pelayan mengira jarak antara pengguna dan semua modul. Kemudian data modul terdekat dihantar sebagai respons kepada klien dalam format JSON / XML seperti yang disukai oleh klien.

kemas kini.php:

Fail PHP ini dipanggil oleh modul setiap hari pada waktu tertentu untuk memeriksa sama ada modul tersebut menjalankan versi firmware terkini. Cukup letakkan fail ".bin" terbaru di pelayan fail dan tentukan direktori fail dalam pemboleh ubah fail.

Sekiranya pada awalnya banyak fail ini menakutkan, saya telah memasukkan dokumentasi pengguna pada langkah seterusnya.

Langkah 4: Dokumentasi Pengguna

Dokumentasi Pengguna
Dokumentasi Pengguna
Dokumentasi Pengguna
Dokumentasi Pengguna

Pengenalan:

API Cuaca menyediakan antara muka sederhana untuk meminta data cuaca untuk lokasi di permukaan bumi. Anda meminta maklumat cuaca untuk pasangan lintang / bujur tertentu dengan format output yang ditentukan. API mengembalikan suhu, kelembapan, tekanan, dan indeks kualiti Udara yang terakhir direkodkan oleh modul terdekat dari lokasi yang diminta.

Sebelum awak bermula:

Dokumen ini ditujukan untuk pembangun laman web dan mudah alih yang ingin memasukkan maklumat cuaca pada aplikasi yang sedang dibangunkan. Ini memperkenalkan penggunaan menggunakan API dan bahan rujukan pada parameter yang tersedia.

Permintaan Data Cuaca:

Permintaan API Cuaca dibina sebagai rentetan URL. API mengembalikan data cuaca untuk titik di bumi, yang ditentukan oleh pasangan garis lintang / garis bujur. Perhatikan bahawa ketepatan data cuaca berkadar langsung dengan kepadatan modul yang ditempatkan di suatu kawasan.

Permintaan Weather Weather mengambil bentuk berikut:

example.com/retrieve.php?lat=25.96446&lon=53.9443&format=json

Di mana format output (format) mungkin salah satu daripada nilai berikut:

  • JSON (disyorkan), menunjukkan output dalam Notasi Objek JavaScript (JSON); atau
  • XML, menunjukkan output dalam XML, dibungkus dalam nod.

Parameter Permintaan:

Seperti biasa di semua URL, parameter dipisahkan menggunakan watak ampersand (&). Senarai parameter dan nilainya mungkin ditunjukkan di bawah.

Parameter yang diperlukan:

  • lat: Mewakili garis lintang lokasi untuk mencari. (mis. lat = 19.56875)
  • lon: Mewakili garis bujur lokasi untuk mencari. (mis. lon = 72.97568)

Parameter Pilihan:

format: Menentukan format output tindak balas data cuaca. Ia boleh menjadi JSON atau XML. Lalai adalah JSON. (mis. format = json atau format = xml)

Tanggapan Cuaca:

Untuk setiap permintaan yang sah, perkhidmatan zon waktu akan mengembalikan respons dalam format yang ditunjukkan dalam URL permintaan. Setiap tindak balas akan mengandungi unsur-unsur berikut:

  • kejayaan: nilai yang menunjukkan status tindak balas.

    • 0: Negatif; menunjukkan bahawa permintaan itu salah.
    • 1: Peneguhan; menunjukkan bahawa permintaan itu berjaya.
  • mesej: rentetan yang menunjukkan sebab kecacatan permintaan. Hanya tersedia apabila statusnya negatif.
  • data: susunan dengan pelbagai parameter cuaca.

    • temp: data suhu.
    • hum: data kehadiran kelembapan.
    • pres: data tekanan mutlak.
    • aqi: indeks kualiti Udara sekarang.

Contoh tindak balas kedua-dua format dapat dilihat dalam gambar.

Langkah 5: Penyediaan Modul

Penyediaan Modul
Penyediaan Modul
Penyediaan Modul
Penyediaan Modul

Titik Akses dibuat dan laman web dihoskan pada alamat IP (Lalai: 192.168.4.1) untuk menerima tauliah dari pengurus / pengguna peranti pada but pertama atau jika modul tidak menemui bukti kelayakan yang telah disimpan di EEPROM.

Pengguna perlu memasukkan SSID dan kata laluan yang mana pengguna mahu modul disambungkan. Lintang dan garis bujur akan diisi secara automatik jika anda membenarkan penyemak imbas mengakses lokasi.

Setelah semua butiran dimasukkan, klik pada butang "HANTAR", dan kemudian semua kelayakan ditulis dalam EEPROM modul.

Langkah ini sangat penting kerana ketika menghasilkan modul secara besar-besaran, tidak dapat memprogram semua modul dengan data lokasi tepat dan bukti WiFi. Juga, tidak dianjurkan untuk memasukkan kode kelayakan dalam program ini kerana jika kita perlu memindahkan modul ke lokasi lain atau ingin mengubah kelayakan WiFi, kita perlu memprogram ulang modul. Untuk mengelakkan kerumitan ini, fungsi persediaan awal dilaksanakan.

Langkah 6: Sekarang Masanya untuk Menyumbang Data ke Awan

Kini Masanya untuk Menyumbang Data ke Awan
Kini Masanya untuk Menyumbang Data ke Awan
Kini Tiba masanya untuk Menyumbang Data ke Awan
Kini Tiba masanya untuk Menyumbang Data ke Awan

Setelah semua langkah sebelumnya selesai, sekarang waktunya untuk membiarkan modul memuat naik data ke pelayan. Secara automatik ia dimuat naik setelah anda menyimpan bukti kelayakan.

Ini memanggil "insert.php" sebagai panggilan API dengan melewati semua parameter untuk mengirim kaedah GET.

Coretan kod di bawah menunjukkan bagaimana parameter diproses.

if (isset ($ _ GET ['temp']) && isset ($ _ GET ['hum']) && isset ($ _ GET ['pres']) && isset ($ _ DAPATKAN ['aqi']) && isset ($ _ DAPATKAN ['mac']) && isset ($ _ GET ['lat']) && isset ($ _ DAPATKAN ['lon'])) 2. {3. // program utama 4.}

Seperti semua modul mula memuat naik data.

Catatan: Turunkan frekuensi muat naik dalam kod jika anda merasakan pelayan terlalu banyak memuatkannya.

Langkah 7: Kemas kini Over the Air (OTA)

Kemas kini Over the Air (OTA)
Kemas kini Over the Air (OTA)

Setelah modul siap dan mula memuat naik data, ia memeriksa kemas kini firmware setiap hari pada waktu tertentu yang disebutkan dalam program. Sekiranya terdapat, ia memuat turun dan memaparkan fail binari di dalamnya. Dan jika tidak, operasi normal memuat naik data akan diteruskan.

Untuk memeriksa kemas kini baru, modul memanggil "update.php" dengan menghantar alamat MAC di tajuk permintaannya. Pelayan kemudian memeriksa apakah alamat MAC khusus itu mempunyai kemas kini baru, jika ya, maka ia akan menghantar respons binari firmware terbaru.

Ia juga memeriksa semua tajuk yang diperlukan untuk pengesahan asas modul.

Langkah 8: Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…

Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…
Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…
Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…
Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…
Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…
Bagaimana Pengguna / Pelanggan Dapat Mengakses Data…

Cukup mudah untuk mengakses data dari pelayan. Hanya dengan memanggil "retrieve.php", kita akan mendapat data cuaca sebagai tindak balas dalam format JSON. Selepas itu, hanya perlu menguraikan data JSON untuk mengakses elemen masing-masing. Begitu juga dengan tindak balas XML. Pengguna sentiasa dapat menentukan format respons yang disukai di mana pengguna selesa bekerja. Sekiranya pengguna tidak menentukan format, format lalai adalah JSON.

Permintaan sampel dibuat menggunakan alat POSTMAN untuk memeriksa cara kerja API.

Contoh penghuraian respons JSON dalam javascript ditunjukkan dalam coretan kod di bawah.

var url = "https://example.com/retrieve.php?lat=19.044848&lon=72.8464373";fungsi httpGet (theUrl) {var xmlHttp = XMLHttpRequest baru (); xmlHttp.open ("DAPATKAN", theUrl, false); // false untuk permintaan segerak xmlHttp.send (null); pulangkan xmlHttp.responseText; } var myVar = httpGet (url); var obj = JSON.parse (myVar); document.getElementById ("aqi"). innerHTML = obj.data [0].aqi; document.getElementById ("suhu"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("temp"). innerHTML = Math.round (obj.data [0].temp) + "° C"; document.getElementById ("kelembapan"). innerHTML = Math.round (obj.data [0].hum) + "%"; document.getElementById ("tekanan"). innerHTML = Math.round (obj.data [0].pres) + "mb";

Kod sumber halaman HTML contoh yang menguraikan respons JSON tersedia pada akhir langkah ini.

Catatan: Tukar peluasan fail menjadi ".html".

Langkah 9: Batasan Projek Ini

  • Projek ini menggunakan GET untuk menghantar data; walaupun tidak berurusan dengan data sensitif, data dapat dimanipulasi dengan mudah kerana tidak memiliki mekanisme untuk memeriksa keaslian sumber selain memeriksa header, yang dapat diubahsuai dengan mudah dan bahkan perangkat biasa dapat ditipu kelihatan seperti modul cuaca.
  • Oleh kerana modul itu hanya bergantung dan bergantung pada titik akses lain (WIFI) untuk mengirim data yang dalam kebanyakan kes adalah organisasi lain. Sekiranya titik akses tidak berfungsi kerana sebab tertentu, modul tidak dapat menghantar data.
  • Walaupun projek ini dibina untuk meningkatkan ketepatan sistem yang ada, sensor yang ada di pasaran kurang tepat daripada yang diharapkan yang akhirnya menyebabkan kegagalan tujuan utamanya.
  • Semasa merancang projek, saya merancang untuk memasukkan mod di mana pelayan rata-rata nilai data berdasarkan lokasi untuk pembetulan ralat. Tetapi setelah melaksanakan ciri ini, saya menyedari bahawa ia memerlukan beberapa API pihak ketiga untuk menerjemahkan koordinat ke kawasan geografi.

Langkah 10: Penambahbaikan Lebih Lanjut yang Boleh Dibuat pada Projek ini

  • Ketepatan modul dapat ditingkatkan lebih jauh dengan menyesuaikan sensor khusus untuk tujuan tertentu dan bukannya menggunakan modul generik yang tersedia di pasaran.
  • Modul ini dapat diubahsuai untuk berfungsi dengan lebih bebas dengan menggunakan cip khas yang berkomunikasi tanpa wayar dengan Menara Sel untuk menghantar data sehingga meningkatkan toleransi kesalahan.
  • Panel solar dan sistem bateri dapat digunakan bersamaan dengan mode tidur nyenyak ESP sehingga meningkatkan kecekapan daya dan menjadikannya lebih bebas dari bekalan kuasa luaran.
  • POST dapat digunakan untuk mengirim data dengan beberapa mekanisme pengesahan seperti menggunakan kod siklik untuk setiap pengiriman data.
  • Daripada NodeMCU, yang merupakan papan prototaip, kami dapat menggunakan mikrokontroler khusus dalam pengeluaran besar-besaran yang tidak hanya dapat mengurangkan biaya tetapi juga memanfaatkan sumber sistem dengan sebaik-baiknya.
  • Bersama dengan API geolokasi Google dan menyambung ke WIFI terbuka yang tersedia, modul dapat berfungsi tanpa mengkonfigurasinya; siap untuk menghantar data keluar dari kilang tanpa memerlukan sebarang persediaan.

Langkah 11: Beberapa Kata untuk Penonton

Beberapa Kata untuk Penonton
Beberapa Kata untuk Penonton

Hai kawan-kawan, saya sedar bahawa ini bukan tutorial mesra pemula sama sekali kerana saya belum pernah menyebutkan setiap butiran yang perlu dibahas. Dan juga projek ini sangat luas untuk diliputi dalam Instructable. Namun, saya berusaha sedaya upaya untuk merangkumi setiap aspek penting dalam projek ini. Saya juga tahu bahawa video yang memperlihatkan kerja projek itu sangat hebat tetapi kerana ini adalah arahan pertama saya dan jujur, ini adalah penerbitan pertama saya mengenai perkara yang serupa dengan ini, saya agak gementar berada di hadapan kamera.

Sekiranya anda memerlukan bantuan untuk membuat projek ini atau yang serupa dengan ini, hubungi saya di [email protected] atau anda boleh memberikan komen seperti biasa. Saya akan berusaha menolong anda dengan sebaik mungkin.

Terima kasih!!

Disyorkan: