read_serial.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import express from "express";
  2. import { WebSocketServer } from "ws";
  3. import { SerialPort } from "serialport";
  4. import { ReadlineParser } from "@serialport/parser-readline";
  5. const app = express();
  6. const portHTTP = 8080;
  7. // === SERVE FRONTEND ===
  8. app.use(express.static("public"));
  9. const server = app.listen(portHTTP, () =>
  10. console.log(`Web server running on http://localhost:${portHTTP}`)
  11. );
  12. // === WEBSOCKET ===
  13. const wss = new WebSocketServer({ server });
  14. // === SERIAL ===
  15. const serial = new SerialPort({ path: "COM8", baudRate: 115200 });
  16. const parser = serial.pipe(new ReadlineParser({ delimiter: "\n" }));
  17. // Saat ESP32 kirim JSON lewat Serial
  18. parser.on("data", (line) => {
  19. console.log("📥 Dari ESP32:", line);
  20. try {
  21. const json = JSON.parse(line);
  22. // kirim ke semua client WebSocket
  23. wss.clients.forEach((ws) => {
  24. if (ws.readyState === ws.OPEN) ws.send(JSON.stringify(json));
  25. });
  26. } catch (e) {
  27. console.log("Bukan JSON valid:", line);
  28. }
  29. });
  30. // Saat web kirim command (misal: delete)
  31. wss.on("connection", (ws) => {
  32. ws.on("message", (msg) => {
  33. const command = JSON.parse(msg);
  34. console.log("📤 Dari Browser:", command);
  35. // console.log(command.type);
  36. if (command.type === "DISCONNECT") {
  37. const data = `DISCONNECT:${command.connID}\n`;
  38. console.log("DISCONNECTING...", data);
  39. // Kirim tiap karakter satu per satu
  40. for (let i = 0; i < data.length; i++) {
  41. const char = data[i];
  42. serial.write(Buffer.from(char, 'ascii'), (err) => {
  43. if (err) {
  44. console.error(`Error writing char '${char}':`, err.message);
  45. } else {
  46. // console.log(`Char '${char}' sent`);
  47. }
  48. });
  49. }
  50. }
  51. });
  52. });