Daftar Isi:

Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU: 11 Langkah
Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU: 11 Langkah

Video: Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU: 11 Langkah

Video: Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU: 11 Langkah
Video: MONITORING CUACA DENGAN SENSOR BMP280 & DHT11 BERBASIS NODEMCU ESP8266 #projectiot #projectarduino 2024, November
Anonim
Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU
Sistem Pemantauan Cuaca IoT Terdistribusi Cerdas Menggunakan NodeMCU

Anda semua mungkin mengetahui stasiun cuaca tradisional; tetapi apakah Anda pernah bertanya-tanya bagaimana cara kerjanya? Karena stasiun cuaca tradisional mahal dan besar, kepadatan stasiun ini per satuan luas sangat kurang yang berkontribusi pada ketidakakuratan data. Saya akan menjelaskan caranya: Misalkan sebuah stasiun terletak di tengah kota dan itu adalah satu-satunya stasiun yang terletak dalam radius 'x' meter, itu dapat dengan mudah menjadi bias jika ada agen penyebab polusi di sekitarnya dari stasiun yang menunjukkan seluruh area radius 'x' meter sebagai tercemar karena stasiun tunggal tersebut bertanggung jawab untuk menentukan data cuaca seluruh area.

Untuk mengatasi masalah ini, kepadatan modul harus ditingkatkan yang hanya dimungkinkan jika modul lebih murah dan membutuhkan footprint yang lebih kecil daripada yang sudah ada.

Inilah alasan solusi yang saya usulkan adalah solusi sempurna untuk masalah ini, Biayanya kurang dari $ 10 dan juga mudah diletakkan di telapak tangan saya.

Bagaimana itu bekerja…

Ada 3 bagian utama dari proyek ini.

Sisi perangkat:

Perangkat adalah modul IoT yang ditunjukkan pada gambar yang mengirimkan data cuaca ke server setiap interval waktu 'x'. Data tersebut mencakup data cuaca aktual, lokasi geografis modul; yaitu Koordinatnya, alamat MAC-nya; untuk mengidentifikasi perangkat secara unik, versi firmware yang sedang dijalankannya. Sisi perangkat terdiri dari modul-N yang didistribusikan di seluruh area yang secara aktif menyumbangkan data ke server.

Sisi server:

Seperti namanya, ini adalah server terpusat yang menangani beberapa operasi seperti menerima data dari modul dan menyimpannya di database, memperbarui modul dengan firmware terbaru jika dijalankan pada versi yang lebih lama, mengirim data cuaca ke klien berdasarkan permintaan.

Sisi Klien/Pengguna:

Ini adalah pengguna akhir yang meminta data cuaca dari server. Klien mengirimkan lokasi saat ini dan berdasarkan lokasi, server menghitung jarak antara klien dan semua modul dan mengirimkan data cuaca dari modul terdekat ke klien yang dianggap akurat.

Perlengkapan

  • NodeMCU (ESP8266-12E)
  • DHT11 (Sensor kelembaban dan suhu)
  • BMP180 (Sensor Tekanan dan Suhu)
  • MQ-135 (Sensor indeks kualitas udara)
  • Kabel USB (untuk mengunggah program)
  • catu daya 5 volt
  • Kapasitor (Opsional: ditempatkan sejajar dengan saluran listrik)
  • Arduino IDE (Untuk men-debug dan mengunggah program)
  • Aplikasi POSTMAN (opsional: untuk men-debug API)
  • Situs Web (untuk meng-host server PHP dan MySQL)

Langkah 1: Solder Semua Komponen dan Unggah Program ke NodeMCU

Solder Semua Komponen dan Unggah Program ke NodeMCU
Solder Semua Komponen dan Unggah Program ke NodeMCU
Solder Semua Komponen dan Unggah Program ke NodeMCU
Solder Semua Komponen dan Unggah Program ke NodeMCU

Solder semua komponen ke NodeMCU seperti yang ditunjukkan pada diagram sirkuit di papan perf. Juga, solder kapasitor secara paralel ke saluran listrik karena daya melonjak selama transmisi dan penerimaan data secara aktif.

Setelah pekerjaan menyolder selesai, unggah kode yang disediakan dalam file "code.c".

Catatan: Jangan lupa untuk mengganti kredensial dengan kredensial Anda sendiri. Tempatkan juga file bernama "html_file.h" di dalam folder sketsa arduino. Semua file header yang digunakan dalam proyek ini dapat ditemukan di sini

Fitur kode:

Titik Akses: Karena sulit untuk memprogram setiap modul dengan kredensial dalam produksi massal, modul tersebut meng-host halaman web pada boot pertama untuk menerima kredensial WiFi yang harus dihubungkan dan disimpan modul di EEPROM untuk digunakan nanti.

Setelah kredensial dikonfigurasi, NodeMCU memeriksa EEPROM untuk kredensial dan menghubungkan ke kredensial WiFi yang ada di EEPROM.

Setelah berhasil terhubung ke WiFi, NodeMCU mulai mengunggah data ke server setiap interval waktu 'x', data tersebut mencakup data cuaca, alamat MAC modul, versi firmware, lokasi geografis perangkat.

Pembaruan OTA: Modul ini juga memeriksa pembaruan firmware baru setiap hari pada waktu tertentu yang ditentukan dalam kode. Fitur ini berguna karena tidak mungkin bagi pabrikan mana pun untuk melanjutkan dan mengubah program masing-masing modul jika ada perubahan yang harus dilakukan.

Watchdog Timer: Setidaknya harus ada cara untuk memulihkan dirinya sendiri tanpa campur tangan manusia jika macet atau macet. Ini dapat dicapai dengan menggunakan pengatur waktu Watchdog. Cara kerjanya adalah: Ada sub-rutin Interrupt yang berjalan setiap detik. ISR menambah penghitung setiap kali dijalankan dan memeriksa apakah penghitung telah mencapai jumlah maksimum. Setelah penghitung mencapai nilai maksimum, modul me-reset sendiri dengan asumsi itu telah jatuh. Pada operasi normal, penghitung selalu direset sebelum mencapai hitungan maksimum.

Langkah 2: Konfigurasi SQL Server

Mengkonfigurasi SQL Server
Mengkonfigurasi SQL Server

Pengaturan SQL Server juga sangat sederhana. Cukup buat database di SQL server dan Impor pengaturan dengan mengimpor file bernama "database_structure.txt". Anda dapat menemukan file di langkah ini. Karena instruksi tidak mengizinkan untuk mengunggah file ".sql", saya telah mengganti nama file menjadi ".txt".

Catatan: Ganti nama file dari ".txt" menjadi ".sql".

Langkah 3: Mengkonfigurasi Server File

Mengkonfigurasi server sangat mudah jika Anda memiliki situs web dan dihosting secara online. Saya tidak akan membahas seluruh prosedur menyiapkan situs web dan menghostingnya karena itu di luar cakupan tutorial ini. Tetapi Anda dapat meng-host-nya di komputer Anda sendiri sebagai localhost untuk mencoba kerja file.

Karena Instructable tidak mengizinkan untuk mengunggah file PHP, saya telah mengganti nama file menjadi ".txt".

Catatan: Harap ganti nama ekstensi file menjadi ".php". Juga jangan lupa untuk mengubah kredensial file "config.php".

Cukup unggah file ke server dan Anda siap melakukannya.

Saya akan memberikan informasi singkat tentang file PHP.

db_config.php:

Dalam file ini, semua kredensial yang diperlukan untuk terhubung ke server SQL disimpan.

db_koneksi:

Dalam file ini kelas yang dibutuhkan untuk koneksi database hadir.

sisipkan.php:

NodeMCU memanggil file PHP ini untuk mengunggah data ke server menggunakan metode GET. File ini juga bertanggung jawab untuk menyimpan data yang sama ke server SQL.

ambil.php:

Pengguna/Klien memanggil PHP ini menggunakan metode GET. Server menghitung jarak antara pengguna dan semua modul. Kemudian data dari modul terdekat dikirim sebagai respon ke klien dalam format JSON/XML sesuai keinginan klien.

update.php:

File PHP ini dipanggil oleh modul setiap hari pada waktu tertentu untuk memeriksa apakah modul menjalankan firmware versi terbaru. Cukup tempatkan file ".bin" terbaru di server file dan tentukan direktori file dalam variabel file.

Jika banyak file ini tampak menakutkan pada awalnya, saya telah menyertakan dokumentasi pengguna di langkah berikutnya.

Langkah 4: Dokumentasi Pengguna

Dokumentasi Pengguna
Dokumentasi Pengguna
Dokumentasi Pengguna
Dokumentasi Pengguna

Pengantar:

Weather API menyediakan antarmuka sederhana untuk meminta data cuaca untuk lokasi di permukaan bumi. Anda meminta informasi cuaca untuk pasangan garis lintang/garis bujur tertentu dengan format output yang ditentukan. API mengembalikan suhu, kelembaban, tekanan, dan indeks kualitas udara yang terakhir direkam oleh modul terdekat dari lokasi yang diminta.

Sebelum kamu memulai:

Dokumen ini ditujukan bagi para pengembang website dan mobile yang ingin memasukkan informasi cuaca pada aplikasi yang sedang dikembangkan. Ini memperkenalkan penggunaan menggunakan API dan materi referensi pada parameter yang tersedia.

Permintaan Data Cuaca:

Permintaan Weather API dibuat sebagai string URL. API mengembalikan data cuaca untuk suatu titik di bumi, yang ditentukan oleh pasangan garis lintang/garis bujur. Perhatikan bahwa akurasi data cuaca berbanding lurus dengan kepadatan modul yang ditempatkan di suatu area.

Permintaan Weather API mengambil bentuk berikut:

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

Di mana format keluaran (format) dapat berupa salah satu dari nilai berikut:

  • JSON (disarankan), menunjukkan output dalam JavaScript Object Notation (JSON); atau
  • XML, menunjukkan keluaran dalam XML, dibungkus di dalam simpul.

Parameter Permintaan:

Seperti standar di semua URL, parameter dipisahkan menggunakan karakter ampersand (&). Daftar parameter dan kemungkinan nilainya ditunjukkan di bawah ini.

Parameter yang Diperlukan:

  • lat: Mewakili garis lintang lokasi yang akan dicari. (mis. lat=19.56875)
  • lon: Mewakili garis bujur dari lokasi yang akan dicari. (misalnya lon=72.97568)

Parameter Opsional:

format: Menentukan format output respons dari data cuaca. Itu bisa berupa JSON atau XML. Standarnya adalah JSON. (misalnya format=json atau format=xml)

Tanggapan Cuaca:

Untuk setiap permintaan yang valid, layanan zona waktu akan mengembalikan respons dalam format yang ditunjukkan dalam URL permintaan. Setiap respons akan berisi elemen-elemen berikut:

  • sukses: nilai yang menunjukkan status respons.

    • 0: Negatif; menunjukkan bahwa permintaan itu salah format.
    • 1: Afirmatif; menunjukkan bahwa permintaan berhasil.
  • pesan: string yang menunjukkan alasan ketidaksesuaian permintaan. Hanya tersedia jika statusnya negatif.
  • data: larik dengan beberapa parameter cuaca.

    • suhu: data suhu.
    • hum: data kehadiran kelembaban.
    • pres: data tekanan absolut.
    • aqi: indeks kualitas udara saat ini.

Contoh respon dari kedua format tersebut dapat dilihat pada gambar.

Langkah 5: Pengaturan Modul

Pengaturan Modul
Pengaturan Modul
Pengaturan Modul
Pengaturan Modul

Titik Akses dibuat dan halaman web di-host pada alamat IP (Default: 192.168.4.1) untuk menerima kredensial dari manajer perangkat/pengguna pada boot pertama atau jika modul tidak menemukan kredensial yang sudah disimpan di EEPROM.

Pengguna harus memasukkan SSID dan kata sandi yang pengguna ingin modul terhubung. Lintang dan bujur terisi secara otomatis jika Anda mengizinkan browser mengakses lokasi.

Setelah semua detail dimasukkan, klik tombol "KIRIM", dan kemudian semua kredensial ditulis dalam EEPROM modul.

Langkah ini sangat penting karena saat memproduksi modul secara massal, tidak mungkin untuk memprogram semua modul dengan data lokasi dan kredensial WiFi yang tepat. Selain itu, tidak disarankan untuk membuat hard-code kredensial dalam program karena jika memang kita perlu memindahkan modul ke lokasi lain atau ingin mengubah kredensial WiFi, kita perlu memprogram ulang modul. Untuk menghindari kerumitan ini, fungsi pengaturan awal diimplementasikan.

Langkah 6: Sekarang Saatnya Berkontribusi Data ke Cloud

Sekarang Saatnya Berkontribusi Data ke Cloud
Sekarang Saatnya Berkontribusi Data ke Cloud
Sekarang Saatnya Berkontribusi Data ke Cloud
Sekarang Saatnya Berkontribusi Data ke Cloud

Setelah semua langkah sebelumnya selesai, sekarang saatnya membiarkan modul mengunggah data ke server. Secara otomatis mulai mengunggah setelah Anda menyimpan kredensial.

Ini memanggil "insert.php" sebagai panggilan API dengan meneruskan semua parameter untuk dikirim dalam metode GET.

Cuplikan kode di bawah ini menunjukkan bagaimana parameter diproses.

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

Seperti itu, semua modul mulai mengunggah data.

Catatan: Turunkan frekuensi unggah dalam kode jika Anda merasa server kelebihan beban.

Langkah 7: Pembaruan Melalui Udara (OTA)

Pembaruan Melalui Udara (OTA)
Pembaruan Melalui Udara (OTA)

Setelah modul siap dan mulai mengunggah data, modul akan memeriksa pembaruan firmware setiap hari pada waktu tertentu yang disebutkan dalam program. Jika ditemukan, ia mengunduh dan mem-flash file biner di dalamnya. Dan jika tidak, operasi normal pengunggahan data dilanjutkan.

Untuk memeriksa pembaruan baru, modul memanggil "update.php" dengan mengirimkan alamat MAC di header permintaannya. Server kemudian memeriksa apakah alamat MAC tertentu memiliki pembaruan baru, jika ya, maka ia akan mengirimkan file biner dari firmware terbaru sebagai tanggapan.

Itu juga memeriksa semua header yang diperlukan untuk otentikasi dasar modul.

Langkah 8: Bagaimana Pengguna/Klien Dapat Mengakses Data…

Bagaimana Pengguna/Klien Dapat Mengakses Data…
Bagaimana Pengguna/Klien Dapat Mengakses Data…
Bagaimana Pengguna/Klien Dapat Mengakses Data…
Bagaimana Pengguna/Klien Dapat Mengakses Data…
Bagaimana Pengguna/Klien Dapat Mengakses Data…
Bagaimana Pengguna/Klien Dapat Mengakses Data…

Cukup mudah untuk mengakses data dari server. Hanya dengan memanggil "retrieve.php", kita akan mendapatkan data cuaca di respon dalam format JSON. Setelah itu, tinggal mem-parsing data JSON untuk mengakses elemen individual. Serupa dengan respon XML. Pengguna selalu dapat menentukan format respons yang disukai di mana pengguna merasa nyaman untuk bekerja dengannya. Jika pengguna tidak menentukan formatnya, format defaultnya adalah JSON.

Permintaan sampel dibuat menggunakan alat POSTMAN untuk memeriksa kerja API.

Contoh parsing respons JSON dalam javascript ditunjukkan pada cuplikan kode di bawah ini.

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

Kode sumber halaman HTML contoh yang mem-parsing respons JSON tersedia di akhir langkah ini.

Catatan: Ubah ekstensi file menjadi ".html".

Langkah 9: Keterbatasan Proyek Ini

  • Proyek menggunakan GET untuk mengirim data; meskipun tidak berurusan dengan data sensitif, data dapat dengan mudah dimanipulasi karena tidak memiliki mekanisme untuk memeriksa keaslian sumber selain memeriksa header, yang dapat dengan mudah dimodifikasi dan bahkan perangkat normal dapat dipalsukan tampak seperti modul cuaca.
  • Karena modul hanya bergantung dan bergantung pada titik akses lain (WIFI) untuk mengirim data yang biasanya berasal dari organisasi lain. Jika titik akses tidak berfungsi karena alasan tertentu, modul tidak akan dapat mengirim data.
  • Meskipun proyek ini dibangun untuk meningkatkan akurasi dari sistem yang ada, sensor yang tersedia di pasaran kurang akurat dari yang diharapkan yang mengakibatkan gagalnya tujuan utamanya.
  • Saat merencanakan proyek, saya berencana untuk menyertakan mode di mana server rata-rata nilai data berdasarkan lokasi untuk koreksi kesalahan. Namun setelah menerapkan fitur ini, saya menyadari bahwa diperlukan beberapa API pihak ketiga untuk menerjemahkan koordinat ke wilayah geografis.

Langkah 10: Perbaikan Lebih Lanjut Yang Dapat Dilakukan pada Proyek Ini

  • Keakuratan modul dapat lebih ditingkatkan dengan menyesuaikan sensor secara khusus untuk tujuan tertentu daripada menggunakan modul generik yang tersedia di pasar.
  • Modul dapat dimodifikasi untuk bekerja lebih mandiri dengan menggunakan chip khusus yang berkomunikasi secara nirkabel dengan menara seluler untuk mengirim data sehingga meningkatkan toleransi kesalahan.
  • Panel surya dan sistem baterai dapat digunakan bersama dengan mode deep-sleep ESP sehingga meningkatkan efisiensi daya dan membuatnya lebih independen dari catu daya eksternal.
  • POST dapat digunakan untuk mengirim data dengan beberapa mekanisme otentikasi seperti menggunakan kode siklik untuk setiap transmisi data.
  • Alih-alih NodeMCU, yang merupakan papan prototipe, kita dapat menggunakan mikrokontroler khusus dalam produksi massal yang tidak hanya mengurangi biaya tetapi juga memanfaatkan sumber daya sistem dengan sebaik-baiknya.
  • Dalam hubungannya dengan API geolokasi Google dan menghubungkan ke WIFI terbuka yang tersedia, modul dapat bekerja bahkan tanpa mengonfigurasinya; siap mengirimkan data ke luar pabrik tanpa memerlukan pengaturan apa pun.

Langkah 11: Beberapa Kata untuk Audiens

Beberapa Kata untuk Audiens
Beberapa Kata untuk Audiens

Hai teman-teman, saya menyadari bahwa ini sama sekali bukan tutorial yang ramah bagi pemula karena saya tidak menyebutkan setiap detail yang perlu dibahas. Dan juga proyek ini sangat luas untuk dibahas dalam Instructable. Namun, saya mencoba yang terbaik untuk mencakup setiap aspek penting dari proyek ini. Saya juga tahu bahwa video yang menampilkan cara kerja proyek akan sangat bagus, tetapi karena ini adalah instruksi pertama saya dan sejujurnya, ini adalah publikasi pertama saya tentang sesuatu yang mirip dengan ini, saya cukup gugup untuk berada di depan a kamera.

Jika kalian memerlukan bantuan dalam membuat proyek ini atau yang serupa dengan ini, hubungi saya di [email protected] atau Anda dapat memberikan komentar seperti biasa. Saya akan mencoba membantu kalian dengan kemampuan terbaik saya.

Terima kasih!!

Direkomendasikan: