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).
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C: 0x27 (sesuaikan dengan LCD Anda)
- String receivedString = ""; // Variabel untuk menyimpan pesan dari Node-RED
- String outgoingString = ""; // Variabel untuk mengirim data ke Node-RED
- void setup() {
- Serial.begin(9600);
- lcd.init(); // Inisialisasi LCD
- lcd.backlight(); // Nyalakan backlight
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Node-RED LCD");
- delay(2000);
- }
- void loop() {
- // Baca pesan dari Node-RED via serial
- while (Serial.available() > 0) {
- char c = Serial.read();
- if (c == '\n') {
- tampilkanPesanDiLCD(receivedString);
- receivedString = "";
- } else {
- receivedString += c;
- }
- }
- // Kirim data ke Node-RED (contoh: "Status: OK")
- outgoingString = "Status: OK";
- Serial.println(outgoingString); // Gunakan println untuk menambahkan newline (\n)
- delay(2000);
- }
- // Fungsi untuk menampilkan pesan di LCD
- void tampilkanPesanDiLCD(String pesan) {
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("From Node-RED:");
- lcd.setCursor(0, 1);
- lcd.print(pesan.substring(0, 16)); // Potong teks agar sesuai dengan 16 karakter
- }
```
### **2. Node-RED Flow**
#### **Komponen yang Dibutuhkan**:
- `serial in` (membaca data dari Arduino).
- `serial out` (mengirim data ke Arduino).
- `text input` (dashboard UI untuk mengirim teks).
- `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**:
- Menampilkan pesan "Node-RED LCD" saat startup.
- Mengirim string "Status: OK" ke Node-RED setiap 2 detik.
- Menerima string dari Node-RED dan menampilkannya di LCD.
2. **Node-RED**:
- Menampilkan pesan dari Arduino di dashboard text.
- Mengirim teks dari input dashboard ke Arduino (ditambah newline `\n`).
### **Instalasi**:
1. **Arduino**:
- Install library `LiquidCrystal_I2C` via Library Manager.
- Sesuaikan alamat I2C LCD (biasanya 0x27 atau 0x3F).
2. **Node-RED**:
- Install node `node-red-dashboard` dan `node-red-node-serialport`:
- Akses dashboard di `http://localhost:1880/ui`.
### **Testing**:
- Upload program ke Arduino.
- Deploy flow Node-RED.
- Buka dashboard Node-RED:
- Input teks di **"Kirim ke LCD"** → Teks akan muncul di LCD Arduino.
- 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
Post a Comment