Node-RED dengan Arduino (data teks)

Berikut contoh program Arduino dan Node-RED untuk komunikasi serial dengan tipe data string yang ditampilkan di **LCD 16x2** (di Arduino) dan **dashboard text** di Node-RED:

### **1. Program Arduino (Menggunakan LCD 16x2)**

#### **Skema Rangkaian**:

- LCD 16x2 (I2C) → SDA ke A4, SCL ke A5, VCC ke 5V, GND ke GND.

- **Komponen**: Potensiometer untuk mengatur kecerahan LCD (jika menggunakan LCD non-I2C).

  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C: 0x27 (sesuaikan dengan LCD Anda)
  4. String receivedString = "";    // Variabel untuk menyimpan pesan dari Node-RED
  5. String outgoingString = "";    // Variabel untuk mengirim data ke Node-RED
  6. void setup() {
  7.   Serial.begin(9600);
  8.   lcd.init();          // Inisialisasi LCD
  9.   lcd.backlight();     // Nyalakan backlight
  10.   lcd.clear();
  11.   lcd.setCursor(0, 0);
  12.   lcd.print("Node-RED LCD");
  13.   delay(2000);
  14. }
  15. void loop() {
  16.   // Baca pesan dari Node-RED via serial
  17.   while (Serial.available() > 0) {
  18.     char c = Serial.read();
  19.     if (c == '\n') {
  20.       tampilkanPesanDiLCD(receivedString);
  21.       receivedString = "";
  22.     } else {
  23.       receivedString += c;
  24.     }
  25.   }
  26.   // Kirim data ke Node-RED (contoh: "Status: OK")
  27.   outgoingString = "Status: OK";
  28.   Serial.println(outgoingString); // Gunakan println untuk menambahkan newline (\n)
  29.   delay(2000);
  30. }
  31. // Fungsi untuk menampilkan pesan di LCD
  32. void tampilkanPesanDiLCD(String pesan) {
  33.   lcd.clear();
  34.   lcd.setCursor(0, 0);
  35.   lcd.print("From Node-RED:");
  36.   lcd.setCursor(0, 1);
  37.   lcd.print(pesan.substring(0, 16)); // Potong teks agar sesuai dengan 16 karakter
  38. }

```


### **2. Node-RED Flow**

#### **Komponen yang Dibutuhkan**:

  1. `serial in` (membaca data dari Arduino).
  2. `serial out` (mengirim data ke Arduino).
  3. `text input` (dashboard UI untuk mengirim teks).
  4. `text` (dashboard UI untuk menampilkan teks dari Arduino).

#### **Konfigurasi Flow**:

1. **Menerima Data dari Arduino**:

   - Node `serial in` → Terhubung ke port Arduino (baud rate 9600).

   - Node `function` untuk memformat data:

     // Format pesan dari Arduino
     msg.payload = "Arduino: " + msg.payload;
     return msg;
     ```

   - Node `text` di dashboard untuk menampilkan teks.


2. **Mengirim Data ke Arduino**:

   - Node `text input` di dashboard → Input teks dari pengguna.

   - Node `function` untuk menambahkan newline (`\n`):

     msg.payload = msg.payload + "\n"; // Tambahkan newline sebagai delimiter
     return msg;

     ```

   - Node `serial out` → Terhubung ke port Arduino.


#### **Flow JSON** (Import ke Node-RED):

[
  {
    "id": "a1b2c3d4",
    "type": "serial in",
    "z": "flow",
    "name": "Arduino Serial",
    "serial": "arduino_port",
    "x": 150,
    "y": 100,
    "wires": [["b1b2c3d4"]]
  },
  {
    "id": "b1b2c3d4",
    "type": "function",
    "z": "flow",
    "name": "Format Arduino Data",
    "func": "msg.payload = \"Arduino: \" + msg.payload;\nreturn msg;",
    "outputs": 1,
    "x": 350,
    "y": 100,
    "wires": [["c1c2c3d4"]]
  },
  {
    "id": "c1c2c3d4",
    "type": "ui_text",
    "z": "flow",
    "group": "dashboard",
    "order": 1,
    "width": "6",
    "height": "2",
    "name": "Arduino Message",
    "label": "Pesan dari Arduino",
    "format": "{{msg.payload}}",
    "x": 550,
    "y": 100,
    "wires": []
  },
  {
    "id": "d1d2d3d4",
    "type": "ui_text_input",
    "z": "flow",
    "name": "Send to LCD",
    "label": "Kirim ke LCD:",
    "group": "dashboard",
    "order": 2,
    "width": "6",
    "height": "1",
    "x": 150,
    "y": 200,
    "wires": [["e1e2e3e4"]]
  },
  {
    "id": "e1e2e3e4",
    "type": "function",
    "z": "flow",
    "name": "Add Newline",
    "func": "msg.payload = msg.payload + \"\\n\";\nreturn msg;",
    "outputs": 1,
    "x": 350,
    "y": 200,
    "wires": [["f1f2f3f4"]]
  },
  {
    "id": "f1f2f3f4",
    "type": "serial out",
    "z": "flow",
    "name": "Send to Arduino",
    "serial": "arduino_port",
    "x": 550,
    "y": 200,
    "wires": []
  }
]

```

### **Cara Kerja**:

1. **Arduino**:

  1.    Menampilkan pesan "Node-RED LCD" saat startup.
  2.    Mengirim string "Status: OK" ke Node-RED setiap 2 detik.
  3.    Menerima string dari Node-RED dan menampilkannya di LCD.

2. **Node-RED**:

  1.    Menampilkan pesan dari Arduino di dashboard text.
  2.    Mengirim teks dari input dashboard ke Arduino (ditambah newline `\n`).


### **Instalasi**:

1. **Arduino**:

  1.    Install library `LiquidCrystal_I2C` via Library Manager.
  2.    Sesuaikan alamat I2C LCD (biasanya 0x27 atau 0x3F).

2. **Node-RED**:

  1.    Install node `node-red-dashboard` dan `node-red-node-serialport`:
  2.    Akses dashboard di `http://localhost:1880/ui`.

### **Testing**:

  1. Upload program ke Arduino.
  2. Deploy flow Node-RED.
  3. Buka dashboard Node-RED:
    1.    Input teks di **"Kirim ke LCD"** → Teks akan muncul di LCD Arduino.
    2.    Pesan "Arduino: Status: OK" akan muncul di dashboard setiap 2 detik.

Dengan ini, Anda bisa membuat komunikasi dua arah antara Arduino dan Node-RED menggunakan string! 📟🔄

Comments

Popular posts from this blog

Node-RED dengan Arduino (I/O Digital)

Cyber Physical System, apa itu?