Permalänk

Vad är fel med servern?

Jag vet inte varför min server inte startar, nedan har jag felmeddelandet och min server kod. Det finns inte något annat som använder min COM3 port. Detta kommer upp när jag skriver "node server.js":

TypeError: SerialPort is not a constructor at Object. <anonymous> (C:\Users\VikingLindkvist\my-arduino-project\server. js:14:20) at Module ._ compile (node: internal/modules/cjs/loader: 1378:14) at Module ._ extensions .. js (node: internal/modules/cjs/loader:1437:10) at Module. load (node: internal/modules/cjs/loader:1212:32) at Module ._ load (node: internal/modules/cjs/loader:1028:12) at Function. executeUserEntryPoint [as runMain] (node: internal/modules/run_main : 142:12) at node: internal/main/run_main_module: 28:49 Node. js v21.6.1 C:\Users\VikingLindkvist\my-arduino-project\server. js:14 const serialPort = new SerialPort('COM3', { baudRate: 9600 }, (err) => {

Server koden:

const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const SerialPort = require('serialport'); const Readline = require('@serialport/parser-readline'); const app = express(); const server = http.createServer(app); const io = socketIo(server); const port = process.env.PORT || 3002; const COM_PORT = 'COM3'; // Ange den korrekta COM-porten här const serialPort = new SerialPort('COM3', { baudRate: 9600 }, (err) => { if (err) { console.error('Error opening serial port:', err); } else { console.log('Serial port opened successfully.'); // Your code logic here } }); // Skapa en parser för att läsa seriell data rad för rad const parser = serialPort.pipe(new Readline({ delimiter: '\n' })); // Hantera inkommande data från Arduino och skicka till klienter via socket.io parser.on('data', data => { console.log('Data received from Arduino:', data); io.emit('arduino-data', data.trim()); }); // Lyssna på inkommande socket.io-anslutningar io.on('connection', (socket) => { console.log('A client connected'); // Hantera när en klient kopplar från socket.on('disconnect', () => { console.log('Client disconnected'); }); }); // Starta servern och lyssna på angiven port server.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });

Permalänk

Testa skriva

const { SerialPort } = require('serialport');

istället. Verkar dock sakna path då.
https://serialport.io/docs/guide-usage

Permalänk
Medlem

Dubletttråd. Orginalet här.

Jag kan inte det här skitspråket, men det ser ut som om konstruktorn ska ta ett objekt och en funktion som parametrar. Inte en sträng, ett objekt och en funktion.

Objektet ska ha en path-property som ska peka ut vilken serieport du vill öppna. Serieporten behöver förstås finnas och anges på rätt sätt beroende på vilken plattform du kör, 'COM3' är typiskt Windows-sätt att ange en serieport.

Permalänk
Medlem

Precis som felmeddelandet och KAD skriver så har du skrivit constructorn fel, och eftersom det inte finns någon overload av "SerialPort" som tar en sträng, ett objekt och en funktion så finns inte constructorn.

// finns inte const serialPort = new SerialPort('COM3', { baudRate: 9600 }, (err) => { // error kod });

Constructorn för SerialPort tar ett object och en funktion:

// hur du borde skriva const serialPort = new SerialPort({ path: 'COM3', baudRate: 9600 }, (err) => { // error kod });

Permalänk
Skrivet av swesen:

Precis som felmeddelandet och KAD skriver så har du skrivit constructorn fel, och eftersom det inte finns någon overload av "SerialPort" som tar en sträng, ett objekt och en funktion så finns inte constructorn.

// finns inte const serialPort = new SerialPort('COM3', { baudRate: 9600 }, (err) => { // error kod });

Constructorn för SerialPort tar ett object och en funktion:

// hur du borde skriva const serialPort = new SerialPort({ path: 'COM3', baudRate: 9600 }, (err) => { // error kod });

Men då får jag fel som:

const parser = serialPort.pipe(new Readline({ delimiter: '\n' })); TypeError: Readline is not a constructor

eller

node:internal/streams/readable:933 dest.on('unpipe', onunpipe); TypeError: dest.on is not a function

Jag hade en server som funkade förut, jag kan inte förstå hur dessa problem uppstår. Det här började hända efter att jag hade gjort ett kretskort, medan jag förut använde en test krets på en breadboard.

Permalänk
Medlem
Skrivet av Viking Lindkvist:

Men då får jag fel som:

const parser = serialPort.pipe(new Readline({ delimiter: '\n' })); TypeError: Readline is not a constructor

eller

node:internal/streams/readable:933 dest.on('unpipe', onunpipe); TypeError: dest.on is not a function

Jag hade en server som funkade förut, jag kan inte förstå hur dessa problem uppstår. Det här började hända efter att jag hade gjort ett kretskort, medan jag förut använde en test krets på en breadboard.

Som programmerare är det viktigt att du läser dokumentation: https://serialport.io/docs/api-parser-readline

Och varje tecken är viktiga och gör skillnad. Hint:

{ }

Permalänk
Skrivet av dlq84:

Som programmerare är det viktigt att du läser dokumentation: https://serialport.io/docs/api-parser-readline

Och varje tecken är viktiga och gör skillnad. Hint:

{ }

Jag antar då från det du skickade att det ska vara:

const { ReadlineParser } = require('@serialport/parser-readline')

Men ändå får jag problemet:

const parser = serialPort.pipe(new Readline({ delimiter: '\r\n' })); TypeError: Readline is not a constructor

Permalänk
Medlem
Skrivet av Viking Lindkvist:

Jag antar då från det du skickade att det ska vara:

const { ReadlineParser } = require('@serialport/parser-readline')

Men ändå får jag problemet:

const parser = serialPort.pipe(new Readline({ delimiter: '\r\n' })); TypeError: Readline is not a constructor

Antagligen för att du fortfarande använder ReadLine och inte ReadlineParser i serialPort.pipe? Har du testat att byta det också? Readline verkar vara från en gammal version av paketet, och är ersatt av ReadlineParser.

Visa signatur

| EVGA Z170 FTW | i7 6700k | ASUS RTX 3070 | 16GB DDR4 3200MHz | Cooler Master V850 | Samsung 840 Evo 250GB + 2x WD Black 500GB + Seagate 2TB SSHD + Samsung 970 Evo M.2 1TB|

Permalänk
Medlem
Skrivet av Viking Lindkvist:

Jag antar då från det du skickade att det ska vara:

const { ReadlineParser } = require('@serialport/parser-readline')

Men ändå får jag problemet:

const parser = serialPort.pipe(new Readline({ delimiter: '\r\n' })); TypeError: Readline is not a constructor

Du importerar ReadlineParser, då borde du rimligtvis använda den som

const parser = serialPort.pipe(new ReadlineParser({ delimiter: '\r\n' }));

Eller menar du att göra const { Readline } = require('@serialport/parser-readline') ?

Permalänk
Skrivet av cp_:

Du importerar ReadlineParser, då borde du rimligtvis använda den som

const parser = serialPort.pipe(new ReadlineParser({ delimiter: '\r\n' }));

Eller menar du att göra const { Readline } = require('@serialport/parser-readline') ?

Jag lade till den ändringen, så nu är min serialPort.pipe som den ska vara, men fortfarande får jag detta meddelande:

const parser = serialPort.pipe(new ReadlineParser({ delimiter: '\r\n' })); ReferenceError: ReadlineParser is not defined

Permalänk
Medlem
Skrivet av Viking Lindkvist:

Jag lade till den ändringen, så nu är min serialPort.pipe som den ska vara, men fortfarande får jag detta meddelande:

const parser = serialPort.pipe(new ReadlineParser({ delimiter: '\r\n' })); ReferenceError: ReadlineParser is not defined

Det är tyvärr väldigt svårt att se vad som är fel från bara en rad. Felet säger att "ReadlineParser" inte finns, vilket troligtvis beryder att det inte importerats.