| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import express from "express";
- import { WebSocketServer } from "ws";
- import { SerialPort } from "serialport";
- import { ReadlineParser } from "@serialport/parser-readline";
- const app = express();
- const portHTTP = 8080;
- // === SERVE FRONTEND ===
- app.use(express.static("public"));
- const server = app.listen(portHTTP, () =>
- console.log(`Web server running on http://localhost:${portHTTP}`)
- );
- // === WEBSOCKET ===
- const wss = new WebSocketServer({ server });
- // === SERIAL ===
- const serial = new SerialPort({ path: "COM8", baudRate: 115200 });
- const parser = serial.pipe(new ReadlineParser({ delimiter: "\n" }));
- // Saat ESP32 kirim JSON lewat Serial
- parser.on("data", (line) => {
- console.log("📥 Dari ESP32:", line);
- try {
- const json = JSON.parse(line);
- // kirim ke semua client WebSocket
- wss.clients.forEach((ws) => {
- if (ws.readyState === ws.OPEN) ws.send(JSON.stringify(json));
- });
- } catch (e) {
- console.log("Bukan JSON valid:", line);
- }
- });
- // Saat web kirim command (misal: delete)
- wss.on("connection", (ws) => {
- ws.on("message", (msg) => {
- const command = JSON.parse(msg);
- console.log("📤 Dari Browser:", command);
- // console.log(command.type);
- if (command.type === "DISCONNECT") {
- const data = `DISCONNECT:${command.connID}\n`;
- console.log("DISCONNECTING...", data);
- // Kirim tiap karakter satu per satu
- for (let i = 0; i < data.length; i++) {
- const char = data[i];
- serial.write(Buffer.from(char, 'ascii'), (err) => {
- if (err) {
- console.error(`Error writing char '${char}':`, err.message);
- } else {
- // console.log(`Char '${char}' sent`);
- }
- });
- }
- }
- });
- });
|