coseru.id - Coding asik & Seru

🔍 Cari Materi & Kelas

IoT Tingkat: Menengah 6 x dilihat

Stasiun Cuaca Rumah Berbasis NodeMCU ESP8266 dan BME280 dengan WebSocket

Stasiun Cuaca Rumah Berbasis NodeMCU ESP8266 dan BME280 dengan WebSocket

Ringkasan Proyek

Proyek ini membuat stasiun cuaca rumah berbasis NodeMCU ESP8266 dan sensor BME280 yang dapat mengukur suhu, kelembapan udara, titik embun (dew point), serta tekanan atmosfer. Data sensor ditampilkan secara real-time pada halaman web menggunakan WebSocket, sehingga pengguna dapat memantau kondisi cuaca melalui komputer, tablet, maupun smartphone. Sistem juga mengirimkan data ke ThingSpeak untuk penyimpanan riwayat, menyediakan widget prakiraan cuaca, serta mendukung pembaruan firmware melalui Arduino OTA dan HTTP Update Server.

Bahan & Komponen

Daftar perangkat keras, modul, dan tools yang dibutuhkan untuk merakit proyek ini.

Daftar Komponen & Perangkat Keras

  • 1x NodeMCU ESP8266 Breakout Board V1.0 (ESP-12E) (Mikrokontroler utama sekaligus modul Wi-Fi untuk membaca sensor dan menjalankan web server serta WebSocket server)
  • 1x SparkFun Atmospheric Sensor Breakout - BME280 (Sensor lingkungan untuk mengukur temperatur, kelembapan relatif, dan tekanan atmosfer, serta menghitung dew point)
  • 1x Breadboard (Papan perakitan elektronik untuk menghubungkan NodeMCU dan BME280)
  • 1 set Jumper Wires (Kabel penghubung jalur VCC, GND, SDA, dan SCL)
  • 1x Kabel Micro USB (Menghubungkan NodeMCU ke komputer untuk pemrograman serta menyediakan catu daya)
  • 1x Tablet Android atau smartphone (Perangkat untuk menampilkan halaman web stasiun cuaca)
  • 1x Router Wi-Fi (Menghubungkan NodeMCU dengan jaringan lokal dan perangkat pengguna)
  • 1x Sumber daya USB 5V (Catu daya untuk NodeMCU ketika digunakan secara mandiri)

Software dan Layanan Online

  • Arduino IDE 1.6.12 (Versi lingkungan pemrograman yang disebutkan penulis ketika mengompilasi proyek)
  • ESP8266 Arduino Core (Dukungan board dan library untuk memprogram NodeMCU ESP8266)
  • Library BME280I2C (Membaca temperatur, kelembapan, tekanan, dan dew point dari sensor BME280 melalui I2C)
  • Library ESP8266WiFi (Menghubungkan NodeMCU dengan jaringan Wi-Fi)
  • Library ESP8266WebServer (Membuat HTTP web server pada NodeMCU)
  • Library WebSocketsServer (Menjalankan komunikasi WebSocket antara NodeMCU dan browser)
  • Library ESP8266HTTPUpdateServer (Menyediakan halaman pembaruan firmware melalui HTTP)
  • Library ArduinoOTA (Memperbarui firmware NodeMCU melalui jaringan Wi-Fi tanpa kabel USB)
  • Library ESP8266mDNS (Menyediakan layanan penamaan perangkat melalui mDNS)
  • Library WiFiClient (Membuat koneksi TCP/IP ke ThingSpeak)
  • Library FS dan SPIFFS (Mengakses sistem file pada memori flash ESP8266)
  • ThingSpeak (Platform IoT untuk menyimpan data sensor dan menampilkan grafik riwayat)
  • JavaScript dan HTML (Membangun dashboard web yang menerima data secara real-time melalui WebSocket)
  • WeatherForYou (Sumber widget prakiraan cuaca eksternal yang ditampilkan pada dashboard)
  • MIT App Inventor 2 (Membuat aplikasi Android sederhana dengan komponen WebView untuk membuka dashboard)
  • Browser Web (Menampilkan halaman stasiun cuaca pada komputer, tablet, atau smartphone)

Langkah Pembuatan

Khusus Member

Panduan perakitan tahap demi tahap dan catatan proses pengerjaan.

Proyek NodeMCU Home Weather Station with WebSocket dibuat oleh Scott Wilson dan dipublikasikan pada 26 Maret 2017. Sistem menggunakan NodeMCU ESP8266 V1.0 dengan sensor BME280 untuk mengukur kondisi lingkungan di dalam maupun sekitar rumah. Data sensor dikirimkan secara berkala ke dashboard web menggunakan WebSocket sehingga nilai dapat diperbarui tanpa harus memuat ulang seluruh halaman.

Dashboard dirancang dengan tampilan sederhana berlatar belakang hitam dan teks berwarna putih. Pengguna dapat melihat temperatur, kelembapan, dew point, tekanan atmosfer, uptime perangkat, dan widget prakiraan cuaca. Ketika salah satu judul parameter diklik, browser membuka halaman riwayat pembacaan ThingSpeak.

NodeMCU Home Weather Station dengan sensor BME280 dan dashboard cuaca
Gambaran proyek stasiun cuaca rumah menggunakan NodeMCU ESP8266 dan BME280.

Langkah 1: Memahami Arsitektur Sistem

NodeMCU ESP8266 bertugas membaca sensor BME280 dan mengirimkan data ke dua tujuan utama. Tujuan pertama adalah dashboard web lokal yang dilayani oleh HTTP server dan diperbarui menggunakan WebSocket. Tujuan kedua adalah ThingSpeak yang digunakan untuk menyimpan data historis.

WebSocket memungkinkan server mengirimkan data baru kepada browser melalui koneksi yang tetap terbuka. Dengan demikian, nilai temperatur, kelembapan, dew point, tekanan, serta uptime dapat diperbarui secara berkala tanpa melakukan refresh seluruh halaman.

Sistem menggunakan tiga port utama. HTTP server utama berjalan pada port 8888, WebSocket server menggunakan port 8889, dan HTTP Update Server berjalan pada port 8890. Browser mengakses halaman dashboard melalui alamat IP NodeMCU dan port 8888.

Langkah 2: Menyiapkan Komponen

Siapkan satu NodeMCU ESP8266 V1.0 berbasis ESP-12E dan satu modul sensor SparkFun BME280. Siapkan breadboard, jumper wires, kabel USB, serta jaringan Wi-Fi yang dapat digunakan oleh NodeMCU dan perangkat yang akan membuka dashboard.

Pastikan breakout BME280 yang digunakan sesuai dengan konfigurasi I2C pada tutorial. Penulis secara khusus menyebut bahwa sambungan sensornya menggunakan VIN ke 3V, GND ke GND, SCL ke D1, dan SDA ke D2. Penulis juga mengingatkan bahwa breakout yang digunakan bukan modul Adafruit BME280.

Langkah 3: Menghubungkan Sensor BME280 ke NodeMCU

Sensor BME280 menggunakan komunikasi I2C untuk mengirimkan informasi temperatur, kelembapan, dan tekanan atmosfer kepada NodeMCU.

Hubungkan VIN sensor ke pin 3V NodeMCU. Hubungkan GND ke GND, SCL ke D1, dan SDA ke D2. Pada NodeMCU ESP-12E, pin D1 umumnya merupakan GPIO5 sebagai SCL dan D2 merupakan GPIO4 sebagai SDA.

Pastikan posisi kabel tidak tertukar. SDA adalah jalur data I2C, sedangkan SCL merupakan jalur clock. Setelah rangkaian selesai, periksa kembali seluruh sambungan sebelum menyalakan perangkat.

Diagram wiring BME280 dengan NodeMCU ESP8266
Diagram pengkabelan sensor BME280 ke NodeMCU ESP8266 menggunakan komunikasi I2C.

Langkah 4: Menyiapkan Arduino IDE dan Library

Buka Arduino IDE dan pastikan dukungan board ESP8266 telah terpasang. Pilih board NodeMCU 1.0 (ESP-12E Module) sesuai dengan perangkat yang digunakan.

Pasang library yang diperlukan melalui Library Manager atau repositori pengembangnya. Library utama yang digunakan adalah BME280I2C, WebSocketsServer, ESP8266WiFi, ESP8266WebServer, ESP8266HTTPUpdateServer, ArduinoOTA, ESP8266mDNS, WiFiClient, dan FS.

Library BME280I2C menangani komunikasi dengan sensor, sedangkan library WebSocketsServer menangani pengiriman data real-time kepada browser. Library ESP8266WebServer digunakan untuk menyediakan halaman dashboard, dan ArduinoOTA menyediakan pembaruan firmware melalui Wi-Fi.

Langkah 5: Mengatur Kredensial Wi-Fi dan ThingSpeak

Sebelum mengunggah program, cari bagian konstanta pada sketch. Ganti nilai SSID dengan nama jaringan Wi-Fi dan password dengan kata sandi jaringan yang digunakan.

Selanjutnya, masukkan Write API Key milik channel ThingSpeak pada variabel APIKey. API Key digunakan untuk mengizinkan NodeMCU mengirimkan data sensor ke channel tersebut.

Buat sebuah channel ThingSpeak dengan empat field berikut: Field 1 untuk temperatur, Field 2 untuk kelembapan udara, Field 3 untuk dew point, dan Field 4 untuk tekanan atmosfer. Catat Channel ID dan sesuaikan nilai YOUR_CHANNEL pada URL grafik yang terdapat dalam fungsi http_history().

Langkah 6: Mengunggah Program ke NodeMCU

Setelah pengaturan selesai, hubungkan NodeMCU ke komputer melalui kabel USB. Pilih board dan port yang sesuai pada Arduino IDE. Kompilasi sketch lalu unggah program ke NodeMCU.

Program akan mencoba menghubungkan perangkat ke jaringan Wi-Fi. Pada proses awal, Serial Monitor digunakan untuk menampilkan status koneksi, nama jaringan, alamat IP lokal, dan alamat MAC NodeMCU. Gunakan Baud Rate 115200 untuk membaca pesan debug yang dihasilkan program.

Jika koneksi berhasil, Serial Monitor akan menampilkan alamat IP yang dapat digunakan untuk mengakses halaman web perangkat. Pastikan komputer atau tablet yang digunakan terhubung ke jaringan yang sama dengan NodeMCU.

Langkah 7: Menjalankan HTTP Web Server

Program membuat objek ESP8266WebServer dengan port 8888. Ketika browser membuka alamat IP NodeMCU pada port tersebut, fungsi http_root() akan dipanggil untuk menyusun dan menampilkan dashboard Home Weather Station.

Halaman dashboard dibuat dari beberapa bagian HTML yang disimpan di memori program menggunakan PROGMEM. Bagian tersebut meliputi HEAD_BEGIN, WEBSOCKET_SCRIPT, STYLE, TITLE, dan HEAD_END.

Dashboard menampilkan lima informasi utama, yaitu uptime, temperatur, kelembapan, dew point, dan tekanan. Tersedia pula widget prakiraan cuaca eksternal dari WeatherForYou. Tampilan dashboard dapat disesuaikan melalui bagian HTTP START dan WEBPAGE HTTP ROOT pada source code.

Langkah 8: Membuat Komunikasi WebSocket

Objek WebSocketsServer dibuat menggunakan port 8889. Browser menghubungkan dirinya melalui alamat ws:// dengan hostname yang sama seperti dashboard, kemudian membuka koneksi ke port 8889.

Setelah tersambung, browser menerima pesan dari NodeMCU. Setiap pesan memiliki awalan berupa angka dan tanda titik dua yang berfungsi sebagai penanda jenis data.

  • 1: Data uptime NodeMCU.
  • 2: Temperatur.
  • 3: Kelembapan udara.
  • 4: Dew point.
  • 5: Tekanan atmosfer.

JavaScript menggunakan connection.onmessage untuk menerima pesan tersebut. Berdasarkan dua karakter pertama, script memperbarui elemen HTML yang memiliki ID ActUptime, ActTemp, ActHum, ActDew, atau ActPres.

NodeMCU mengirimkan pembaruan setiap satu detik. Dengan mekanisme ini, pengguna dapat memantau kondisi cuaca tanpa melakukan refresh manual.

Langkah 9: Membaca Data Sensor BME280

Fungsi bmeSample() bertanggung jawab mengambil data sensor. Program memeriksa waktu menggunakan millis() dan melakukan pembacaan ketika bme_poll telah mencapai waktu yang ditentukan.

Variabel temp, hum, dan pres digunakan untuk menyimpan temperatur, kelembapan, serta tekanan atmosfer. Fungsi bme.dew(metric) digunakan untuk menghitung dew point atau titik embun. Selanjutnya, fungsi bme.read() membaca nilai tekanan, temperatur, dan kelembapan secara bersamaan.

Hasil pembacaan disimpan sebagai String pada variabel temp_str, humid_str, pres_str, dan dew_str. Data yang sama juga ditampilkan pada Serial Monitor untuk memudahkan proses pengujian.

Konfigurasi metric bernilai false pada sketch sumber, sehingga pengaturan pembacaan menggunakan satuan nonmetrik. Temperatur dan dew point ditampilkan dalam derajat Fahrenheit, sedangkan tekanan menggunakan satuan inch of mercury (inHg).

Langkah 10: Mengirim Data ke ThingSpeak

ThingSpeak digunakan untuk merekam nilai sensor sehingga pengguna dapat melihat perubahan kondisi cuaca dari waktu ke waktu. Program menghubungkan NodeMCU ke api.thingspeak.com melalui objek WiFiClient.

Fungsi updateThingSpeak() membuat permintaan HTTP POST ke endpoint /update. Data dikirim menggunakan Write API Key melalui header X-THINGSPEAKAPIKEY.

Keempat data sensor dikirim sebagai field1, field2, field3, dan field4. Pengiriman dilakukan setiap 60 detik berdasarkan konstanta updateThingSpeakInterval.

Pengguna dapat melihat grafik historis melalui halaman history.html yang menampilkan empat grafik ThingSpeak menggunakan elemen iframe.

Langkah 11: Menjalankan HTTP Update Server

Proyek menyediakan fasilitas pembaruan firmware melalui browser dengan menggunakan ESP8266HTTPUpdateServer. Server update dijalankan pada port 8890 dengan endpoint /update.

Program menampilkan alamat akses http://IP_NODEMCU:8890/update pada Serial Monitor. Pengguna dapat membuka alamat tersebut melalui browser dan mengunggah file firmware hasil kompilasi dengan format BIN.

Konfigurasi pada source code menggunakan username admin dan password default password. Untuk penggunaan nyata, ubah kredensial tersebut dengan kombinasi yang kuat. Jangan membuka akses HTTP Update Server ke jaringan publik tanpa perlindungan yang memadai.

Langkah 12: Mengaktifkan Arduino OTA

Selain HTTP Update Server, program juga mengaktifkan ArduinoOTA. Fitur ini memungkinkan firmware diunggah melalui jaringan Wi-Fi tanpa harus menghubungkan kabel USB secara langsung.

Program memasang callback ArduinoOTA.onStart(), ArduinoOTA.onEnd(), ArduinoOTA.onProgress(), dan ArduinoOTA.onError() untuk menampilkan status pembaruan pada Serial Monitor.

Hostname dan password OTA dapat diatur sesuai kebutuhan. Source code menyediakan contoh pengaturan hostname dan password yang masih dikomentari.

Langkah 13: Menampilkan Halaman Web dari Smartphone atau Tablet

Setelah NodeMCU berhasil terhubung dengan Wi-Fi dan seluruh server aktif, buka browser pada perangkat yang terhubung ke jaringan yang sama. Masukkan IP NodeMCU dengan port 8888, contohnya http://192.168.1.100:8888. Alamat IP tersebut hanya contoh dan harus diganti dengan IP yang ditampilkan Serial Monitor.

Dashboard akan menampilkan temperatur, humidity, dew point, pressure, uptime, dan widget prakiraan cuaca. Penulis menggunakan tablet lama yang diletakkan di ruang keluarga untuk menampilkan informasi cuaca secara terus-menerus.

Langkah 14: Membuat Aplikasi Android dengan MIT App Inventor 2

Penulis membuat aplikasi Android sederhana menggunakan MIT App Inventor 2. Aplikasi menggunakan komponen WebView yang diarahkan menuju alamat IP NodeMCU dan port dashboard.

Dengan cara ini, pengguna dapat membuka dashboard melalui aplikasi Android tanpa harus mengetik alamat IP setiap kali ingin melihat kondisi cuaca. Aplikasi ini berfungsi sebagai pembuka halaman dashboard, bukan sebagai aplikasi yang melakukan pengukuran sensor secara langsung.

Langkah 15: Mengatur Akses Jarak Jauh

Penulis juga menjelaskan penggunaan port forwarding pada router agar dashboard dapat diakses dari luar jaringan rumah. Port 8888 hingga 8890 diarahkan ke alamat IP lokal NodeMCU.

Pengaturan ini memungkinkan akses dari smartphone melalui jaringan internet, tetapi perlu diperhatikan bahwa source code menggunakan HTTP dan WebSocket tanpa TLS serta konfigurasi update server dengan kredensial default. Untuk penerapan modern, sebaiknya gunakan VPN atau reverse proxy yang dilengkapi HTTPS dan autentikasi. Hindari mengekspos port firmware updater langsung ke internet.

Langkah 16: Menguji dan Mengevaluasi Sistem

Lakukan pengujian dengan memastikan sensor BME280 dapat terdeteksi. Perhatikan pesan BME280 test pada Serial Monitor. Jika sensor tidak terdeteksi, periksa kembali koneksi VIN, GND, SCL, dan SDA.

Setelah sensor terdeteksi, buka dashboard dan periksa apakah seluruh nilai dapat diperbarui. Pastikan WebSocket server berjalan pada port 8889 dan HTTP server berjalan pada port 8888. Periksa juga apakah data ThingSpeak terkirim setiap satu menit.

Uji halaman history.html dengan memastikan Channel ID yang benar sudah dimasukkan. Selanjutnya, uji HTTP Update Server dan Arduino OTA pada jaringan lokal yang aman.

Langkah 17: Pengembangan dan Kesimpulan

Proyek ini menunjukkan bagaimana NodeMCU ESP8266 dan sensor BME280 dapat digunakan untuk membuat stasiun cuaca rumahan yang menampilkan data secara real-time melalui WebSocket. Sistem juga menyediakan pencatatan historis melalui ThingSpeak, widget prakiraan cuaca, serta akses melalui perangkat Android.

Pengembangan lebih lanjut dapat mencakup penyempurnaan dashboard, penambahan grafik interaktif, penyimpanan data lokal, sinkronisasi waktu NTP, dan sistem autentikasi untuk mengamankan akses perangkat.

Seluruh source code pada artikel tersedia dengan nama Weather_Station_W4U dan lisensi GPL3+. Penulis memperbarui kode untuk memasukkan halaman history.html yang menampilkan data riwayat ThingSpeak.

🔒
Akses Gratis Khusus Member

Buka Seluruh Panduan, Skema & Source Code

Dapatkan akses penuh ke langkah perakitan detail, diagram sirkuit lengkap, dan source code siap pakai. Gratis selamanya!

✓ Akses Gratis Selamanya
✓ Copy-Paste Source Code
✓ Kembali Otomatis ke Proyek

Petualangan Belajar di coseru

💡 Saksikan keseruan anak-anak belajar merakit robot dan coding! Daftar Kelas Uji Coba →