Node-RED dengan Arduino (I/O Digital)
Berikut contoh program Arduino dan Node-RED untuk mengontrol input/output digital melalui komunikasi serial. Kita akan membuat sistem sederhana dengan:
- **Arduino**: Membaca input tombol (digital) dan mengirim statusnya ke Node-RED via serial. Node-RED akan mengirim perintah untuk menyalakan/mematikan LED (digital).
### **1. Program Arduino**
- // Pin Configuration
- const int buttonPin = 2; // Tombol terhubung ke pin 2 (INPUT)
- const int ledPin = 13; // LED terhubung ke pin 13 (OUTPUT)
- // Variables
- int buttonState = 0; // Status tombol
- int prevButtonState = 0; // Status tombol sebelumnya
- void setup() {
- Serial.begin(9600); // Inisialisasi serial (baud rate 9600)
- pinMode(buttonPin, INPUT_PULLUP); // Mode INPUT_PULLUP untuk tombol
- pinMode(ledPin, OUTPUT);
- }
- void loop() {
- // Baca status tombol (LOW = ditekan, HIGH = tidak ditekan)
- buttonState = digitalRead(buttonPin);
- // Kirim status tombol ke serial jika ada perubahan
- if (buttonState != prevButtonState) {
- Serial.print("Button:");
- Serial.println(buttonState);
- prevButtonState = buttonState;
- }
- // Baca perintah dari Node-RED via serial
- if (Serial.available() > 0) {
- char command = Serial.read();
- if (command == '1') {
- digitalWrite(ledPin, HIGH); // Nyalakan LED
- } else if (command == '0') {
- digitalWrite(ledPin, LOW); // Matikan LED
- }
- }
- delay(50); // Delay kecil untuk stabilisasi
- }
---
### **2. Node-RED Flow**
Berikut langkah-langkah membuat flow di Node-RED:
#### **Komponen yang Dibutuhkan**:
- Node `serial in` (untuk membaca data dari Arduino).
- Node `function` (untuk memproses data).
- Node `debug` (untuk menampilkan data di debug panel).
- Node `serial out` (untuk mengirim perintah ke Arduino).
- Node `inject` atau `dashboard button` (untuk mengontrol LED).
#### **Flow Configuration**:
1. **Baca Data Tombol dari Arduino**:
- Tambahkan node `serial in`:
- **Serial port**: Port Arduino (misal: `COM3` atau `/dev/ttyUSB0`).
- **Baud rate**: `9600`.
- Hubungkan ke node `function` untuk ekstraksi data:
// Fungsi untuk memproses data serial
- let rawData = msg.payload.trim();
- let data = rawData.split(":");
- if (data[0] === "Button") {
- msg.payload = {
- button: parseInt(data[1])
- };
- }
- return msg;
- Tambahkan node `debug` untuk menampilkan output.
2. **Kontrol LED dari Node-RED**:
- Tambahkan node `inject` atau `dashboard button` untuk mengirim perintah:
- Atur payload ke `1` (nyala) atau `0` (mati).
- Hubungkan ke node `serial out`:
- **Serial port**: Port yang sama dengan Arduino.
- **Baud rate**: `9600`.
#### **Contoh Flow JSON**:
```json
[{
"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": "Process Data",
"func": "let rawData = msg.payload.trim();\nlet data = rawData.split(\":\");\n\nif (data[0] === \"Button\") {\n msg.payload = {\n button: parseInt(data[1])\n };\n}\nreturn msg;",
"outputs": 1,
"x": 350,
"y": 100,
"wires": [["c1c2c3d4"]]
},
{
"id": "c1c2c3d4",
"type": "debug",
"z": "flow",
"name": "Show Button Status",
"active": true,
"x": 550,
"y": 100,
"wires": []
},
{
"id": "d1d2d3d4",
"type": "serial out",
"z": "flow",
"name": "Send to Arduino",
"serial": "arduino_port",
"x": 550,
"y": 200,
"wires": []
},
{
"id": "e1e2e3e4",
"type": "inject",
"z": "flow",
"name": "Turn LED ON",
"props": [{"p": "payload"}],
"repeat": "",
"crontab": "",
"once": false,
"payload": "1",
"payloadType": "str",
"x": 350,
"y": 200,
"wires": [["d1d2d3d4"]]
},
{
"id": "f1f2f3f4",
"type": "inject",
"z": "flow",
"name": "Turn LED OFF",
"props": [{"p": "payload"}],
"repeat": "",
"crontab": "",
"once": false,
"payload": "0",
"payloadType": "str",
"x": 350,
"y": 300,
"wires": [["d1d2d3d4"]]
}
]
### **Cara Kerja**:
1. **Arduino**:
- Membaca tombol di pin 2 (input digital dengan pull-up internal).
- Mengirim status tombol ke serial dalam format `Button:0` atau `Button:1`.
- Menerima perintah `1` atau `0` dari Node-RED untuk mengontrol LED di pin 13.
2. **Node-RED**:
- Membaca data serial dari Arduino dan menampilkan status tombol di debug panel.
- Mengirim perintah `1` (nyala) atau `0` (mati) ke Arduino via serial ketika tombol di UI ditekan.
### **Instalasi Node-RED**:
1. Pastikan Node-RED sudah terinstal.
2. Tambahkan node `node-red-node-serialport` untuk koneksi serial:
3. Deploy flow dan pastikan port serial Arduino terdeteksi.
### **Skema Rangkaian Arduino**:
- **Tombol**:
- Pin 2 → Tombol → GND (dengan resistor pull-up internal).
- **LED**:
- Pin 13 → LED → Resistor 220Ω → GND.
Dengan ini, Anda bisa memantau status tombol fisik melalui Node-RED dan mengontrol LED dari antarmuka Node-RED! 🚀
Comments
Post a Comment