Halo Fanbot!
Sedang ada project apa hari ini?
Sudah pernah melakukan komunikasi 2 NodeMCU dengan komunikasi client server?
Client Server merupakan salah satu metode untuk berkirim data dengan menggunakan wifi. Seperti namanya, cara yang digunakan untuk sistem komunikasi ini adalah dengan menjadikan salah satu NodeMCU menjadi Server dan satunya menjadi client. Keduanya dapat saling berkomunikasi dengan mengirimkan data atau informasi.
Nah di project kali ini, kita akan membuat alat untuk menampilkan suhu dari 2 ruangan menjadi 1 tampilan informasi dengan sistem komunikasi client server. Dalam hal ini, kita akan membutuhkan 3 NodeMCU, dengan 2 menjadi client dan satunya akan menjadi server. 2 client inilah yang akan dipasangkan di dalam 2 ruangan tersebut untuk mengetahui suhu ruangan dengan sensor DHT11. Sedangkan server di tempatkan di luar ruangan untuk informasi suhu bagi orang yang ingin masuk ke kedua ruangan tersebut. Penasaran bagaimana cara membuatnya? Yuk kita simak.
Alat dan Bahan
Alat dan bahan untuk project ini adalah sebagai berikut.
- Software Arduino IDE
- NodeMCU ESP8266 3
- DHT11 2
- LCD 16×2 2
- LCD I2C 20×4 1
- I2C 2
- Projectboard 3
- Kabel jumper Secukupnya
Rangkaian
Susun device di atas menjadi rangkaian seperti berikut. Pastikan semua terhubung dengan baik.
Belajar Elektronika, Arduino, dan IoT step by step dengan bantuan tangga belajar? Daftar sekarang dan dapatkan PROMO
Program
Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut. Perhatikan keterangan (comment) untuk memahami program dengan baik. Tambahkan beberapa library untuk mendukung program, seperti library DHT, Adafruit Sensor, dan Liquid Crystal I2C.
Program berikut adalah program untuk server (tanpa sensor DHT11 dan menggunakan LCD 20×4)
//program server client oleh indobot.co.id #include <ESP8266WiFi.h> //library wifi #include <LiquidCrystal_I2C.h> WiFiServer server(80); IPAddress IP(111,111,1,11); //ip address (bebas tapi format sama) IPAddress mask = (255, 255, 255, 0); LiquidCrystal_I2C lcd(0x27,20,4); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); WiFi.mode(WIFI_AP); WiFi.softAP("nodemcuserver", "indobot"); //ssid dan password (bebas tanpa spasi) WiFi.softAPConfig(IP, IP, mask); server.begin(); Serial.println(); Serial.println("SERVER NODEMCU ESP8266"); Serial.println("Server dimulai."); Serial.print("IP: "); Serial.println(WiFi.softAPIP()); Serial.print("MAC:"); Serial.println(WiFi.softAPmacAddress()); } void loop() { WiFiClient client = server.available(); if (!client) { return; } String request = client.readStringUntil('\r'); Serial.println("********************************"); Serial.println("Client Mengirim: " + request); //request untuk kiriman client client.flush(); String hasil = request; lcd.setCursor(0,0); lcd.print("Temperatur :"); if (hasil.indexOf ("Ruang 1") > -1) { //untuk tau request dari ruang 1 lcd.setCursor(0,1); lcd.print(request); } if (hasil.indexOf ("Ruang 2") > -1) { //untuk tau request dari ruang 2 lcd.setCursor(0,2); lcd.print(request); } } |
baca juga: Komunikasi 2 NodeMCU ESP8266 tanpa Koneksi Internet (Client Server)
program untuk Client Ruang 1 (dengan sensor DHT11 dan menggunakan LCD 16×2)
#include <ESP8266WiFi.h> #include "DHT.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); char ssid[] = "nodemcuserver"; // samakan dengan server char pass[] = "indobot"; // samakan dengan server IPAddress server(111,111,1,11); // ini juga samakan dengan server WiFiClient client; #define DHTPIN D3 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); dht.begin(); WiFi.mode(WIFI_STA); WiFi.begin(ssid, pass); // terhubung dengan server Serial.println(); Serial.println("Terhubung dengan Server?"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.println("terhubung"); Serial.println("CLIENT NODEMCU ESP8266"); Serial.print("LocalIP:"); Serial.println(WiFi.localIP()); Serial.println("MAC:" + WiFi.macAddress()); Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP()); Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr()); } void loop() { float t = dht.readTemperature(); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); client.connect(server, 80); Serial.println("********************************"); Serial.print("Jumlah Byte yang dikirim: "); client.print((String) "Ruang 1" + t + "*C\r"); //Mengirim ke server String answer = client.readStringUntil('\r'); //menampilkan di LCD lcd.setCursor(0,0); lcd.print("Temperatur :"); lcd.setCursor(0,1); lcd.print(t); lcd.print(" *C"); client.flush(); client.stop(); delay(2000); } |
baca juga: Tutorial Alat Penghitung Pengunjung Otomatis dengan Komunikasi Client Server
Ruang 2 (dengan sensor DHT11 dan menggunakan LCD 16×2)
#include <ESP8266WiFi.h> #include "DHT.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); char ssid[] = "nodemcuserver"; // samakan dengan server char pass[] = "indobot"; // samakan dengan server IPAddress server(111,111,1,11); // ini juga samakan dengan server WiFiClient client; #define DHTPIN D3 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); dht.begin(); WiFi.mode(WIFI_STA); WiFi.begin(ssid, pass); // terhubung dengan server Serial.println(); Serial.println("Terhubung dengan Server?"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.println("terhubung"); Serial.println("CLIENT NODEMCU ESP8266"); Serial.print("LocalIP:"); Serial.println(WiFi.localIP()); Serial.println("MAC:" + WiFi.macAddress()); Serial.print("Gateway:"); Serial.println(WiFi.gatewayIP()); Serial.print("AP MAC:"); Serial.println(WiFi.BSSIDstr()); } void loop() { float t = dht.readTemperature(); Serial.print("Temperature 2: "); Serial.print(t); Serial.println(" *C "); client.connect(server, 80); Serial.println("********************************"); Serial.print("Jumlah Byte yang dikirim: "); client.print((String) "Ruang 2" + t + "*C\r"); //Mengirim ke server String answer = client.readStringUntil('\r'); //menampilkan di LCD lcd.setCursor(0,0); lcd.print("Temperatur :"); lcd.setCursor(0,1); lcd.print(t); lcd.print(" *C"); client.flush(); client.stop(); delay(2000); } |
Jangan lupa untuk menyamakan semua ssid, password dan IP adress dengan server.
baca juga: Tutorial Menampilkan Suhu di 2 NodeMCU ESP8266 dengan Sistem Client Server
Upload semua program di atas ke masing-masing nodeMCU. Hasil dari project ini adalah kita dapat melihat hasil pembacaan dari 2 ruangan di satu tempat. Jadi misalkan kita ingin memasuki 2 ruangan tersebut, kita dapat mengetahui suhu di dalamnya. Selain itu, kita juga dapat mengetahui suhu ruangan saat kita berada di salah satu ruangan.
Jadi server di sini berfungsi sebagai tempat berkumpulnya data dari 2 NodeMCU client tersebut. Jika teman-teman ingin menambahkan banyaknya client, maka kita hanya perlu menambahkan dengan kode ruang yang berbeda, untuk membedakan hasil pembacaan.
Bagaimana? tertarik untuk mencoba?
Mau belajar elektronika dasar? Arduino? atau bahkan Internet of Things? Ikuti kursus online Indobot Academy!